ETH Price: $3,242.86 (-2.47%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
APROracle

Compiler Version
v0.5.12+commit.7709ece9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2020-01-25
*/

// File: @openzeppelin\contracts\token\ERC20\IERC20.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

// File: @openzeppelin\contracts\GSN\Context.sol

pragma solidity ^0.5.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin\contracts\ownership\Ownable.sol

pragma solidity ^0.5.0;

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _owner);
    }

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

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

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: @openzeppelin\contracts\math\SafeMath.sol

pragma solidity ^0.5.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.
     *
     * _Available since v2.4.0._
     */
    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.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        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.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: @openzeppelin\contracts\utils\Address.sol

pragma solidity ^0.5.5;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * This test is non-exhaustive, and there may be false-negatives: during the
     * execution of a contract's constructor, its address will be reported as
     * not containing a contract.
     *
     * IMPORTANT: It is unsafe to assume that an address for which this
     * function returns false is an externally-owned account (EOA) and not a
     * contract.
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     *
     * _Available since v2.4.0._
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call.value(amount)("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

// File: contracts\OracleStore.sol

pragma solidity >=0.4.21 <0.7.0;
pragma experimental ABIEncoderV2;



// Compound
interface Compound {
  function supply(address asset, uint amount) external returns (uint);
  function withdraw(address asset, uint requestedAmount) external returns (uint);
  function getSupplyBalance(address account, address asset) view external returns (uint);
  function supplyRatePerBlock() external view returns (uint);
  function mint(uint mintAmount) external returns (uint);
  function redeem(uint redeemTokens) external returns (uint);
  function balanceOf(address account) external view returns (uint);
}

// Fulcrum
interface Fulcrum {
  function supplyInterestRate() external view returns (uint256);
}

interface DyDx {
  struct val {
       uint256 value;
   }

   struct set {
      uint128 borrow;
      uint128 supply;
  }

  function getEarningsRate() external view returns (val memory);
  function getMarketInterestRate(uint256 marketId) external view returns (val memory);
  function getMarketTotalPar(uint256 marketId) external view returns (set memory);
}

interface LendingPoolAddressesProvider {
    function getLendingPoolCore() external view returns (address);
}

interface LendingPoolCore  {
  function getReserveCurrentLiquidityRate(address _reserve)
  external
  view
  returns (
      uint256 liquidityRate
  );
}

contract APROracle is Ownable {
  using SafeMath for uint256;
  using Address for address;

  uint256 DECIMAL = 10 ** 18;

  mapping(address => uint256) _priceStore;
  mapping(address => uint256) _liquidityStore;
  address public oracle;

  // MAINNET ADDRESSES
  address public DYDX;
  address public AAVE;

  // Ease of use functions, can also use generic lookups for new tokens
  address public CDAI;
  address public CBAT;
  address public CETH;
  address public CREP;
  address public CSAI;
  address public CUSDC;
  address public CWBTC;
  address public CZRX;

  address public IZRX;
  address public IREP;
  address public IKNC;
  address public IBAT;
  address public IWBTC;
  address public IUSDC;
  address public IETH;
  address public ISAI;
  address public IDAI;
  address public ILINK;
  address public ISUSD;

  address public ADAI;
  address public ATUSD;
  address public AUSDC;
  address public AUSDT;
  address public ASUSD;
  address public ALEND;
  address public ABAT;
  address public AETH;
  address public ALINK;
  address public AKNC;
  address public AREP;
  address public AMKR;
  address public AMANA;
  address public AZRX;
  address public ASNX;
  address public AWBTC;

  constructor() public {
    oracle = msg.sender;
    DYDX = address(0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e);
    AAVE = address(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8);

    CDAI = address(0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643);
    CBAT = address(0x6C8c6b02E7b2BE14d4fA6022Dfd6d75921D90E4E);
    CETH = address(0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5);
    CREP = address(0x158079Ee67Fce2f58472A96584A73C7Ab9AC95c1);
    CSAI = address(0xF5DCe57282A584D2746FaF1593d3121Fcac444dC);
    CUSDC = address(0x39AA39c021dfbaE8faC545936693aC917d5E7563);
    CWBTC = address(0xC11b1268C1A384e55C48c2391d8d480264A3A7F4);
    CZRX = address(0xB3319f5D18Bc0D84dD1b4825Dcde5d5f7266d407);

    IZRX = address(0xA7Eb2bc82df18013ecC2A6C533fc29446442EDEe);
    IREP = address(0xBd56E9477Fc6997609Cf45F84795eFbDAC642Ff1);
    IKNC = address(0x1cC9567EA2eB740824a45F8026cCF8e46973234D);
    IWBTC = address(0xBA9262578EFef8b3aFf7F60Cd629d6CC8859C8b5);
    IUSDC = address(0xF013406A0B1d544238083DF0B93ad0d2cBE0f65f);
    IETH = address(0x77f973FCaF871459aa58cd81881Ce453759281bC);
    ISAI = address(0x14094949152EDDBFcd073717200DA82fEd8dC960);
    IDAI = address(0x493C57C4763932315A328269E1ADaD09653B9081);
    ILINK = address(0x1D496da96caf6b518b133736beca85D5C4F9cBc5);
    ISUSD = address(0x49f4592E641820e928F9919Ef4aBd92a719B4b49);

    ADAI = address(0x6B175474E89094C44Da98b954EedeAC495271d0F);
    ATUSD = address(0x0000000000085d4780B73119b644AE5ecd22b376);
    AUSDC = address(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
    AUSDT = address(0xdAC17F958D2ee523a2206206994597C13D831ec7);
    ASUSD = address(0x57Ab1ec28D129707052df4dF418D58a2D46d5f51);
    ALEND = address(0x80fB784B7eD66730e8b1DBd9820aFD29931aab03);
    ABAT = address(0x0D8775F648430679A709E98d2b0Cb6250d2887EF);
    AETH = address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
    ALINK = address(0x514910771AF9Ca656af840dff83E8264EcF986CA);
    AKNC = address(0xdd974D5C2e2928deA5F71b9825b8b646686BD200);
    AREP = address(0x1985365e9f78359a9B6AD760e32412f4a445E862);
    AMKR = address(0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2);
    AMANA = address(0x0F5D2fB29fb7d3CFeE444a200298f468908cC942);
    AZRX = address(0xE41d2489571d322189246DaFA5ebDe1F4699F498);
    ASNX = address(0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F);
    AWBTC = address(0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599);
  }

  function recommendDAI() public view returns (string memory) {
    uint256 max = 0;
    uint256 c = getCDAIAPR();
    if (c > max) {
      max = c;
    }
    uint256 i = getIDAIAPR();
    if (i > max) {
      max = i;
    }
    uint256 d = getDyDxDAIAPR();
    if (d > max) {
      max = d;
    }
    uint256 a = getADAIAPR();
    if (a > max) {
      max = a;
    }
    string memory best = 'none';
    if (max == c) {
      best = 'Compound';
    }
    if (max == i) {
      best = 'Fulcrum';
    }
    if (max == d) {
      best = 'dYdX';
    }
    if (max == a) {
      best = 'Aave';
    }
    return best;
  }
  function recommendETH() public view returns (string memory) {
    uint256 max = 0;
    uint256 c = getCETHAPR();
    if (c > max) {
      max = c;
    }
    uint256 i = getIETHAPR();
    if (i > max) {
      max = i;
    }
    uint256 d = getDyDxETHAPR();
    if (d > max) {
      max = d;
    }
    uint256 a = getAETHAPR();
    if (a > max) {
      max = a;
    }
    string memory best = 'none';
    if (max == c) {
      best = 'Compound';
    }
    if (max == i) {
      best = 'Fulcrum';
    }
    if (max == d) {
      best = 'dYdX';
    }
    if (max == a) {
      best = 'Aave';
    }
    return best;
  }
  function recommendUSDC() public view returns (string memory) {
    uint256 max = 0;
    uint256 c = getCUSDCAPR();
    if (c > max) {
      max = c;
    }
    uint256 i = getIUSDCAPR();
    if (i > max) {
      max = i;
    }
    uint256 d = getDyDxUSDCAPR();
    if (d > max) {
      max = d;
    }
    uint256 a = getAUSDCAPR();
    if (a > max) {
      max = a;
    }
    string memory best = 'none';
    if (max == c) {
      best = 'Compound';
    }
    if (max == i) {
      best = 'Fulcrum';
    }
    if (max == d) {
      best = 'dYdX';
    }
    if (max == a) {
      best = 'Aave';
    }
    return best;
  }

  modifier restricted() {
    if (msg.sender == oracle) _;
  }

  function set_new_AAVE(address _new_AAVE) public restricted {
      AAVE = _new_AAVE;
  }

  function set_new_IZRX(address _new_IZRX) public restricted {
      IZRX = _new_IZRX;
  }

  function set_new_IREP(address _new_IREP) public restricted {
      IREP = _new_IREP;
  }

  function set_new_IKNC(address _new_IKNC) public restricted {
      IKNC = _new_IKNC;
  }

  function set_new_IWBTC(address _new_IWBTC) public restricted {
      IWBTC = _new_IWBTC;
  }

  function set_new_IUSDC(address _new_IUSDC) public restricted {
      IUSDC = _new_IUSDC;
  }

  function set_new_IETH(address _new_IETH) public restricted {
      IETH = _new_IETH;
  }

  function set_new_ISAI(address _new_ISAI) public restricted {
      ISAI = _new_ISAI;
  }

  function set_new_IDAI(address _new_IDAI) public restricted {
      IDAI = _new_IDAI;
  }

  function set_new_ILINK(address _new_ILINK) public restricted {
      ILINK = _new_ILINK;
  }

  function set_new_ISUSD(address _new_ISUSD) public restricted {
      ISUSD = _new_ISUSD;
  }

  function set_new_CDAI(address _new_CDAI) public restricted {
      CDAI = _new_CDAI;
  }

  function set_new_CBAT(address _new_CBAT) public restricted {
      CBAT = _new_CBAT;
  }

  function set_new_CETH(address _new_CETH) public restricted {
      CETH = _new_CETH;
  }

  function set_new_CREP(address _new_CREP) public restricted {
      CREP = _new_CREP;
  }

  function set_new_CSAI(address _new_CSAI) public restricted {
      CSAI = _new_CSAI;
  }

  function set_new_CUSDC(address _new_CUSDC) public restricted {
      CUSDC = _new_CUSDC;
  }

  function set_new_CWBTC(address _new_CWBTC) public restricted {
      CWBTC = _new_CWBTC;
  }

  function set_new_CZRX(address _new_CZRX) public restricted {
      CZRX = _new_CZRX;
  }

  function set_new_DYDX(address _new_DYDX) public restricted {
      DYDX = _new_DYDX;
  }

  function set_new_ADAI(address _new_ADAI) public restricted {
      ADAI = _new_ADAI;
  }

  function set_new_ATUSD(address _new_ATUSD) public restricted {
      ATUSD = _new_ATUSD;
  }

  function set_new_AUSDC(address _new_AUSDC) public restricted {
      AUSDC = _new_AUSDC;
  }

  function set_new_AUSDT(address _new_AUSDT) public restricted {
      AUSDT = _new_AUSDT;
  }

  function set_new_ASUSD(address _new_ASUSD) public restricted {
      ASUSD = _new_ASUSD;
  }

  function set_new_ALEND(address _new_ALEND) public restricted {
      ALEND = _new_ALEND;
  }

  function set_new_ABAT(address _new_ABAT) public restricted {
      ABAT = _new_ABAT;
  }

  function set_new_AETH(address _new_AETH) public restricted {
      AETH = _new_AETH;
  }

  function set_new_ALINK(address _new_ALINK) public restricted {
      ALINK = _new_ALINK;
  }

  function set_new_AKNC(address _new_AKNC) public restricted {
      AKNC = _new_AKNC;
  }

  function set_new_AREP(address _new_AREP) public restricted {
      AREP = _new_AREP;
  }

  function set_new_AMKR(address _new_AMKR) public restricted {
      AMKR = _new_AMKR;
  }

  function set_new_AMANA(address _new_AMANA) public restricted {
      AMANA = _new_AMANA;
  }

  function set_new_AZRX(address _new_AZRX) public restricted {
      AZRX = _new_AZRX;
  }

  function set_new_ASNX(address _new_ASNX) public restricted {
      ASNX = _new_ASNX;
  }

  function set_new_AWBTC(address _new_AWBTC) public restricted {
      AWBTC = _new_AWBTC;
  }

  function setPrice(address _token, uint256 _price) public restricted {
    _priceStore[_token] = _price;
  }

  function getPrice(address _token) public view returns (uint256) {
    return _priceStore[_token];
  }

  function setLiquidity(address _token, uint256 _liquidity) public restricted {
    _liquidityStore[_token] = _liquidity;
  }

  function getLiquidity(address _token) public view returns (uint256) {
    return _liquidityStore[_token];
  }

  function getAllCompoundAPR()
      external
      view
      returns (
          uint256 cDAI,
          uint256 cBAT,
          uint256 cETH,
          uint256 cREP,
          uint256 cSAI,
          uint256 cUSDC,
          uint256 cWBTC,
          uint256 cZRC
      )
  {
      return (
        getCDAIAPR(),
        getCBATAPR(),
        getCETHAPR(),
        getCREPAPR(),
        getCSAIAPR(),
        getCUSDCAPR(),
        getCWBTCAPR(),
        getCZRCAPR()
      );
  }

  // Compound
  function getCDAIAPR() public view returns (uint256) {
    return getCompoundAPR(CDAI);
  }
  function getCBATAPR() public view returns (uint256) {
    return getCompoundAPR(CBAT);
  }
  function getCETHAPR() public view returns (uint256) {
    return getCompoundAPR(CETH);
  }
  function getCREPAPR() public view returns (uint256) {
    return getCompoundAPR(CREP);
  }
  function getCSAIAPR() public view returns (uint256) {
    return getCompoundAPR(CSAI);
  }
  function getCUSDCAPR() public view returns (uint256) {
    return getCompoundAPR(CUSDC);
  }
  function getCWBTCAPR() public view returns (uint256) {
    return getCompoundAPR(CWBTC);
  }
  function getCZRCAPR() public view returns (uint256) {
    return getCompoundAPR(CZRX);
  }
  function getCompoundAPR(address token) public view returns (uint256) {
    return Compound(token).supplyRatePerBlock().mul(2102400);
  }

  function getAllDyDxAPR()
      external
      view
      returns (
          uint256 dSAI,
          uint256 dETH,
          uint256 dUSDC,
          uint256 dDAI
      )
  {
      return (
        getDyDxSAIAPR(),
        getDyDxETHAPR(),
        getDyDxUSDCAPR(),
        getDyDxDAIAPR()
      );
  }

  // dYdX
  function getDyDxSAIAPR() public view returns(uint256) {
    return getDyDxAPR(1);
  }
  function getDyDxETHAPR() public view returns(uint256) {
    return getDyDxAPR(0);
  }
  function getDyDxUSDCAPR() public view returns(uint256) {
    return getDyDxAPR(2);
  }
  function getDyDxDAIAPR() public view returns(uint256) {
    return getDyDxAPR(3);
  }

  function getAllFulcrumAPR()
      external
      view
      returns (
          uint256 iZRX,
          uint256 iREP,
          uint256 iKNC,
          uint256 iWBTC,
          uint256 iUSDC,
          uint256 iETH,
          uint256 iSAI,
          uint256 iDAI,
          uint256 iLINK,
          uint256 iSUSD
      )
  {
      return (
        getIZRXAPR(),
        getIREPAPR(),
        getIKNCAPR(),
        getIWBTCAPR(),
        getIUSDCAPR(),
        getIETHAPR(),
        getISAIAPR(),
        getIDAIAPR(),
        getILINKAPR(),
        getISUSDAPR()
      );
  }

  // Fulcrum
  function getIZRXAPR() public view returns (uint256) {
    return getFulcrumAPR(IZRX);
  }
  function getIREPAPR() public view returns (uint256) {
    return getFulcrumAPR(IREP);
  }
  function getIKNCAPR() public view returns (uint256) {
    return getFulcrumAPR(IKNC);
  }
  function getIWBTCAPR() public view returns (uint256) {
    return getFulcrumAPR(IWBTC);
  }
  function getIUSDCAPR() public view returns (uint256) {
    return getFulcrumAPR(IUSDC);
  }
  function getIETHAPR() public view returns (uint256) {
    return getFulcrumAPR(IETH);
  }
  function getISAIAPR() public view returns (uint256) {
    return getFulcrumAPR(ISAI);
  }
  function getIDAIAPR() public view returns (uint256) {
    return getFulcrumAPR(IDAI);
  }
  function getILINKAPR() public view returns (uint256) {
    return getFulcrumAPR(ILINK);
  }
  function getISUSDAPR() public view returns (uint256) {
    return getFulcrumAPR(ISUSD);
  }

  function getFulcrumAPR(address token) public view returns(uint256) {
    return Fulcrum(token).supplyInterestRate().div(100);
  }

  function getDyDxAPR(uint256 marketId) public view returns(uint256) {
    uint256 rate      = DyDx(DYDX).getMarketInterestRate(marketId).value;
    uint256 aprBorrow = rate * 31622400;
    uint256 borrow    = DyDx(DYDX).getMarketTotalPar(marketId).borrow;
    uint256 supply    = DyDx(DYDX).getMarketTotalPar(marketId).supply;
    uint256 usage     = (borrow * DECIMAL) / supply;
    uint256 apr       = (((aprBorrow * usage) / DECIMAL) * DyDx(DYDX).getEarningsRate().value) / DECIMAL;
    return apr;
  }

  function getAllAaveAPR()
      external
      view
      returns (
          uint256 aDAI,
          uint256 aTUSD,
          uint256 aUSDC,
          uint256 aUSDT,
          uint256 aSUSD,
          uint256 aBAT,
          uint256 aETH,
          uint256 aLINK,
          uint256 aKNC,
          uint256 aREP,
          uint256 aZRX,
          uint256 aSNX
      )
  {
      return (
        getADAIAPR(),
        getATUSDAPR(),
        getAUSDCAPR(),
        getAUSDTAPR(),
        getASUSDAPR(),
        getABATAPR(),
        getAETHAPR(),
        getALINKAPR(),
        getAKNCAPR(),
        getAREPAPR(),
        getAZRXAPR(),
        getASNXAPR()
      );
  }

  function getADAIAPR() public view returns (uint256) {
    return getAaveAPR(ADAI);
  }
  function getATUSDAPR() public view returns (uint256) {
    return getAaveAPR(ATUSD);
  }
  function getAUSDCAPR() public view returns (uint256) {
    return getAaveAPR(AUSDC);
  }
  function getAUSDTAPR() public view returns (uint256) {
    return getAaveAPR(AUSDT);
  }
  function getASUSDAPR() public view returns (uint256) {
    return getAaveAPR(ASUSD);
  }
  function getALENDAPR() public view returns (uint256) {
    return getAaveAPR(ALEND);
  }
  function getABATAPR() public view returns (uint256) {
    return getAaveAPR(ABAT);
  }
  function getAETHAPR() public view returns (uint256) {
    return getAaveAPR(AETH);
  }
  function getALINKAPR() public view returns (uint256) {
    return getAaveAPR(ALINK);
  }
  function getAKNCAPR() public view returns (uint256) {
    return getAaveAPR(AKNC);
  }
  function getAREPAPR() public view returns (uint256) {
    return getAaveAPR(AREP);
  }
  function getAMKRAPR() public view returns (uint256) {
    return getAaveAPR(AMKR);
  }
  function getAMANAAPR() public view returns (uint256) {
    return getAaveAPR(AMANA);
  }
  function getAZRXAPR() public view returns (uint256) {
    return getAaveAPR(AZRX);
  }
  function getASNXAPR() public view returns (uint256) {
    return getAaveAPR(ASNX);
  }
  function getAWBTCAPR() public view returns (uint256) {
    return getAaveAPR(AWBTC);
  }

  function getAaveCore() public view returns (address) {
    return address(LendingPoolAddressesProvider(AAVE).getLendingPoolCore());
  }

  function getAaveAPR(address token) public view returns (uint256) {
    LendingPoolCore core = LendingPoolCore(LendingPoolAddressesProvider(AAVE).getLendingPoolCore());
    return core.getReserveCurrentLiquidityRate(token).div(1e9);
  }

  // incase of half-way error
  function inCaseTokenGetsStuck(IERC20 _TokenAddress) onlyOwner public {
      uint qty = _TokenAddress.balanceOf(address(this));
      _TokenAddress.transfer(msg.sender, qty);
  }
  // incase of half-way error
  function inCaseETHGetsStuck() onlyOwner public{
      (bool result, ) = msg.sender.call.value(address(this).balance)("");
      require(result, "transfer of ETH failed");
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"constant":true,"inputs":[],"name":"AAVE","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ABAT","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ADAI","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AETH","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AKNC","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ALEND","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ALINK","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AMANA","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AMKR","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AREP","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ASNX","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ASUSD","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ATUSD","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AUSDC","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AUSDT","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AWBTC","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AZRX","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CBAT","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CDAI","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CETH","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CREP","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CSAI","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CUSDC","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CWBTC","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CZRX","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DYDX","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"IBAT","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"IDAI","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"IETH","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"IKNC","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ILINK","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"IREP","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ISAI","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ISUSD","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"IUSDC","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"IWBTC","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"IZRX","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getABATAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getADAIAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAETHAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAKNCAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getALENDAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getALINKAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAMANAAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAMKRAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAREPAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getASNXAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getASUSDAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getATUSDAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAUSDCAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAUSDTAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAWBTCAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAZRXAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getAaveAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAaveCore","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAllAaveAPR","outputs":[{"internalType":"uint256","name":"aDAI","type":"uint256"},{"internalType":"uint256","name":"aTUSD","type":"uint256"},{"internalType":"uint256","name":"aUSDC","type":"uint256"},{"internalType":"uint256","name":"aUSDT","type":"uint256"},{"internalType":"uint256","name":"aSUSD","type":"uint256"},{"internalType":"uint256","name":"aBAT","type":"uint256"},{"internalType":"uint256","name":"aETH","type":"uint256"},{"internalType":"uint256","name":"aLINK","type":"uint256"},{"internalType":"uint256","name":"aKNC","type":"uint256"},{"internalType":"uint256","name":"aREP","type":"uint256"},{"internalType":"uint256","name":"aZRX","type":"uint256"},{"internalType":"uint256","name":"aSNX","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAllCompoundAPR","outputs":[{"internalType":"uint256","name":"cDAI","type":"uint256"},{"internalType":"uint256","name":"cBAT","type":"uint256"},{"internalType":"uint256","name":"cETH","type":"uint256"},{"internalType":"uint256","name":"cREP","type":"uint256"},{"internalType":"uint256","name":"cSAI","type":"uint256"},{"internalType":"uint256","name":"cUSDC","type":"uint256"},{"internalType":"uint256","name":"cWBTC","type":"uint256"},{"internalType":"uint256","name":"cZRC","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAllDyDxAPR","outputs":[{"internalType":"uint256","name":"dSAI","type":"uint256"},{"internalType":"uint256","name":"dETH","type":"uint256"},{"internalType":"uint256","name":"dUSDC","type":"uint256"},{"internalType":"uint256","name":"dDAI","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAllFulcrumAPR","outputs":[{"internalType":"uint256","name":"iZRX","type":"uint256"},{"internalType":"uint256","name":"iREP","type":"uint256"},{"internalType":"uint256","name":"iKNC","type":"uint256"},{"internalType":"uint256","name":"iWBTC","type":"uint256"},{"internalType":"uint256","name":"iUSDC","type":"uint256"},{"internalType":"uint256","name":"iETH","type":"uint256"},{"internalType":"uint256","name":"iSAI","type":"uint256"},{"internalType":"uint256","name":"iDAI","type":"uint256"},{"internalType":"uint256","name":"iLINK","type":"uint256"},{"internalType":"uint256","name":"iSUSD","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCBATAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCDAIAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCETHAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCREPAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCSAIAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCUSDCAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCWBTCAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCZRCAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getCompoundAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"marketId","type":"uint256"}],"name":"getDyDxAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getDyDxDAIAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getDyDxETHAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getDyDxSAIAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getDyDxUSDCAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getFulcrumAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getIDAIAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getIETHAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getIKNCAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getILINKAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getIREPAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getISAIAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getISUSDAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getIUSDCAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getIWBTCAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getIZRXAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"inCaseETHGetsStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"_TokenAddress","type":"address"}],"name":"inCaseTokenGetsStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"oracle","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"recommendDAI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"recommendETH","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"recommendUSDC","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"setLiquidity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_AAVE","type":"address"}],"name":"set_new_AAVE","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_ABAT","type":"address"}],"name":"set_new_ABAT","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_ADAI","type":"address"}],"name":"set_new_ADAI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_AETH","type":"address"}],"name":"set_new_AETH","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_AKNC","type":"address"}],"name":"set_new_AKNC","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_ALEND","type":"address"}],"name":"set_new_ALEND","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_ALINK","type":"address"}],"name":"set_new_ALINK","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_AMANA","type":"address"}],"name":"set_new_AMANA","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_AMKR","type":"address"}],"name":"set_new_AMKR","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_AREP","type":"address"}],"name":"set_new_AREP","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_ASNX","type":"address"}],"name":"set_new_ASNX","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_ASUSD","type":"address"}],"name":"set_new_ASUSD","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_ATUSD","type":"address"}],"name":"set_new_ATUSD","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_AUSDC","type":"address"}],"name":"set_new_AUSDC","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_AUSDT","type":"address"}],"name":"set_new_AUSDT","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_AWBTC","type":"address"}],"name":"set_new_AWBTC","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_AZRX","type":"address"}],"name":"set_new_AZRX","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_CBAT","type":"address"}],"name":"set_new_CBAT","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_CDAI","type":"address"}],"name":"set_new_CDAI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_CETH","type":"address"}],"name":"set_new_CETH","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_CREP","type":"address"}],"name":"set_new_CREP","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_CSAI","type":"address"}],"name":"set_new_CSAI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_CUSDC","type":"address"}],"name":"set_new_CUSDC","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_CWBTC","type":"address"}],"name":"set_new_CWBTC","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_CZRX","type":"address"}],"name":"set_new_CZRX","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_DYDX","type":"address"}],"name":"set_new_DYDX","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_IDAI","type":"address"}],"name":"set_new_IDAI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_IETH","type":"address"}],"name":"set_new_IETH","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_IKNC","type":"address"}],"name":"set_new_IKNC","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_ILINK","type":"address"}],"name":"set_new_ILINK","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_IREP","type":"address"}],"name":"set_new_IREP","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_ISAI","type":"address"}],"name":"set_new_ISAI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_ISUSD","type":"address"}],"name":"set_new_ISUSD","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_IUSDC","type":"address"}],"name":"set_new_IUSDC","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_IWBTC","type":"address"}],"name":"set_new_IWBTC","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_IZRX","type":"address"}],"name":"set_new_IZRX","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

6080604052670de0b6b3a76400006001553480156200001d57600080fd5b506200002e62000d1f60201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a333600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507324a42fd28c976a61df5d00d0599c34c4f90748c8600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735d3a536e4d6dbd6114cc1ead35777bab948e3643600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734ddc2d193948926d02f9b1fe9e1daa0718270ed5600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073158079ee67fce2f58472a96584a73c7ab9ac95c1600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f5dce57282a584d2746faf1593d3121fcac444dc600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507339aa39c021dfbae8fac545936693ac917d5e7563600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c11b1268c1a384e55c48c2391d8d480264a3a7f4600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b3319f5d18bc0d84dd1b4825dcde5d5f7266d407600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a7eb2bc82df18013ecc2a6c533fc29446442edee600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bd56e9477fc6997609cf45f84795efbdac642ff1601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731cc9567ea2eb740824a45f8026ccf8e46973234d601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ba9262578efef8b3aff7f60cd629d6cc8859c8b5601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f013406a0b1d544238083df0b93ad0d2cbe0f65f601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507377f973fcaf871459aa58cd81881ce453759281bc601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507314094949152eddbfcd073717200da82fed8dc960601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073493c57c4763932315a328269e1adad09653b9081601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731d496da96caf6b518b133736beca85d5c4f9cbc5601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507349f4592e641820e928f9919ef4abd92a719b4b49601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736b175474e89094c44da98b954eedeac495271d0f601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506e085d4780b73119b644ae5ecd22b376601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dac17f958d2ee523a2206206994597c13d831ec7601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507357ab1ec28d129707052df4df418d58a2d46d5f51601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507380fb784b7ed66730e8b1dbd9820afd29931aab03601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730d8775f648430679a709e98d2b0cb6250d2887ef602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073514910771af9ca656af840dff83e8264ecf986ca602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dd974d5c2e2928dea5f71b9825b8b646686bd200602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731985365e9f78359a9b6ad760e32412f4a445e862602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739f8f72aa9304c8b593d555f12ef6589cc3a579a2602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730f5d2fb29fb7d3cfee444a200298f468908cc942602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e41d2489571d322189246dafa5ebde1f4699f498602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732260fac5e5542a773aa44fbcfedf7c193bc2c599602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000d27565b600033905090565b6159388062000d376000396000f3fe608060405234801561001057600080fd5b50600436106107d15760003560e01c806378226b4111610400578063b548780111610220578063d2db39fe11610130578063e9885aeb116100c3578063f53a062811610092578063f53a06281461171c578063f60a15ed14611738578063f82ce27d14611742578063f8b5fff014611760578063ff3c269e1461177e576107d1565b8063e9885aeb146116aa578063eb22a022146116c6578063f2fde38b146116e4578063f4069cba14611700576107d1565b8063dae180b8116100ff578063dae180b814611634578063e1f2aeff14611652578063e49f09e414611670578063e8d791481461168c576107d1565b8063d2db39fe146115c0578063d6a79ada146115dc578063d9c75e37146115f8578063dada70dc14611616576107d1565b8063bfd5b402116101b3578063c6882b7411610182578063c6882b741461152e578063c6b0d25f1461154c578063c9f8217014611568578063ccc4168114611586578063cda08710146115a2576107d1565b8063bfd5b402146114ba578063c043fca2146114d6578063c30c7cae146114f4578063c552934d14611512576107d1565b8063bcbe1b52116101ef578063bcbe1b5214611444578063bdbfcd1c14611462578063be2134eb14611480578063bfaf715b1461149e576107d1565b8063b5487801146113d0578063b72d34c2146113ee578063b74d4f311461140a578063bb540c8214611426576107d1565b80638f32d59b1161031b578063a22db74c116102ae578063ad9a5e2a1161027d578063ad9a5e2a1461133e578063aee7b9f51461135a578063b0ac4a7314611378578063b35946e214611394578063b4650bf7146113b2576107d1565b8063a22db74c146112b4578063a37b9e7f146112d2578063a747b93b146112f0578063aa00070b14611320576107d1565b8063983a97d9116102ea578063983a97d91461123357806398df5ccf1461125c5780639be0587e14611278578063a0bc8d5314611296576107d1565b80638f32d59b146111bb57806390b2ee81146111d957806397c193c5146111f7578063982e2adf14611215576107d1565b8063832b4b0311610393578063878f760311610362578063878f76031461114357806389257a1214611161578063892eac131461117f5780638da5cb5b1461119d576107d1565b8063832b4b03146110bd57806383deca3d146110db578063857c3c9b1461110b57806386bbe19614611127576107d1565b80637f8e4f64116103cf5780637f8e4f641461102c578063812adb061461104a57806381d24d8d146110665780638264d10914611096576107d1565b806378226b4114610fb5578063793957b714610fd15780637cde729f14610fed5780637dc0d1d01461100e576107d1565b80633cf1e7b8116105f65780634e9a10161161050657806361fd719411610499578063693d42e711610468578063693d42e714610f35578063715018a614610f5357806372142a2b14610f5d5780637352023f14610f7b578063750da89914610f99576107d1565b806361fd719414610ebd578063638aa95b14610edb57806363a6894014610ef9578063653d8ad914610f17576107d1565b80635af11ab1116104d55780635af11ab114610e455780635ce7174f14610e635780635d5bd5d314610e815780636109682014610e9f576107d1565b80634e9a101614610dcf5780635309d95214610ded578063536f263214610e095780635ac1baa914610e27576107d1565b806344e258b4116105895780634907c7ae116105585780634907c7ae14610d3d57806349386b5e14610d5b5780634958aa0714610d795780634d2cd8ab14610d955780634e24f77f14610db3576107d1565b806344e258b414610cac578063454ccd7114610cdc578063470bce8014610d0157806348ccda3c14610d1f576107d1565b806341976e09116105c557806341976e0914610c24578063429db17a14610c5457806343d39c8b14610c7057806343e8b0be14610c8e576107d1565b80633cf1e7b814610bae5780633f8ce23f14610bcc5780633f9c862214610be85780633fa6a66b14610c06576107d1565b80631c384781116106f15780632e163c86116106845780633196ebbd116106535780633196ebbd14610b1a578063354c671714610b3857806335b3744214610b5657806338118ab414610b7457806339ec407b14610b90576107d1565b80632e163c8614610aa65780632e8d6e1814610ac25780632ea3546014610ade5780633151a24514610afc576107d1565b806325e079b1116106c057806325e079b114610a345780632735b36314610a5057806328e8452d14610a6c5780632c7a5ae414610a8a576107d1565b80631c384781146109be5780631cc16a6a146109da57806322cc56d9146109f8578063243d665914610a16576107d1565b8063101b56681161076957806318b3b5091161073857806318b3b50914610936578063192a9861146109545780631b1be2bf146109845780631b856311146109a2576107d1565b8063101b5668146108c0578063106f39d1146108dc57806310b4acdc146108fa5780631800298314610918576107d1565b80630b58a7a3116107a55780630b58a7a31461084a5780630dc00a37146108685780630dc0849a146108845780630e1e23e2146108a2576107d1565b8062e4768b146107d657806302c93c70146107f2578063033672b71461081057806304eb246d1461082c575b600080fd5b6107f060048036036107eb91908101906150e7565b61179c565b005b6107fa61183b565b604051610807919061550a565b60405180910390f35b61082a60048036036108259190810190615095565b61186d565b005b610834611908565b6040516108419190615468565b60405180910390f35b610852611ab9565b60405161085f9190615409565b60405180910390f35b610882600480360361087d9190810190615095565b611adf565b005b61088c611b7a565b6040516108999190615409565b60405180910390f35b6108aa611ba0565b6040516108b7919061550a565b60405180910390f35b6108da60048036036108d59190810190615095565b611bd2565b005b6108e4611c6d565b6040516108f1919061550a565b60405180910390f35b610902611c9f565b60405161090f919061550a565b60405180910390f35b610920611cd1565b60405161092d919061550a565b60405180910390f35b61093e611d03565b60405161094b9190615409565b60405180910390f35b61096e60048036036109699190810190615095565b611d29565b60405161097b919061550a565b60405180910390f35b61098c611e75565b6040516109999190615409565b60405180910390f35b6109bc60048036036109b79190810190615095565b611e9b565b005b6109d860048036036109d39190810190615095565b611f36565b005b6109e2611fd1565b6040516109ef9190615409565b60405180910390f35b610a00611ff7565b604051610a0d919061550a565b60405180910390f35b610a1e612029565b604051610a2b919061550a565b60405180910390f35b610a4e6004803603610a499190810190615095565b61205b565b005b610a6a6004803603610a659190810190615095565b6120f6565b005b610a74612191565b604051610a819190615409565b60405180910390f35b610aa46004803603610a9f9190810190615095565b6121b7565b005b610ac06004803603610abb9190810190615095565b612252565b005b610adc6004803603610ad7919081019061514c565b6122ed565b005b610ae6612453565b604051610af3919061550a565b60405180910390f35b610b04612485565b604051610b11919061550a565b60405180910390f35b610b226124b7565b604051610b2f919061550a565b60405180910390f35b610b406124e9565b604051610b4d9190615409565b60405180910390f35b610b5e61250f565b604051610b6b919061550a565b60405180910390f35b610b8e6004803603610b899190810190615095565b612541565b005b610b986125dc565b604051610ba59190615409565b60405180910390f35b610bb6612602565b604051610bc3919061550a565b60405180910390f35b610be66004803603610be19190810190615095565b612634565b005b610bf06126cf565b604051610bfd919061550a565b60405180910390f35b610c0e6126e0565b604051610c1b9190615409565b60405180910390f35b610c3e6004803603610c399190810190615095565b612706565b604051610c4b919061550a565b60405180910390f35b610c6e6004803603610c699190810190615095565b61274f565b005b610c786127ea565b604051610c859190615409565b60405180910390f35b610c96612810565b604051610ca3919061550a565b60405180910390f35b610cc66004803603610cc19190810190615095565b612842565b604051610cd3919061550a565b60405180910390f35b610ce46128de565b604051610cf898979695949392919061556a565b60405180910390f35b610d09612944565b604051610d16919061550a565b60405180910390f35b610d27612955565b604051610d349190615409565b60405180910390f35b610d4561297b565b604051610d52919061550a565b60405180910390f35b610d636129ad565b604051610d709190615409565b60405180910390f35b610d936004803603610d8e9190810190615095565b6129d3565b005b610d9d612a6e565b604051610daa919061550a565b60405180910390f35b610dcd6004803603610dc89190810190615095565b612aa0565b005b610dd7612b3b565b604051610de4919061550a565b60405180910390f35b610e076004803603610e029190810190615095565b612b6d565b005b610e11612c08565b604051610e1e9190615409565b60405180910390f35b610e2f612c2e565b604051610e3c919061550a565b60405180910390f35b610e4d612c60565b604051610e5a919061550a565b60405180910390f35b610e6b612c71565b604051610e78919061550a565b60405180910390f35b610e89612ca3565b604051610e96919061550a565b60405180910390f35b610ea7612cd5565b604051610eb49190615409565b60405180910390f35b610ec5612cfb565b604051610ed29190615409565b60405180910390f35b610ee3612d21565b604051610ef0919061550a565b60405180910390f35b610f01612d53565b604051610f0e9190615409565b60405180910390f35b610f1f612d79565b604051610f2c919061550a565b60405180910390f35b610f3d612d8a565b604051610f4a919061550a565b60405180910390f35b610f5b612dbc565b005b610f65612ec2565b604051610f729190615409565b60405180910390f35b610f83612ee8565b604051610f90919061550a565b60405180910390f35b610fb36004803603610fae9190810190615095565b612f1a565b005b610fcf6004803603610fca9190810190615095565b612fb5565b005b610feb6004803603610fe69190810190615095565b613050565b005b610ff56130eb565b6040516110059493929190615525565b60405180910390f35b61101661311f565b6040516110239190615409565b60405180910390f35b611034613145565b6040516110419190615409565b60405180910390f35b611064600480360361105f9190810190615095565b61316b565b005b611080600480360361107b91908101906151c7565b613206565b60405161108d919061550a565b60405180910390f35b61109e61352f565b6040516110b49a999897969594939291906155e8565b60405180910390f35b6110c56135ae565b6040516110d2919061550a565b60405180910390f35b6110f560048036036110f09190810190615095565b6135e0565b604051611102919061550a565b60405180910390f35b61112560048036036111209190810190615095565b61367a565b005b611141600480360361113c9190810190615095565b613715565b005b61114b6137b0565b6040516111589190615409565b60405180910390f35b6111696137d6565b6040516111769190615409565b60405180910390f35b6111876137fc565b6040516111949190615468565b60405180910390f35b6111a56139ad565b6040516111b29190615409565b60405180910390f35b6111c36139d6565b6040516111d0919061544d565b60405180910390f35b6111e1613a34565b6040516111ee9190615409565b60405180910390f35b6111ff613a5a565b60405161120c9190615409565b60405180910390f35b61121d613a80565b60405161122a9190615409565b60405180910390f35b61123b613aa6565b6040516112539c9b9a99989796959493929190615684565b60405180910390f35b61127660048036036112719190810190615095565b613b3e565b005b611280613bd9565b60405161128d9190615409565b60405180910390f35b61129e613bff565b6040516112ab919061550a565b60405180910390f35b6112bc613c31565b6040516112c99190615409565b60405180910390f35b6112da613c57565b6040516112e79190615409565b60405180910390f35b61130a60048036036113059190810190615095565b613c7d565b604051611317919061550a565b60405180910390f35b611328613cc6565b6040516113359190615409565b60405180910390f35b61135860048036036113539190810190615095565b613cec565b005b611362613d87565b60405161136f919061550a565b60405180910390f35b611392600480360361138d9190810190615095565b613db9565b005b61139c613e54565b6040516113a9919061550a565b60405180910390f35b6113ba613e86565b6040516113c7919061550a565b60405180910390f35b6113d8613eb8565b6040516113e59190615468565b60405180910390f35b61140860048036036114039190810190615095565b614069565b005b611424600480360361141f9190810190615095565b614104565b005b61142e61419f565b60405161143b919061550a565b60405180910390f35b61144c6141d1565b6040516114599190615409565b60405180910390f35b61146a6141f7565b604051611477919061550a565b60405180910390f35b611488614229565b604051611495919061550a565b60405180910390f35b6114b860048036036114b39190810190615095565b61425b565b005b6114d460048036036114cf9190810190615095565b6142f6565b005b6114de614391565b6040516114eb9190615409565b60405180910390f35b6114fc6143b7565b6040516115099190615409565b60405180910390f35b61152c60048036036115279190810190615095565b6143dd565b005b611536614478565b604051611543919061550a565b60405180910390f35b61156660048036036115619190810190615095565b6144aa565b005b611570614545565b60405161157d919061550a565b60405180910390f35b6115a0600480360361159b9190810190615095565b614577565b005b6115aa614612565b6040516115b79190615409565b60405180910390f35b6115da60048036036115d59190810190615095565b614638565b005b6115f660048036036115f19190810190615095565b6146d3565b005b61160061476e565b60405161160d9190615409565b60405180910390f35b61161e614794565b60405161162b9190615409565b60405180910390f35b61163c6147ba565b604051611649919061550a565b60405180910390f35b61165a6147ec565b6040516116679190615409565b60405180910390f35b61168a60048036036116859190810190615095565b614812565b005b6116946148ad565b6040516116a1919061550a565b60405180910390f35b6116c460048036036116bf9190810190615095565b6148df565b005b6116ce61497a565b6040516116db9190615409565b60405180910390f35b6116fe60048036036116f99190810190615095565b6149a0565b005b61171a600480360361171591908101906150e7565b6149f3565b005b61173660048036036117319190810190615095565b614a92565b005b611740614b2d565b005b61174a614c3a565b6040516117579190615409565b60405180910390f35b611768614ce1565b6040516117759190615409565b60405180910390f35b611786614d07565b6040516117939190615409565b60405180910390f35b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156118375780600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b6000611868601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156119055780600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b606060008090506000611919612453565b905081811115611927578091505b6000611931611c6d565b90508281111561193f578092505b60006119496126cf565b905083811115611957578093505b60006119616124b7565b90508481111561196f578094505b60606040518060400160405280600481526020017f6e6f6e65000000000000000000000000000000000000000000000000000000008152509050848614156119ea576040518060400160405280600881526020017f436f6d706f756e6400000000000000000000000000000000000000000000000081525090505b83861415611a2b576040518060400160405280600781526020017f46756c6372756d0000000000000000000000000000000000000000000000000081525090505b82861415611a6c576040518060400160405280600481526020017f645964580000000000000000000000000000000000000000000000000000000081525090505b81861415611aad576040518060400160405280600481526020017f416176650000000000000000000000000000000000000000000000000000000081525090505b80965050505050505090565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611b775780602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611bcd601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611c6a5780601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000611c9a601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b6000611ccc600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612842565b905090565b6000611cfe600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612842565b905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9457600080fd5b505afa158015611da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611dcc91908101906150be565b9050611e6d633b9aca008273ffffffffffffffffffffffffffffffffffffffff1663c540148e866040518263ffffffff1660e01b8152600401611e0f9190615409565b60206040518083038186803b158015611e2757600080fd5b505afa158015611e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e5f91908101906151f0565b614d2d90919063ffffffff16565b915050919050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611f335780601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611fce5780600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612024601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b6000612056601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156120f35780601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561218e5780601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561224f5780600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156122ea5780600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6122f56139d6565b612334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232b906154ea565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161236f9190615409565b60206040518083038186803b15801561238757600080fd5b505afa15801561239b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123bf91908101906151f0565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016123fc929190615424565b602060405180830381600087803b15801561241657600080fd5b505af115801561242a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061244e9190810190615123565b505050565b6000612480600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612842565b905090565b60006124b2602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b60006124e4601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061253c601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156125d95780600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061262f601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156126cc5780602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60006126db6002613206565b905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156127e75780601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061283d601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b60006128d7622014808373ffffffffffffffffffffffffffffffffffffffff1663ae9d70b06040518163ffffffff1660e01b815260040160206040518083038186803b15801561289157600080fd5b505afa1580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128c991908101906151f0565b614d7790919063ffffffff16565b9050919050565b6000806000806000806000806128f2612a6e565b6128fa611c9f565b612902613d87565b61290a611cd1565b612912612d21565b61291a612453565b6129226147ba565b61292a614545565b975097509750975097509750975097509091929394959697565b60006129506003613206565b905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006129a8602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612a6b5780602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000612a9b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612842565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612b385780602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000612b68602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612c055780601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612c5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b6000612c6c6000613206565b905090565b6000612c9e602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b6000612cd0601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612d4e600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612842565b905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612d856001613206565b905090565b6000612db7602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b612dc46139d6565b612e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfa906154ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612f15601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612fb25780601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561304d5780600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156130e85780601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000806000806130f9612d79565b613101612c60565b6131096126cf565b613111612944565b935093509350935090919293565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156132035780600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd47eda6846040518263ffffffff1660e01b8152600401613264919061550a565b60206040518083038186803b15801561327c57600080fd5b505afa158015613290573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132b4919081019061519e565b60000151905060006301e28500820290506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb04a34c866040518263ffffffff1660e01b8152600401613322919061550a565b604080518083038186803b15801561333957600080fd5b505afa15801561334d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133719190810190615175565b600001516fffffffffffffffffffffffffffffffff1690506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb04a34c876040518263ffffffff1660e01b81526004016133e6919061550a565b604080518083038186803b1580156133fd57600080fd5b505afa158015613411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506134359190810190615175565b602001516fffffffffffffffffffffffffffffffff16905060008160015484028161345c57fe5b0490506000600154600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e55202286040518163ffffffff1660e01b815260040160206040518083038186803b1580156134cc57600080fd5b505afa1580156134e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613504919081019061519e565b600001516001548488028161351557fe5b04028161351e57fe5b049050809650505050505050919050565b6000806000806000806000806000806135466141f7565b61354e612ee8565b61355661419f565b61355e613e54565b613566611c6d565b61356e611ff7565b613576612602565b61357e612810565b613586612ca3565b61358e611ba0565b995099509950995099509950995099509950995090919293949596979899565b60006135db601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600061367360648373ffffffffffffffffffffffffffffffffffffffff166309ec6b6b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561362d57600080fd5b505afa158015613641573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061366591908101906151f0565b614d2d90919063ffffffff16565b9050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156137125780601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156137ad5780600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000809050600061380d613d87565b90508181111561381b578091505b6000613825611ff7565b905082811115613833578092505b600061383d612c60565b90508381111561384b578093505b60006138556148ad565b905084811115613863578094505b60606040518060400160405280600481526020017f6e6f6e65000000000000000000000000000000000000000000000000000000008152509050848614156138de576040518060400160405280600881526020017f436f6d706f756e6400000000000000000000000000000000000000000000000081525090505b8386141561391f576040518060400160405280600781526020017f46756c6372756d0000000000000000000000000000000000000000000000000081525090505b82861415613960576040518060400160405280600481526020017f645964580000000000000000000000000000000000000000000000000000000081525090505b818614156139a1576040518060400160405280600481526020017f416176650000000000000000000000000000000000000000000000000000000081525090505b80965050505050505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a18614de7565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600080600080600080613ac0612029565b613ac861250f565b613ad06124b7565b613ad861183b565b613ae0612c2e565b613ae8612c71565b613af06148ad565b613af8612485565b613b0061297b565b613b08612d8a565b613b10613bff565b613b18612b3b565b9b509b509b509b509b509b509b509b509b509b509b509b50909192939495969798999a9b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415613bd65780602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000613c2c602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415613d845780600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000613db4600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612842565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415613e515780601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000613e81601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b6000613eb3602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b606060008090506000613ec9612a6e565b905081811115613ed7578091505b6000613ee1612810565b905082811115613eef578092505b6000613ef9612944565b905083811115613f07578093505b6000613f11612029565b905084811115613f1f578094505b60606040518060400160405280600481526020017f6e6f6e6500000000000000000000000000000000000000000000000000000000815250905084861415613f9a576040518060400160405280600881526020017f436f6d706f756e6400000000000000000000000000000000000000000000000081525090505b83861415613fdb576040518060400160405280600781526020017f46756c6372756d0000000000000000000000000000000000000000000000000081525090505b8286141561401c576040518060400160405280600481526020017f645964580000000000000000000000000000000000000000000000000000000081525090505b8186141561405d576040518060400160405280600481526020017f416176650000000000000000000000000000000000000000000000000000000081525090505b80965050505050505090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156141015780602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561419c5780600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60006141cc601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000614224600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b6000614256602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156142f35780602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561438e5780602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156144755780601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60006144a5602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156145425780600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000614572600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612842565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561460f5780602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156146d05780602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561476b5780601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006147e7600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612842565b905090565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156148aa5780601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60006148da602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156149775780601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6149a86139d6565b6149e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016149de906154ea565b60405180910390fd5b6149f081614def565b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415614a8e5780600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415614b2a5780601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b614b356139d6565b614b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614b6b906154ea565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1631604051614bb1906153f4565b60006040518083038185875af1925050503d8060008114614bee576040519150601f19603f3d011682016040523d82523d6000602084013e614bf3565b606091505b5050905080614c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614c2e906154aa565b60405180910390fd5b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015614ca457600080fd5b505afa158015614cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250614cdc91908101906150be565b905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000614d6f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614f1d565b905092915050565b600080831415614d8a5760009050614de1565b6000828402905082848281614d9b57fe5b0414614ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614dd3906154ca565b60405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614e569061548a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290614f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614f5b9190615468565b60405180910390fd5b506000838581614f7057fe5b049050809150509392505050565b600081359050614f8d81615882565b92915050565b600081519050614fa281615882565b92915050565b600081519050614fb781615899565b92915050565b600081359050614fcc816158b0565b92915050565b600060408284031215614fe457600080fd5b614fee604061573e565b90506000614ffe84828501615056565b600083015250602061501284828501615056565b60208301525092915050565b60006020828403121561503057600080fd5b61503a602061573e565b9050600061504a84828501615080565b60008301525092915050565b600081519050615065816158c7565b92915050565b60008135905061507a816158de565b92915050565b60008151905061508f816158de565b92915050565b6000602082840312156150a757600080fd5b60006150b584828501614f7e565b91505092915050565b6000602082840312156150d057600080fd5b60006150de84828501614f93565b91505092915050565b600080604083850312156150fa57600080fd5b600061510885828601614f7e565b92505060206151198582860161506b565b9150509250929050565b60006020828403121561513557600080fd5b600061514384828501614fa8565b91505092915050565b60006020828403121561515e57600080fd5b600061516c84828501614fbd565b91505092915050565b60006040828403121561518757600080fd5b600061519584828501614fd2565b91505092915050565b6000602082840312156151b057600080fd5b60006151be8482850161501e565b91505092915050565b6000602082840312156151d957600080fd5b60006151e78482850161506b565b91505092915050565b60006020828403121561520257600080fd5b600061521084828501615080565b91505092915050565b61522281615808565b82525050565b61523181615792565b82525050565b615240816157a4565b82525050565b60006152518261576b565b61525b8185615781565b935061526b81856020860161583e565b61527481615871565b840191505092915050565b600061528c602683615781565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006152f2601683615781565b91507f7472616e73666572206f6620455448206661696c6564000000000000000000006000830152602082019050919050565b6000615332602183615781565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615398602083615781565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006153d8600083615776565b9150600082019050919050565b6153ee816157fe565b82525050565b60006153ff826153cb565b9150819050919050565b600060208201905061541e6000830184615228565b92915050565b60006040820190506154396000830185615219565b61544660208301846153e5565b9392505050565b60006020820190506154626000830184615237565b92915050565b600060208201905081810360008301526154828184615246565b905092915050565b600060208201905081810360008301526154a38161527f565b9050919050565b600060208201905081810360008301526154c3816152e5565b9050919050565b600060208201905081810360008301526154e381615325565b9050919050565b600060208201905081810360008301526155038161538b565b9050919050565b600060208201905061551f60008301846153e5565b92915050565b600060808201905061553a60008301876153e5565b61554760208301866153e5565b61555460408301856153e5565b61556160608301846153e5565b95945050505050565b600061010082019050615580600083018b6153e5565b61558d602083018a6153e5565b61559a60408301896153e5565b6155a760608301886153e5565b6155b460808301876153e5565b6155c160a08301866153e5565b6155ce60c08301856153e5565b6155db60e08301846153e5565b9998505050505050505050565b6000610140820190506155fe600083018d6153e5565b61560b602083018c6153e5565b615618604083018b6153e5565b615625606083018a6153e5565b61563260808301896153e5565b61563f60a08301886153e5565b61564c60c08301876153e5565b61565960e08301866153e5565b6156676101008301856153e5565b6156756101208301846153e5565b9b9a5050505050505050505050565b60006101808201905061569a600083018f6153e5565b6156a7602083018e6153e5565b6156b4604083018d6153e5565b6156c1606083018c6153e5565b6156ce608083018b6153e5565b6156db60a083018a6153e5565b6156e860c08301896153e5565b6156f560e08301886153e5565b6157036101008301876153e5565b6157116101208301866153e5565b61571f6101408301856153e5565b61572d6101608301846153e5565b9d9c50505050505050505050505050565b6000604051905081810181811067ffffffffffffffff8211171561576157600080fd5b8060405250919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600061579d826157de565b9050919050565b60008115159050919050565b60006157bb82615792565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006158138261581a565b9050919050565b60006158258261582c565b9050919050565b6000615837826157de565b9050919050565b60005b8381101561585c578082015181840152602081019050615841565b8381111561586b576000848401525b50505050565b6000601f19601f8301169050919050565b61588b81615792565b811461589657600080fd5b50565b6158a2816157a4565b81146158ad57600080fd5b50565b6158b9816157b0565b81146158c457600080fd5b50565b6158d0816157c2565b81146158db57600080fd5b50565b6158e7816157fe565b81146158f257600080fd5b5056fea365627a7a723158205b339a38c76beadfc541fcf06ed73d5cc41204ac5c9f47fe25622b25f17ad7c66c6578706572696d656e74616cf564736f6c634300050c0040

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106107d15760003560e01c806378226b4111610400578063b548780111610220578063d2db39fe11610130578063e9885aeb116100c3578063f53a062811610092578063f53a06281461171c578063f60a15ed14611738578063f82ce27d14611742578063f8b5fff014611760578063ff3c269e1461177e576107d1565b8063e9885aeb146116aa578063eb22a022146116c6578063f2fde38b146116e4578063f4069cba14611700576107d1565b8063dae180b8116100ff578063dae180b814611634578063e1f2aeff14611652578063e49f09e414611670578063e8d791481461168c576107d1565b8063d2db39fe146115c0578063d6a79ada146115dc578063d9c75e37146115f8578063dada70dc14611616576107d1565b8063bfd5b402116101b3578063c6882b7411610182578063c6882b741461152e578063c6b0d25f1461154c578063c9f8217014611568578063ccc4168114611586578063cda08710146115a2576107d1565b8063bfd5b402146114ba578063c043fca2146114d6578063c30c7cae146114f4578063c552934d14611512576107d1565b8063bcbe1b52116101ef578063bcbe1b5214611444578063bdbfcd1c14611462578063be2134eb14611480578063bfaf715b1461149e576107d1565b8063b5487801146113d0578063b72d34c2146113ee578063b74d4f311461140a578063bb540c8214611426576107d1565b80638f32d59b1161031b578063a22db74c116102ae578063ad9a5e2a1161027d578063ad9a5e2a1461133e578063aee7b9f51461135a578063b0ac4a7314611378578063b35946e214611394578063b4650bf7146113b2576107d1565b8063a22db74c146112b4578063a37b9e7f146112d2578063a747b93b146112f0578063aa00070b14611320576107d1565b8063983a97d9116102ea578063983a97d91461123357806398df5ccf1461125c5780639be0587e14611278578063a0bc8d5314611296576107d1565b80638f32d59b146111bb57806390b2ee81146111d957806397c193c5146111f7578063982e2adf14611215576107d1565b8063832b4b0311610393578063878f760311610362578063878f76031461114357806389257a1214611161578063892eac131461117f5780638da5cb5b1461119d576107d1565b8063832b4b03146110bd57806383deca3d146110db578063857c3c9b1461110b57806386bbe19614611127576107d1565b80637f8e4f64116103cf5780637f8e4f641461102c578063812adb061461104a57806381d24d8d146110665780638264d10914611096576107d1565b806378226b4114610fb5578063793957b714610fd15780637cde729f14610fed5780637dc0d1d01461100e576107d1565b80633cf1e7b8116105f65780634e9a10161161050657806361fd719411610499578063693d42e711610468578063693d42e714610f35578063715018a614610f5357806372142a2b14610f5d5780637352023f14610f7b578063750da89914610f99576107d1565b806361fd719414610ebd578063638aa95b14610edb57806363a6894014610ef9578063653d8ad914610f17576107d1565b80635af11ab1116104d55780635af11ab114610e455780635ce7174f14610e635780635d5bd5d314610e815780636109682014610e9f576107d1565b80634e9a101614610dcf5780635309d95214610ded578063536f263214610e095780635ac1baa914610e27576107d1565b806344e258b4116105895780634907c7ae116105585780634907c7ae14610d3d57806349386b5e14610d5b5780634958aa0714610d795780634d2cd8ab14610d955780634e24f77f14610db3576107d1565b806344e258b414610cac578063454ccd7114610cdc578063470bce8014610d0157806348ccda3c14610d1f576107d1565b806341976e09116105c557806341976e0914610c24578063429db17a14610c5457806343d39c8b14610c7057806343e8b0be14610c8e576107d1565b80633cf1e7b814610bae5780633f8ce23f14610bcc5780633f9c862214610be85780633fa6a66b14610c06576107d1565b80631c384781116106f15780632e163c86116106845780633196ebbd116106535780633196ebbd14610b1a578063354c671714610b3857806335b3744214610b5657806338118ab414610b7457806339ec407b14610b90576107d1565b80632e163c8614610aa65780632e8d6e1814610ac25780632ea3546014610ade5780633151a24514610afc576107d1565b806325e079b1116106c057806325e079b114610a345780632735b36314610a5057806328e8452d14610a6c5780632c7a5ae414610a8a576107d1565b80631c384781146109be5780631cc16a6a146109da57806322cc56d9146109f8578063243d665914610a16576107d1565b8063101b56681161076957806318b3b5091161073857806318b3b50914610936578063192a9861146109545780631b1be2bf146109845780631b856311146109a2576107d1565b8063101b5668146108c0578063106f39d1146108dc57806310b4acdc146108fa5780631800298314610918576107d1565b80630b58a7a3116107a55780630b58a7a31461084a5780630dc00a37146108685780630dc0849a146108845780630e1e23e2146108a2576107d1565b8062e4768b146107d657806302c93c70146107f2578063033672b71461081057806304eb246d1461082c575b600080fd5b6107f060048036036107eb91908101906150e7565b61179c565b005b6107fa61183b565b604051610807919061550a565b60405180910390f35b61082a60048036036108259190810190615095565b61186d565b005b610834611908565b6040516108419190615468565b60405180910390f35b610852611ab9565b60405161085f9190615409565b60405180910390f35b610882600480360361087d9190810190615095565b611adf565b005b61088c611b7a565b6040516108999190615409565b60405180910390f35b6108aa611ba0565b6040516108b7919061550a565b60405180910390f35b6108da60048036036108d59190810190615095565b611bd2565b005b6108e4611c6d565b6040516108f1919061550a565b60405180910390f35b610902611c9f565b60405161090f919061550a565b60405180910390f35b610920611cd1565b60405161092d919061550a565b60405180910390f35b61093e611d03565b60405161094b9190615409565b60405180910390f35b61096e60048036036109699190810190615095565b611d29565b60405161097b919061550a565b60405180910390f35b61098c611e75565b6040516109999190615409565b60405180910390f35b6109bc60048036036109b79190810190615095565b611e9b565b005b6109d860048036036109d39190810190615095565b611f36565b005b6109e2611fd1565b6040516109ef9190615409565b60405180910390f35b610a00611ff7565b604051610a0d919061550a565b60405180910390f35b610a1e612029565b604051610a2b919061550a565b60405180910390f35b610a4e6004803603610a499190810190615095565b61205b565b005b610a6a6004803603610a659190810190615095565b6120f6565b005b610a74612191565b604051610a819190615409565b60405180910390f35b610aa46004803603610a9f9190810190615095565b6121b7565b005b610ac06004803603610abb9190810190615095565b612252565b005b610adc6004803603610ad7919081019061514c565b6122ed565b005b610ae6612453565b604051610af3919061550a565b60405180910390f35b610b04612485565b604051610b11919061550a565b60405180910390f35b610b226124b7565b604051610b2f919061550a565b60405180910390f35b610b406124e9565b604051610b4d9190615409565b60405180910390f35b610b5e61250f565b604051610b6b919061550a565b60405180910390f35b610b8e6004803603610b899190810190615095565b612541565b005b610b986125dc565b604051610ba59190615409565b60405180910390f35b610bb6612602565b604051610bc3919061550a565b60405180910390f35b610be66004803603610be19190810190615095565b612634565b005b610bf06126cf565b604051610bfd919061550a565b60405180910390f35b610c0e6126e0565b604051610c1b9190615409565b60405180910390f35b610c3e6004803603610c399190810190615095565b612706565b604051610c4b919061550a565b60405180910390f35b610c6e6004803603610c699190810190615095565b61274f565b005b610c786127ea565b604051610c859190615409565b60405180910390f35b610c96612810565b604051610ca3919061550a565b60405180910390f35b610cc66004803603610cc19190810190615095565b612842565b604051610cd3919061550a565b60405180910390f35b610ce46128de565b604051610cf898979695949392919061556a565b60405180910390f35b610d09612944565b604051610d16919061550a565b60405180910390f35b610d27612955565b604051610d349190615409565b60405180910390f35b610d4561297b565b604051610d52919061550a565b60405180910390f35b610d636129ad565b604051610d709190615409565b60405180910390f35b610d936004803603610d8e9190810190615095565b6129d3565b005b610d9d612a6e565b604051610daa919061550a565b60405180910390f35b610dcd6004803603610dc89190810190615095565b612aa0565b005b610dd7612b3b565b604051610de4919061550a565b60405180910390f35b610e076004803603610e029190810190615095565b612b6d565b005b610e11612c08565b604051610e1e9190615409565b60405180910390f35b610e2f612c2e565b604051610e3c919061550a565b60405180910390f35b610e4d612c60565b604051610e5a919061550a565b60405180910390f35b610e6b612c71565b604051610e78919061550a565b60405180910390f35b610e89612ca3565b604051610e96919061550a565b60405180910390f35b610ea7612cd5565b604051610eb49190615409565b60405180910390f35b610ec5612cfb565b604051610ed29190615409565b60405180910390f35b610ee3612d21565b604051610ef0919061550a565b60405180910390f35b610f01612d53565b604051610f0e9190615409565b60405180910390f35b610f1f612d79565b604051610f2c919061550a565b60405180910390f35b610f3d612d8a565b604051610f4a919061550a565b60405180910390f35b610f5b612dbc565b005b610f65612ec2565b604051610f729190615409565b60405180910390f35b610f83612ee8565b604051610f90919061550a565b60405180910390f35b610fb36004803603610fae9190810190615095565b612f1a565b005b610fcf6004803603610fca9190810190615095565b612fb5565b005b610feb6004803603610fe69190810190615095565b613050565b005b610ff56130eb565b6040516110059493929190615525565b60405180910390f35b61101661311f565b6040516110239190615409565b60405180910390f35b611034613145565b6040516110419190615409565b60405180910390f35b611064600480360361105f9190810190615095565b61316b565b005b611080600480360361107b91908101906151c7565b613206565b60405161108d919061550a565b60405180910390f35b61109e61352f565b6040516110b49a999897969594939291906155e8565b60405180910390f35b6110c56135ae565b6040516110d2919061550a565b60405180910390f35b6110f560048036036110f09190810190615095565b6135e0565b604051611102919061550a565b60405180910390f35b61112560048036036111209190810190615095565b61367a565b005b611141600480360361113c9190810190615095565b613715565b005b61114b6137b0565b6040516111589190615409565b60405180910390f35b6111696137d6565b6040516111769190615409565b60405180910390f35b6111876137fc565b6040516111949190615468565b60405180910390f35b6111a56139ad565b6040516111b29190615409565b60405180910390f35b6111c36139d6565b6040516111d0919061544d565b60405180910390f35b6111e1613a34565b6040516111ee9190615409565b60405180910390f35b6111ff613a5a565b60405161120c9190615409565b60405180910390f35b61121d613a80565b60405161122a9190615409565b60405180910390f35b61123b613aa6565b6040516112539c9b9a99989796959493929190615684565b60405180910390f35b61127660048036036112719190810190615095565b613b3e565b005b611280613bd9565b60405161128d9190615409565b60405180910390f35b61129e613bff565b6040516112ab919061550a565b60405180910390f35b6112bc613c31565b6040516112c99190615409565b60405180910390f35b6112da613c57565b6040516112e79190615409565b60405180910390f35b61130a60048036036113059190810190615095565b613c7d565b604051611317919061550a565b60405180910390f35b611328613cc6565b6040516113359190615409565b60405180910390f35b61135860048036036113539190810190615095565b613cec565b005b611362613d87565b60405161136f919061550a565b60405180910390f35b611392600480360361138d9190810190615095565b613db9565b005b61139c613e54565b6040516113a9919061550a565b60405180910390f35b6113ba613e86565b6040516113c7919061550a565b60405180910390f35b6113d8613eb8565b6040516113e59190615468565b60405180910390f35b61140860048036036114039190810190615095565b614069565b005b611424600480360361141f9190810190615095565b614104565b005b61142e61419f565b60405161143b919061550a565b60405180910390f35b61144c6141d1565b6040516114599190615409565b60405180910390f35b61146a6141f7565b604051611477919061550a565b60405180910390f35b611488614229565b604051611495919061550a565b60405180910390f35b6114b860048036036114b39190810190615095565b61425b565b005b6114d460048036036114cf9190810190615095565b6142f6565b005b6114de614391565b6040516114eb9190615409565b60405180910390f35b6114fc6143b7565b6040516115099190615409565b60405180910390f35b61152c60048036036115279190810190615095565b6143dd565b005b611536614478565b604051611543919061550a565b60405180910390f35b61156660048036036115619190810190615095565b6144aa565b005b611570614545565b60405161157d919061550a565b60405180910390f35b6115a0600480360361159b9190810190615095565b614577565b005b6115aa614612565b6040516115b79190615409565b60405180910390f35b6115da60048036036115d59190810190615095565b614638565b005b6115f660048036036115f19190810190615095565b6146d3565b005b61160061476e565b60405161160d9190615409565b60405180910390f35b61161e614794565b60405161162b9190615409565b60405180910390f35b61163c6147ba565b604051611649919061550a565b60405180910390f35b61165a6147ec565b6040516116679190615409565b60405180910390f35b61168a60048036036116859190810190615095565b614812565b005b6116946148ad565b6040516116a1919061550a565b60405180910390f35b6116c460048036036116bf9190810190615095565b6148df565b005b6116ce61497a565b6040516116db9190615409565b60405180910390f35b6116fe60048036036116f99190810190615095565b6149a0565b005b61171a600480360361171591908101906150e7565b6149f3565b005b61173660048036036117319190810190615095565b614a92565b005b611740614b2d565b005b61174a614c3a565b6040516117579190615409565b60405180910390f35b611768614ce1565b6040516117759190615409565b60405180910390f35b611786614d07565b6040516117939190615409565b60405180910390f35b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156118375780600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b6000611868601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156119055780600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b606060008090506000611919612453565b905081811115611927578091505b6000611931611c6d565b90508281111561193f578092505b60006119496126cf565b905083811115611957578093505b60006119616124b7565b90508481111561196f578094505b60606040518060400160405280600481526020017f6e6f6e65000000000000000000000000000000000000000000000000000000008152509050848614156119ea576040518060400160405280600881526020017f436f6d706f756e6400000000000000000000000000000000000000000000000081525090505b83861415611a2b576040518060400160405280600781526020017f46756c6372756d0000000000000000000000000000000000000000000000000081525090505b82861415611a6c576040518060400160405280600481526020017f645964580000000000000000000000000000000000000000000000000000000081525090505b81861415611aad576040518060400160405280600481526020017f416176650000000000000000000000000000000000000000000000000000000081525090505b80965050505050505090565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611b775780602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611bcd601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611c6a5780601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000611c9a601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b6000611ccc600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612842565b905090565b6000611cfe600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612842565b905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9457600080fd5b505afa158015611da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611dcc91908101906150be565b9050611e6d633b9aca008273ffffffffffffffffffffffffffffffffffffffff1663c540148e866040518263ffffffff1660e01b8152600401611e0f9190615409565b60206040518083038186803b158015611e2757600080fd5b505afa158015611e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e5f91908101906151f0565b614d2d90919063ffffffff16565b915050919050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611f335780601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611fce5780600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612024601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b6000612056601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156120f35780601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561218e5780601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561224f5780600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156122ea5780600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6122f56139d6565b612334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232b906154ea565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161236f9190615409565b60206040518083038186803b15801561238757600080fd5b505afa15801561239b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123bf91908101906151f0565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016123fc929190615424565b602060405180830381600087803b15801561241657600080fd5b505af115801561242a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061244e9190810190615123565b505050565b6000612480600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612842565b905090565b60006124b2602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b60006124e4601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061253c601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156125d95780600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061262f601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156126cc5780602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60006126db6002613206565b905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156127e75780601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061283d601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b60006128d7622014808373ffffffffffffffffffffffffffffffffffffffff1663ae9d70b06040518163ffffffff1660e01b815260040160206040518083038186803b15801561289157600080fd5b505afa1580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128c991908101906151f0565b614d7790919063ffffffff16565b9050919050565b6000806000806000806000806128f2612a6e565b6128fa611c9f565b612902613d87565b61290a611cd1565b612912612d21565b61291a612453565b6129226147ba565b61292a614545565b975097509750975097509750975097509091929394959697565b60006129506003613206565b905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006129a8602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612a6b5780602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000612a9b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612842565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612b385780602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000612b68602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612c055780601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612c5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b6000612c6c6000613206565b905090565b6000612c9e602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b6000612cd0601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612d4e600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612842565b905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612d856001613206565b905090565b6000612db7602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b612dc46139d6565b612e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfa906154ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612f15601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612fb25780601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561304d5780600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156130e85780601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000806000806130f9612d79565b613101612c60565b6131096126cf565b613111612944565b935093509350935090919293565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156132035780600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd47eda6846040518263ffffffff1660e01b8152600401613264919061550a565b60206040518083038186803b15801561327c57600080fd5b505afa158015613290573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132b4919081019061519e565b60000151905060006301e28500820290506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb04a34c866040518263ffffffff1660e01b8152600401613322919061550a565b604080518083038186803b15801561333957600080fd5b505afa15801561334d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133719190810190615175565b600001516fffffffffffffffffffffffffffffffff1690506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb04a34c876040518263ffffffff1660e01b81526004016133e6919061550a565b604080518083038186803b1580156133fd57600080fd5b505afa158015613411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506134359190810190615175565b602001516fffffffffffffffffffffffffffffffff16905060008160015484028161345c57fe5b0490506000600154600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e55202286040518163ffffffff1660e01b815260040160206040518083038186803b1580156134cc57600080fd5b505afa1580156134e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613504919081019061519e565b600001516001548488028161351557fe5b04028161351e57fe5b049050809650505050505050919050565b6000806000806000806000806000806135466141f7565b61354e612ee8565b61355661419f565b61355e613e54565b613566611c6d565b61356e611ff7565b613576612602565b61357e612810565b613586612ca3565b61358e611ba0565b995099509950995099509950995099509950995090919293949596979899565b60006135db601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600061367360648373ffffffffffffffffffffffffffffffffffffffff166309ec6b6b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561362d57600080fd5b505afa158015613641573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061366591908101906151f0565b614d2d90919063ffffffff16565b9050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156137125780601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156137ad5780600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000809050600061380d613d87565b90508181111561381b578091505b6000613825611ff7565b905082811115613833578092505b600061383d612c60565b90508381111561384b578093505b60006138556148ad565b905084811115613863578094505b60606040518060400160405280600481526020017f6e6f6e65000000000000000000000000000000000000000000000000000000008152509050848614156138de576040518060400160405280600881526020017f436f6d706f756e6400000000000000000000000000000000000000000000000081525090505b8386141561391f576040518060400160405280600781526020017f46756c6372756d0000000000000000000000000000000000000000000000000081525090505b82861415613960576040518060400160405280600481526020017f645964580000000000000000000000000000000000000000000000000000000081525090505b818614156139a1576040518060400160405280600481526020017f416176650000000000000000000000000000000000000000000000000000000081525090505b80965050505050505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a18614de7565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600080600080600080613ac0612029565b613ac861250f565b613ad06124b7565b613ad861183b565b613ae0612c2e565b613ae8612c71565b613af06148ad565b613af8612485565b613b0061297b565b613b08612d8a565b613b10613bff565b613b18612b3b565b9b509b509b509b509b509b509b509b509b509b509b509b50909192939495969798999a9b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415613bd65780602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000613c2c602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415613d845780600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000613db4600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612842565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415613e515780601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000613e81601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b6000613eb3602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b606060008090506000613ec9612a6e565b905081811115613ed7578091505b6000613ee1612810565b905082811115613eef578092505b6000613ef9612944565b905083811115613f07578093505b6000613f11612029565b905084811115613f1f578094505b60606040518060400160405280600481526020017f6e6f6e6500000000000000000000000000000000000000000000000000000000815250905084861415613f9a576040518060400160405280600881526020017f436f6d706f756e6400000000000000000000000000000000000000000000000081525090505b83861415613fdb576040518060400160405280600781526020017f46756c6372756d0000000000000000000000000000000000000000000000000081525090505b8286141561401c576040518060400160405280600481526020017f645964580000000000000000000000000000000000000000000000000000000081525090505b8186141561405d576040518060400160405280600481526020017f416176650000000000000000000000000000000000000000000000000000000081525090505b80965050505050505090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156141015780602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561419c5780600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60006141cc601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000614224600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166135e0565b905090565b6000614256602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156142f35780602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561438e5780602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156144755780601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60006144a5602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156145425780600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000614572600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612842565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561460f5780602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156146d05780602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561476b5780601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006147e7600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612842565b905090565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156148aa5780601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60006148da602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d29565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156149775780601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6149a86139d6565b6149e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016149de906154ea565b60405180910390fd5b6149f081614def565b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415614a8e5780600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415614b2a5780601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b614b356139d6565b614b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614b6b906154ea565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1631604051614bb1906153f4565b60006040518083038185875af1925050503d8060008114614bee576040519150601f19603f3d011682016040523d82523d6000602084013e614bf3565b606091505b5050905080614c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614c2e906154aa565b60405180910390fd5b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015614ca457600080fd5b505afa158015614cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250614cdc91908101906150be565b905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000614d6f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614f1d565b905092915050565b600080831415614d8a5760009050614de1565b6000828402905082848281614d9b57fe5b0414614ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614dd3906154ca565b60405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614e569061548a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290614f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614f5b9190615468565b60405180910390fd5b506000838581614f7057fe5b049050809150509392505050565b600081359050614f8d81615882565b92915050565b600081519050614fa281615882565b92915050565b600081519050614fb781615899565b92915050565b600081359050614fcc816158b0565b92915050565b600060408284031215614fe457600080fd5b614fee604061573e565b90506000614ffe84828501615056565b600083015250602061501284828501615056565b60208301525092915050565b60006020828403121561503057600080fd5b61503a602061573e565b9050600061504a84828501615080565b60008301525092915050565b600081519050615065816158c7565b92915050565b60008135905061507a816158de565b92915050565b60008151905061508f816158de565b92915050565b6000602082840312156150a757600080fd5b60006150b584828501614f7e565b91505092915050565b6000602082840312156150d057600080fd5b60006150de84828501614f93565b91505092915050565b600080604083850312156150fa57600080fd5b600061510885828601614f7e565b92505060206151198582860161506b565b9150509250929050565b60006020828403121561513557600080fd5b600061514384828501614fa8565b91505092915050565b60006020828403121561515e57600080fd5b600061516c84828501614fbd565b91505092915050565b60006040828403121561518757600080fd5b600061519584828501614fd2565b91505092915050565b6000602082840312156151b057600080fd5b60006151be8482850161501e565b91505092915050565b6000602082840312156151d957600080fd5b60006151e78482850161506b565b91505092915050565b60006020828403121561520257600080fd5b600061521084828501615080565b91505092915050565b61522281615808565b82525050565b61523181615792565b82525050565b615240816157a4565b82525050565b60006152518261576b565b61525b8185615781565b935061526b81856020860161583e565b61527481615871565b840191505092915050565b600061528c602683615781565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006152f2601683615781565b91507f7472616e73666572206f6620455448206661696c6564000000000000000000006000830152602082019050919050565b6000615332602183615781565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615398602083615781565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006153d8600083615776565b9150600082019050919050565b6153ee816157fe565b82525050565b60006153ff826153cb565b9150819050919050565b600060208201905061541e6000830184615228565b92915050565b60006040820190506154396000830185615219565b61544660208301846153e5565b9392505050565b60006020820190506154626000830184615237565b92915050565b600060208201905081810360008301526154828184615246565b905092915050565b600060208201905081810360008301526154a38161527f565b9050919050565b600060208201905081810360008301526154c3816152e5565b9050919050565b600060208201905081810360008301526154e381615325565b9050919050565b600060208201905081810360008301526155038161538b565b9050919050565b600060208201905061551f60008301846153e5565b92915050565b600060808201905061553a60008301876153e5565b61554760208301866153e5565b61555460408301856153e5565b61556160608301846153e5565b95945050505050565b600061010082019050615580600083018b6153e5565b61558d602083018a6153e5565b61559a60408301896153e5565b6155a760608301886153e5565b6155b460808301876153e5565b6155c160a08301866153e5565b6155ce60c08301856153e5565b6155db60e08301846153e5565b9998505050505050505050565b6000610140820190506155fe600083018d6153e5565b61560b602083018c6153e5565b615618604083018b6153e5565b615625606083018a6153e5565b61563260808301896153e5565b61563f60a08301886153e5565b61564c60c08301876153e5565b61565960e08301866153e5565b6156676101008301856153e5565b6156756101208301846153e5565b9b9a5050505050505050505050565b60006101808201905061569a600083018f6153e5565b6156a7602083018e6153e5565b6156b4604083018d6153e5565b6156c1606083018c6153e5565b6156ce608083018b6153e5565b6156db60a083018a6153e5565b6156e860c08301896153e5565b6156f560e08301886153e5565b6157036101008301876153e5565b6157116101208301866153e5565b61571f6101408301856153e5565b61572d6101608301846153e5565b9d9c50505050505050505050505050565b6000604051905081810181811067ffffffffffffffff8211171561576157600080fd5b8060405250919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600061579d826157de565b9050919050565b60008115159050919050565b60006157bb82615792565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006158138261581a565b9050919050565b60006158258261582c565b9050919050565b6000615837826157de565b9050919050565b60005b8381101561585c578082015181840152602081019050615841565b8381111561586b576000848401525b50505050565b6000601f19601f8301169050919050565b61588b81615792565b811461589657600080fd5b50565b6158a2816157a4565b81146158ad57600080fd5b50565b6158b9816157b0565b81146158c457600080fd5b50565b6158d0816157c2565b81146158db57600080fd5b50565b6158e7816157fe565b81146158f257600080fd5b5056fea365627a7a723158205b339a38c76beadfc541fcf06ed73d5cc41204ac5c9f47fe25622b25f17ad7c66c6578706572696d656e74616cf564736f6c634300050c0040

Deployed Bytecode Sourcemap

16607:17075:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16607:17075:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25821:109;;;;;;;;;;;;;;;;:::i;:::-;;31658:90;;;:::i;:::-;;;;;;;;;;;;;;;;23961:94;;;;;;;;;;;;;;;;:::i;:::-;;21584:651;;;:::i;:::-;;;;;;;;;;;;;;;;17495:20;;;:::i;:::-;;;;;;;;;;;;;;;;25141:90;;;;;;;;;;;;;;;;:::i;:::-;;17545:20;;;:::i;:::-;;;;;;;;;;;;;;;;29920:93;;;:::i;:::-;;;;;;;;;;;;;;;;24649:94;;;;;;;;;;;;;;;;:::i;:::-;;29441:93;;;:::i;:::-;;;;;;;;;;;;;;;;26914:92;;;:::i;:::-;;;;;;;;;;;;;;;;27106;;;:::i;:::-;;;;;;;;;;;;;;;;17419:20;;;:::i;:::-;;;;;;;;;;;;;;;;33011:238;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;17520:20;;;:::i;:::-;;;;;;;;;;;;;;;;23281:94;;;;;;;;;;;;;;;;:::i;:::-;;23765:90;;;;;;;;;;;;;;;;:::i;:::-;;17273:19;;;:::i;:::-;;;;;;;;;;;;;;;;29538:91;;;:::i;:::-;;;;;;;;;;;;;;;;31378:88;;;:::i;:::-;;;;;;;;;;;;;;;;24549:94;;;;;;;;;;;;;;;;:::i;:::-;;23181;;;;;;;;;;;;;;;;:::i;:::-;;17150:20;;;:::i;:::-;;;;;;;;;;;;;;;;24157:90;;;;;;;;;;;;;;;;:::i;:::-;;23573;;;;;;;;;;;;;;;;:::i;:::-;;33286:181;;;;;;;;;;;;;;;;:::i;:::-;;27298:94;;;:::i;:::-;;;;;;;;;;;;;;;;32124:90;;;:::i;:::-;;;;;;;;;;;;;;;;31564;;;:::i;:::-;;;;;;;;;;;;;;;;17693:19;;;:::i;:::-;;;;;;;;;;;;;;;;31470:90;;;:::i;:::-;;;;;;;;;;;;;;;;22405;;;;;;;;;;;;;;;;:::i;:::-;;17471:19;;;:::i;:::-;;;;;;;;;;;;;;;;29633:91;;;:::i;:::-;;;;;;;;;;;;;;;;25237:90;;;;;;;;;;;;;;;;:::i;:::-;;28251:88;;;:::i;:::-;;;;;;;;;;;;;;;;17322:20;;;:::i;:::-;;;;;;;;;;;;;;;;25936:103;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;22893:90;;;;;;;;;;;;;;;;:::i;:::-;;17444:20;;;:::i;:::-;;;;;;;;;;;;;;;;29728:91;;;:::i;:::-;;;;;;;;;;;;;;;;27590:138;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;26293:504;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28343:87;;;:::i;:::-;;;;;;;;;;;;;;;;16906:19;;;:::i;:::-;;;;;;;;;;;;;;;;32218:88;;;:::i;:::-;;;;;;;;;;;;;;;;17790:19;;;:::i;:::-;;;;;;;;;;;;;;;;25625:90;;;;;;;;;;;;;;;;:::i;:::-;;26818:92;;;:::i;:::-;;;;;;;;;;;;;;;;25529:90;;;;;;;;;;;;;;;;:::i;:::-;;32680:88;;;:::i;:::-;;;;;;;;;;;;;;;;24349:94;;;;;;;;;;;;;;;;:::i;:::-;;17570:20;;;:::i;:::-;;;;;;;;;;;;;;;;31752:90;;;:::i;:::-;;;;;;;;;;;;;;;;28160:87;;;:::i;:::-;;;;;;;;;;;;;;;;31940:88;;;:::i;:::-;;;;;;;;;;;;;;;;29823:93;;;:::i;:::-;;;;;;;;;;;;;;;;17053:19;;;:::i;:::-;;;;;;;;;;;;;;;;17814;;;:::i;:::-;;;;;;;;;;;;;;;;27202:92;;;:::i;:::-;;;;;;;;;;;;;;;;17249:19;;;:::i;:::-;;;;;;;;;;;;;;;;28069:87;;;:::i;:::-;;;;;;;;;;;;;;;;32310:88;;;:::i;:::-;;;;;;;;;;;;;;;;5800:140;;;:::i;:::-;;17029:19;;;:::i;:::-;;;;;;;;;;;;;;;;29154:91;;;:::i;:::-;;;;;;;;;;;;;;;;22793:94;;;;;;;;;;;;;;;;:::i;:::-;;24061:90;;;;;;;;;;;;;;;;:::i;:::-;;24749:94;;;;;;;;;;;;;;;;:::i;:::-;;27734:318;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16830:21;;;:::i;:::-;;;;;;;;;;;;;;;;17741:19;;;:::i;:::-;;;;;;;;;;;;;;;;22309:90;;;;;;;;;;;;;;;;:::i;:::-;;30156:512;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28436:603;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;31846:90;;;:::i;:::-;;;;;;;;;;;;;;;;30019:131;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23085:90;;;;;;;;;;;;;;;;:::i;:::-;;23861:94;;;;;;;;;;;;;;;;:::i;:::-;;17005:19;;;:::i;:::-;;;;;;;;;;;;;;;;17644;;;:::i;:::-;;;;;;;;;;;;;;;;20934:646;;;:::i;:::-;;;;;;;;;;;;;;;;4989:79;;;:::i;:::-;;;;;;;;;;;;;;;;5355:94;;;:::i;:::-;;;;;;;;;;;;;;;;17225:19;;;:::i;:::-;;;;;;;;;;;;;;;;17717;;;:::i;:::-;;;;;;;;;;;;;;;;17838:20;;;:::i;:::-;;;;;;;;;;;;;;;;30674:698;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;25721:94;;;;;;;;;;;;;;;;:::i;:::-;;17347:19;;;:::i;:::-;;;;;;;;;;;;;;;;32588:88;;;:::i;:::-;;;;;;;;;;;;;;;;17201:19;;;:::i;:::-;;;;;;;;;;;;;;;;17125:20;;;:::i;:::-;;;;;;;;;;;;;;;;26176:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;17620:19;;;:::i;:::-;;;;;;;;;;;;;;;;23381:90;;;;;;;;;;;;;;;;:::i;:::-;;27010:92;;;:::i;:::-;;;;;;;;;;;;;;;;22501:90;;;;;;;;;;;;;;;;:::i;:::-;;29344:93;;;:::i;:::-;;;;;;;;;;;;;;;;32494:90;;;:::i;:::-;;;;;;;;;;;;;;;;20284:646;;;:::i;:::-;;;;;;;;;;;;;;;;24849:90;;;;;;;;;;;;;;;;:::i;:::-;;23477;;;;;;;;;;;;;;;;:::i;:::-;;29249:91;;;:::i;:::-;;;;;;;;;;;;;;;;17765:20;;;:::i;:::-;;;;;;;;;;;;;;;;29059:91;;;:::i;:::-;;;;;;;;;;;;;;;;32402:88;;;:::i;:::-;;;;;;;;;;;;;;;;25333:90;;;;;;;;;;;;;;;;:::i;:::-;;25429:94;;;;;;;;;;;;;;;;:::i;:::-;;16882:19;;;:::i;:::-;;;;;;;;;;;;;;;;17297:20;;;:::i;:::-;;;;;;;;;;;;;;;;22989:90;;;;;;;;;;;;;;;;:::i;:::-;;32772;;;:::i;:::-;;;;;;;;;;;;;;;;23669;;;;;;;;;;;;;;;;:::i;:::-;;27494:92;;;:::i;:::-;;;;;;;;;;;;;;;;24945:90;;;;;;;;;;;;;;;;:::i;:::-;;17371:19;;;:::i;:::-;;;;;;;;;;;;;;;;25041:94;;;;;;;;;;;;;;;;:::i;:::-;;24253:90;;;;;;;;;;;;;;;;:::i;:::-;;17077:19;;;:::i;:::-;;;;;;;;;;;;;;;;17395;;;:::i;:::-;;;;;;;;;;;;;;;;27396:94;;;:::i;:::-;;;;;;;;;;;;;;;;17595:20;;;:::i;:::-;;;;;;;;;;;;;;;;22693:94;;;;;;;;;;;;;;;;:::i;:::-;;32032:88;;;:::i;:::-;;;;;;;;;;;;;;;;22597:90;;;;;;;;;;;;;;;;:::i;:::-;;17101:19;;;:::i;:::-;;;;;;;;;;;;;;;;6095:109;;;;;;;;;;;;;;;;:::i;:::-;;26045:125;;;;;;;;;;;;;;;;:::i;:::-;;24449:94;;;;;;;;;;;;;;;;:::i;:::-;;33502:177;;;:::i;:::-;;32868:137;;;:::i;:::-;;;;;;;;;;;;;;;;17175:19;;;:::i;:::-;;;;;;;;;;;;;;;;17668:20;;;:::i;:::-;;;;;;;;;;;;;;;;25821:109;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;25918:6;25896:11;:19;25908:6;25896:19;;;;;;;;;;;;;;;:28;;;;22270:27;25821:109;;:::o;31658:90::-;31702:7;31725:17;31736:5;;;;;;;;;;;31725:10;:17::i;:::-;31718:24;;31658:90;:::o;23961:94::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;24039:10;24031:5;;:18;;;;;;;;;;;;;;;;;;22270:27;23961:94;:::o;21584:651::-;21630:13;21652:11;21666:1;21652:15;;21674:9;21686:13;:11;:13::i;:::-;21674:25;;21714:3;21710:1;:7;21706:37;;;21734:1;21728:7;;21706:37;21749:9;21761:13;:11;:13::i;:::-;21749:25;;21789:3;21785:1;:7;21781:37;;;21809:1;21803:7;;21781:37;21824:9;21836:16;:14;:16::i;:::-;21824:28;;21867:3;21863:1;:7;21859:37;;;21887:1;21881:7;;21859:37;21902:9;21914:13;:11;:13::i;:::-;21902:25;;21942:3;21938:1;:7;21934:37;;;21962:1;21956:7;;21934:37;21977:18;:27;;;;;;;;;;;;;;;;;;;22022:1;22015:3;:8;22011:48;;;22034:17;;;;;;;;;;;;;;;;;;;22011:48;22076:1;22069:3;:8;22065:47;;;22088:16;;;;;;;;;;;;;;;;;;;22065:47;22129:1;22122:3;:8;22118:44;;;22141:13;;;;;;;;;;;;;;;;;;;22118:44;22179:1;22172:3;:8;22168:44;;;22191:13;;;;;;;;;;;;;;;;;;;22168:44;22225:4;22218:11;;;;;;;;21584:651;:::o;17495:20::-;;;;;;;;;;;;;:::o;25141:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;25216:9;25209:4;;:16;;;;;;;;;;;;;;;;;;22270:27;25141:90;:::o;17545:20::-;;;;;;;;;;;;;:::o;29920:93::-;29964:7;29987:20;30001:5;;;;;;;;;;;29987:13;:20::i;:::-;29980:27;;29920:93;:::o;24649:94::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;24727:10;24719:5;;:18;;;;;;;;;;;;;;;;;;22270:27;24649:94;:::o;29441:93::-;29485:7;29508:20;29522:5;;;;;;;;;;;29508:13;:20::i;:::-;29501:27;;29441:93;:::o;26914:92::-;26957:7;26980:20;26995:4;;;;;;;;;;;26980:14;:20::i;:::-;26973:27;;26914:92;:::o;27106:::-;27149:7;27172:20;27187:4;;;;;;;;;;;27172:14;:20::i;:::-;27165:27;;27106:92;:::o;17419:20::-;;;;;;;;;;;;;:::o;33011:238::-;33067:7;33083:20;33151:4;;;;;;;;;;;33122:53;;;:55;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33122:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33122:55:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;33122:55:0;;;;;;;;;33083:95;;33192:51;33239:3;33192:4;:35;;;33228:5;33192:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33192:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33192:42:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;33192:42:0;;;;;;;;;:46;;:51;;;;:::i;:::-;33185:58;;;33011:238;;;:::o;17520:20::-;;;;;;;;;;;;;:::o;23281:94::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;23359:10;23351:5;;:18;;;;;;;;;;;;;;;;;;22270:27;23281:94;:::o;23765:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;23840:9;23833:4;;:16;;;;;;;;;;;;;;;;;;22270:27;23765:90;:::o;17273:19::-;;;;;;;;;;;;;:::o;29538:91::-;29581:7;29604:19;29618:4;;;;;;;;;;;29604:13;:19::i;:::-;29597:26;;29538:91;:::o;31378:88::-;31421:7;31444:16;31455:4;;;;;;;;;;;31444:10;:16::i;:::-;31437:23;;31378:88;:::o;24549:94::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;24627:10;24619:5;;:18;;;;;;;;;;;;;;;;;;22270:27;24549:94;:::o;23181:::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;23259:10;23251:5;;:18;;;;;;;;;;;;;;;;;;22270:27;23181:94;:::o;17150:20::-;;;;;;;;;;;;;:::o;24157:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;24232:9;24225:4;;:16;;;;;;;;;;;;;;;;;;22270:27;24157:90;:::o;23573:::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;23648:9;23641:4;;:16;;;;;;;;;;;;;;;;;;22270:27;23573:90;:::o;33286:181::-;5201:9;:7;:9::i;:::-;5193:54;;;;;;;;;;;;;;;;;;;;;;33364:8;33375:13;:23;;;33407:4;33375:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33375:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33375:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;33375:38:0;;;;;;;;;33364:49;;33422:13;:22;;;33445:10;33457:3;33422:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33422:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33422:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;33422:39:0;;;;;;;;;;5258:1;33286:181;:::o;27298:94::-;27342:7;27365:21;27380:5;;;;;;;;;;;27365:14;:21::i;:::-;27358:28;;27298:94;:::o;32124:90::-;32168:7;32191:17;32202:5;;;;;;;;;;;32191:10;:17::i;:::-;32184:24;;32124:90;:::o;31564:::-;31608:7;31631:17;31642:5;;;;;;;;;;;31631:10;:17::i;:::-;31624:24;;31564:90;:::o;17693:19::-;;;;;;;;;;;;;:::o;31470:90::-;31514:7;31537:17;31548:5;;;;;;;;;;;31537:10;:17::i;:::-;31530:24;;31470:90;:::o;22405:::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;22480:9;22473:4;;:16;;;;;;;;;;;;;;;;;;22270:27;22405:90;:::o;17471:19::-;;;;;;;;;;;;;:::o;29633:91::-;29676:7;29699:19;29713:4;;;;;;;;;;;29699:13;:19::i;:::-;29692:26;;29633:91;:::o;25237:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;25312:9;25305:4;;:16;;;;;;;;;;;;;;;;;;22270:27;25237:90;:::o;28251:88::-;28297:7;28320:13;28331:1;28320:10;:13::i;:::-;28313:20;;28251:88;:::o;17322:20::-;;;;;;;;;;;;;:::o;25936:103::-;25991:7;26014:11;:19;26026:6;26014:19;;;;;;;;;;;;;;;;26007:26;;25936:103;;;:::o;22893:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;22968:9;22961:4;;:16;;;;;;;;;;;;;;;;;;22270:27;22893:90;:::o;17444:20::-;;;;;;;;;;;;;:::o;29728:91::-;29771:7;29794:19;29808:4;;;;;;;;;;;29794:13;:19::i;:::-;29787:26;;29728:91;:::o;27590:138::-;27650:7;27673:49;27714:7;27682:5;27673:34;;;:36;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27673:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27673:36:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27673:36:0;;;;;;;;;:40;;:49;;;;:::i;:::-;27666:56;;27590:138;;;:::o;26293:504::-;26378:12;26403;26428;26453;26478;26503:13;26529;26555:12;26607;:10;:12::i;:::-;26630;:10;:12::i;:::-;26653;:10;:12::i;:::-;26676;:10;:12::i;:::-;26699;:10;:12::i;:::-;26722:13;:11;:13::i;:::-;26746;:11;:13::i;:::-;26770:12;:10;:12::i;:::-;26589:202;;;;;;;;;;;;;;;;26293:504;;;;;;;;:::o;28343:87::-;28388:7;28411:13;28422:1;28411:10;:13::i;:::-;28404:20;;28343:87;:::o;16906:19::-;;;;;;;;;;;;;:::o;32218:88::-;32261:7;32284:16;32295:4;;;;;;;;;;;32284:10;:16::i;:::-;32277:23;;32218:88;:::o;17790:19::-;;;;;;;;;;;;;:::o;25625:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;25700:9;25693:4;;:16;;;;;;;;;;;;;;;;;;22270:27;25625:90;:::o;26818:92::-;26861:7;26884:20;26899:4;;;;;;;;;;;26884:14;:20::i;:::-;26877:27;;26818:92;:::o;25529:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;25604:9;25597:4;;:16;;;;;;;;;;;;;;;;;;22270:27;25529:90;:::o;32680:88::-;32723:7;32746:16;32757:4;;;;;;;;;;;32746:10;:16::i;:::-;32739:23;;32680:88;:::o;24349:94::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;24427:10;24419:5;;:18;;;;;;;;;;;;;;;;;;22270:27;24349:94;:::o;17570:20::-;;;;;;;;;;;;;:::o;31752:90::-;31796:7;31819:17;31830:5;;;;;;;;;;;31819:10;:17::i;:::-;31812:24;;31752:90;:::o;28160:87::-;28205:7;28228:13;28239:1;28228:10;:13::i;:::-;28221:20;;28160:87;:::o;31940:88::-;31983:7;32006:16;32017:4;;;;;;;;;;;32006:10;:16::i;:::-;31999:23;;31940:88;:::o;29823:93::-;29867:7;29890:20;29904:5;;;;;;;;;;;29890:13;:20::i;:::-;29883:27;;29823:93;:::o;17053:19::-;;;;;;;;;;;;;:::o;17814:::-;;;;;;;;;;;;;:::o;27202:92::-;27245:7;27268:20;27283:4;;;;;;;;;;;27268:14;:20::i;:::-;27261:27;;27202:92;:::o;17249:19::-;;;;;;;;;;;;;:::o;28069:87::-;28114:7;28137:13;28148:1;28137:10;:13::i;:::-;28130:20;;28069:87;:::o;32310:88::-;32353:7;32376:16;32387:4;;;;;;;;;;;32376:10;:16::i;:::-;32369:23;;32310:88;:::o;5800:140::-;5201:9;:7;:9::i;:::-;5193:54;;;;;;;;;;;;;;;;;;;;;;5899:1;5862:40;;5883:6;;;;;;;;;;;5862:40;;;;;;;;;;;;5930:1;5913:6;;:19;;;;;;;;;;;;;;;;;;5800:140::o;17029:19::-;;;;;;;;;;;;;:::o;29154:91::-;29197:7;29220:19;29234:4;;;;;;;;;;;29220:13;:19::i;:::-;29213:26;;29154:91;:::o;22793:94::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;22871:10;22863:5;;:18;;;;;;;;;;;;;;;;;;22270:27;22793:94;:::o;24061:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;24136:9;24129:4;;:16;;;;;;;;;;;;;;;;;;22270:27;24061:90;:::o;24749:94::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;24827:10;24819:5;;:18;;;;;;;;;;;;;;;;;;22270:27;24749:94;:::o;27734:318::-;27815:12;27840;27865:13;27891:12;27943:15;:13;:15::i;:::-;27969;:13;:15::i;:::-;27995:16;:14;:16::i;:::-;28022:15;:13;:15::i;:::-;27925:121;;;;;;;;27734:318;;;;:::o;16830:21::-;;;;;;;;;;;;;:::o;17741:19::-;;;;;;;;;;;;;:::o;22309:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;22384:9;22377:4;;:16;;;;;;;;;;;;;;;;;;22270:27;22309:90;:::o;30156:512::-;30214:7;30230:12;30255:4;;;;;;;;;;;30250:32;;;30283:8;30250:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30250:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30250:42:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30250:42:0;;;;;;;;;:48;;;30230:68;;30305:17;30332:8;30325:4;:15;30305:35;;30347:14;30372:4;;;;;;;;;;;30367:28;;;30396:8;30367:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30367:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30367:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30367:38:0;;;;;;;;;:45;;;30347:65;;;;30419:14;30444:4;;;;;;;;;;;30439:28;;;30468:8;30439:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30439:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30439:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30439:38:0;;;;;;;;;:45;;;30419:65;;;;30491:13;30532:6;30521:7;;30512:6;:16;30511:27;;;;;;30491:47;;30545:11;30638:7;;30605:4;;;;;;;;;;;30600:26;;;:28;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30600:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30600:28:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30600:28:0;;;;;;;;;:34;;;30589:7;;30580:5;30568:9;:17;30567:29;;;;;;30566:68;30565:80;;;;;;30545:100;;30659:3;30652:10;;;;;;;;30156:512;;;:::o;28436:603::-;28520:12;28545;28570;28595:13;28621;28647:12;28672;28697;28722:13;28748;28801:12;:10;:12::i;:::-;28824;:10;:12::i;:::-;28847;:10;:12::i;:::-;28870:13;:11;:13::i;:::-;28894;:11;:13::i;:::-;28918:12;:10;:12::i;:::-;28941;:10;:12::i;:::-;28964;:10;:12::i;:::-;28987:13;:11;:13::i;:::-;29011;:11;:13::i;:::-;28783:250;;;;;;;;;;;;;;;;;;;;28436:603;;;;;;;;;;:::o;31846:90::-;31890:7;31913:17;31924:5;;;;;;;;;;;31913:10;:17::i;:::-;31906:24;;31846:90;:::o;30019:131::-;30077:7;30100:44;30140:3;30108:5;30100:33;;;:35;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30100:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30100:35:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30100:35:0;;;;;;;;;:39;;:44;;;;:::i;:::-;30093:51;;30019:131;;;:::o;23085:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;23160:9;23153:4;;:16;;;;;;;;;;;;;;;;;;22270:27;23085:90;:::o;23861:94::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;23939:10;23931:5;;:18;;;;;;;;;;;;;;;;;;22270:27;23861:94;:::o;17005:19::-;;;;;;;;;;;;;:::o;17644:::-;;;;;;;;;;;;;:::o;20934:646::-;20979:13;21001:11;21015:1;21001:15;;21023:9;21035:12;:10;:12::i;:::-;21023:24;;21062:3;21058:1;:7;21054:37;;;21082:1;21076:7;;21054:37;21097:9;21109:12;:10;:12::i;:::-;21097:24;;21136:3;21132:1;:7;21128:37;;;21156:1;21150:7;;21128:37;21171:9;21183:15;:13;:15::i;:::-;21171:27;;21213:3;21209:1;:7;21205:37;;;21233:1;21227:7;;21205:37;21248:9;21260:12;:10;:12::i;:::-;21248:24;;21287:3;21283:1;:7;21279:37;;;21307:1;21301:7;;21279:37;21322:18;:27;;;;;;;;;;;;;;;;;;;21367:1;21360:3;:8;21356:48;;;21379:17;;;;;;;;;;;;;;;;;;;21356:48;21421:1;21414:3;:8;21410:47;;;21433:16;;;;;;;;;;;;;;;;;;;21410:47;21474:1;21467:3;:8;21463:44;;;21486:13;;;;;;;;;;;;;;;;;;;21463:44;21524:1;21517:3;:8;21513:44;;;21536:13;;;;;;;;;;;;;;;;;;;21513:44;21570:4;21563:11;;;;;;;;20934:646;:::o;4989:79::-;5027:7;5054:6;;;;;;;;;;;5047:13;;4989:79;:::o;5355:94::-;5395:4;5435:6;;;;;;;;;;;5419:22;;:12;:10;:12::i;:::-;:22;;;5412:29;;5355:94;:::o;17225:19::-;;;;;;;;;;;;;:::o;17717:::-;;;;;;;;;;;;;:::o;17838:20::-;;;;;;;;;;;;;:::o;30674:698::-;30755:12;30780:13;30806;30832;30858;30884:12;30909;30934:13;30960:12;30985;31010;31035;31087;:10;:12::i;:::-;31110:13;:11;:13::i;:::-;31134;:11;:13::i;:::-;31158;:11;:13::i;:::-;31182;:11;:13::i;:::-;31206:12;:10;:12::i;:::-;31229;:10;:12::i;:::-;31252:13;:11;:13::i;:::-;31276:12;:10;:12::i;:::-;31299;:10;:12::i;:::-;31322;:10;:12::i;:::-;31345;:10;:12::i;:::-;31069:297;;;;;;;;;;;;;;;;;;;;;;;;30674:698;;;;;;;;;;;;:::o;25721:94::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;25799:10;25791:5;;:18;;;;;;;;;;;;;;;;;;22270:27;25721:94;:::o;17347:19::-;;;;;;;;;;;;;:::o;32588:88::-;32631:7;32654:16;32665:4;;;;;;;;;;;32654:10;:16::i;:::-;32647:23;;32588:88;:::o;17201:19::-;;;;;;;;;;;;;:::o;17125:20::-;;;;;;;;;;;;;:::o;26176:111::-;26235:7;26258:15;:23;26274:6;26258:23;;;;;;;;;;;;;;;;26251:30;;26176:111;;;:::o;17620:19::-;;;;;;;;;;;;;:::o;23381:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;23456:9;23449:4;;:16;;;;;;;;;;;;;;;;;;22270:27;23381:90;:::o;27010:92::-;27053:7;27076:20;27091:4;;;;;;;;;;;27076:14;:20::i;:::-;27069:27;;27010:92;:::o;22501:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;22576:9;22569:4;;:16;;;;;;;;;;;;;;;;;;22270:27;22501:90;:::o;29344:93::-;29388:7;29411:20;29425:5;;;;;;;;;;;29411:13;:20::i;:::-;29404:27;;29344:93;:::o;32494:90::-;32538:7;32561:17;32572:5;;;;;;;;;;;32561:10;:17::i;:::-;32554:24;;32494:90;:::o;20284:646::-;20329:13;20351:11;20365:1;20351:15;;20373:9;20385:12;:10;:12::i;:::-;20373:24;;20412:3;20408:1;:7;20404:37;;;20432:1;20426:7;;20404:37;20447:9;20459:12;:10;:12::i;:::-;20447:24;;20486:3;20482:1;:7;20478:37;;;20506:1;20500:7;;20478:37;20521:9;20533:15;:13;:15::i;:::-;20521:27;;20563:3;20559:1;:7;20555:37;;;20583:1;20577:7;;20555:37;20598:9;20610:12;:10;:12::i;:::-;20598:24;;20637:3;20633:1;:7;20629:37;;;20657:1;20651:7;;20629:37;20672:18;:27;;;;;;;;;;;;;;;;;;;20717:1;20710:3;:8;20706:48;;;20729:17;;;;;;;;;;;;;;;;;;;20706:48;20771:1;20764:3;:8;20760:47;;;20783:16;;;;;;;;;;;;;;;;;;;20760:47;20824:1;20817:3;:8;20813:44;;;20836:13;;;;;;;;;;;;;;;;;;;20813:44;20874:1;20867:3;:8;20863:44;;;20886:13;;;;;;;;;;;;;;;;;;;20863:44;20920:4;20913:11;;;;;;;;20284:646;:::o;24849:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;24924:9;24917:4;;:16;;;;;;;;;;;;;;;;;;22270:27;24849:90;:::o;23477:::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;23552:9;23545:4;;:16;;;;;;;;;;;;;;;;;;22270:27;23477:90;:::o;29249:91::-;29292:7;29315:19;29329:4;;;;;;;;;;;29315:13;:19::i;:::-;29308:26;;29249:91;:::o;17765:20::-;;;;;;;;;;;;;:::o;29059:91::-;29102:7;29125:19;29139:4;;;;;;;;;;;29125:13;:19::i;:::-;29118:26;;29059:91;:::o;32402:88::-;32445:7;32468:16;32479:4;;;;;;;;;;;32468:10;:16::i;:::-;32461:23;;32402:88;:::o;25333:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;25408:9;25401:4;;:16;;;;;;;;;;;;;;;;;;22270:27;25333:90;:::o;25429:94::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;25507:10;25499:5;;:18;;;;;;;;;;;;;;;;;;22270:27;25429:94;:::o;16882:19::-;;;;;;;;;;;;;:::o;17297:20::-;;;;;;;;;;;;;:::o;22989:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;23064:9;23057:4;;:16;;;;;;;;;;;;;;;;;;22270:27;22989:90;:::o;32772:::-;32816:7;32839:17;32850:5;;;;;;;;;;;32839:10;:17::i;:::-;32832:24;;32772:90;:::o;23669:::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;23744:9;23737:4;;:16;;;;;;;;;;;;;;;;;;22270:27;23669:90;:::o;27494:92::-;27537:7;27560:20;27575:4;;;;;;;;;;;27560:14;:20::i;:::-;27553:27;;27494:92;:::o;24945:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;25020:9;25013:4;;:16;;;;;;;;;;;;;;;;;;22270:27;24945:90;:::o;17371:19::-;;;;;;;;;;;;;:::o;25041:94::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;25119:10;25111:5;;:18;;;;;;;;;;;;;;;;;;22270:27;25041:94;:::o;24253:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;24328:9;24321:4;;:16;;;;;;;;;;;;;;;;;;22270:27;24253:90;:::o;17077:19::-;;;;;;;;;;;;;:::o;17395:::-;;;;;;;;;;;;;:::o;27396:94::-;27440:7;27463:21;27478:5;;;;;;;;;;;27463:14;:21::i;:::-;27456:28;;27396:94;:::o;17595:20::-;;;;;;;;;;;;;:::o;22693:94::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;22771:10;22763:5;;:18;;;;;;;;;;;;;;;;;;22270:27;22693:94;:::o;32032:88::-;32075:7;32098:16;32109:4;;;;;;;;;;;32098:10;:16::i;:::-;32091:23;;32032:88;:::o;22597:90::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;22672:9;22665:4;;:16;;;;;;;;;;;;;;;;;;22270:27;22597:90;:::o;17101:19::-;;;;;;;;;;;;;:::o;6095:109::-;5201:9;:7;:9::i;:::-;5193:54;;;;;;;;;;;;;;;;;;;;;;6168:28;6187:8;6168:18;:28::i;:::-;6095:109;:::o;26045:125::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;26154:10;26128:15;:23;26144:6;26128:23;;;;;;;;;;;;;;;:36;;;;22270:27;26045:125;;:::o;24449:94::-;22288:6;;;;;;;;;;;22274:20;;:10;:20;;;22270:27;;;24527:10;24519:5;;:18;;;;;;;;;;;;;;;;;;22270:27;24449:94;:::o;33502:177::-;5201:9;:7;:9::i;:::-;5193:54;;;;;;;;;;;;;;;;;;;;;;33558:11;33575:10;:15;;33605:4;33597:21;;;33575:48;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;33557:66:0;;;33640:6;33632:41;;;;;;;;;;;;;;;;;;;;;;5258:1;33502:177::o;32868:137::-;32912:7;32972:4;;;;;;;;;;;32943:53;;;:55;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32943:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32943:55:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;32943:55:0;;;;;;;;;32928:71;;32868:137;:::o;17175:19::-;;;;;;;;;;;;;:::o;17668:20::-;;;;;;;;;;;;;:::o;9770:132::-;9828:7;9855:39;9859:1;9862;9855:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9848:46;;9770:132;;;;:::o;8831:471::-;8889:7;9139:1;9134;:6;9130:47;;;9164:1;9157:8;;;;9130:47;9189:9;9205:1;9201;:5;9189:17;;9234:1;9229;9225;:5;;;;;;:10;9217:56;;;;;;;;;;;;;;;;;;;;;;9293:1;9286:8;;;8831:471;;;;;:::o;3738:98::-;3783:15;3818:10;3811:17;;3738:98;:::o;6310:229::-;6404:1;6384:22;;:8;:22;;;;6376:73;;;;;;;;;;;;;;;;;;;;;;6494:8;6465:38;;6486:6;;;;;;;;;;;6465:38;;;;;;;;;;;;6523:8;6514:6;;:17;;;;;;;;;;;;;;;;;;6310:229;:::o;10432:345::-;10518:7;10617:1;10613;:5;10620:12;10605:28;;;;;;;;;;;;;;;;;;;;;;;;;10644:9;10660:1;10656;:5;;;;;;10644:17;;10768:1;10761:8;;;10432:345;;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;283:128;;364:6;358:13;349:22;;376:30;400:5;376:30;;;343:68;;;;;418:156;;511:6;498:20;489:29;;523:46;563:5;523:46;;;483:91;;;;;603:498;;723:4;711:9;706:3;702:19;698:30;695:2;;;741:1;738;731:12;695:2;759:20;774:4;759:20;;;750:29;;831:1;862:60;918:3;909:6;898:9;894:22;862:60;;;856:3;849:5;845:15;838:85;789:145;986:2;1019:60;1075:3;1066:6;1055:9;1051:22;1019:60;;;1012:4;1005:5;1001:16;994:86;944:147;689:412;;;;;1130:340;;1250:4;1238:9;1233:3;1229:19;1225:30;1222:2;;;1268:1;1265;1258:12;1222:2;1286:20;1301:4;1286:20;;;1277:29;;1357:1;1388:60;1444:3;1435:6;1424:9;1420:22;1388:60;;;1382:3;1375:5;1371:15;1364:85;1316:144;1216:254;;;;;1477:134;;1561:6;1555:13;1546:22;;1573:33;1600:5;1573:33;;;1540:71;;;;;1618:130;;1698:6;1685:20;1676:29;;1710:33;1737:5;1710:33;;;1670:78;;;;;1755:134;;1839:6;1833:13;1824:22;;1851:33;1878:5;1851:33;;;1818:71;;;;;1896:241;;2000:2;1988:9;1979:7;1975:23;1971:32;1968:2;;;2016:1;2013;2006:12;1968:2;2051:1;2068:53;2113:7;2104:6;2093:9;2089:22;2068:53;;;2058:63;;2030:97;1962:175;;;;;2144:263;;2259:2;2247:9;2238:7;2234:23;2230:32;2227:2;;;2275:1;2272;2265:12;2227:2;2310:1;2327:64;2383:7;2374:6;2363:9;2359:22;2327:64;;;2317:74;;2289:108;2221:186;;;;;2414:366;;;2535:2;2523:9;2514:7;2510:23;2506:32;2503:2;;;2551:1;2548;2541:12;2503:2;2586:1;2603:53;2648:7;2639:6;2628:9;2624:22;2603:53;;;2593:63;;2565:97;2693:2;2711:53;2756:7;2747:6;2736:9;2732:22;2711:53;;;2701:63;;2672:98;2497:283;;;;;;2787:257;;2899:2;2887:9;2878:7;2874:23;2870:32;2867:2;;;2915:1;2912;2905:12;2867:2;2950:1;2967:61;3020:7;3011:6;3000:9;2996:22;2967:61;;;2957:71;;2929:105;2861:183;;;;;3051:267;;3168:2;3156:9;3147:7;3143:23;3139:32;3136:2;;;3184:1;3181;3174:12;3136:2;3219:1;3236:66;3294:7;3285:6;3274:9;3270:22;3236:66;;;3226:76;;3198:110;3130:188;;;;;3325:303;;3460:2;3448:9;3439:7;3435:23;3431:32;3428:2;;;3476:1;3473;3466:12;3428:2;3511:1;3528:84;3604:7;3595:6;3584:9;3580:22;3528:84;;;3518:94;;3490:128;3422:206;;;;;3635:303;;3770:2;3758:9;3749:7;3745:23;3741:32;3738:2;;;3786:1;3783;3776:12;3738:2;3821:1;3838:84;3914:7;3905:6;3894:9;3890:22;3838:84;;;3828:94;;3800:128;3732:206;;;;;3945:241;;4049:2;4037:9;4028:7;4024:23;4020:32;4017:2;;;4065:1;4062;4055:12;4017:2;4100:1;4117:53;4162:7;4153:6;4142:9;4138:22;4117:53;;;4107:63;;4079:97;4011:175;;;;;4193:263;;4308:2;4296:9;4287:7;4283:23;4279:32;4276:2;;;4324:1;4321;4314:12;4276:2;4359:1;4376:64;4432:7;4423:6;4412:9;4408:22;4376:64;;;4366:74;;4338:108;4270:186;;;;;4463:142;4554:45;4593:5;4554:45;;;4549:3;4542:58;4536:69;;;4612:113;4695:24;4713:5;4695:24;;;4690:3;4683:37;4677:48;;;4732:104;4809:21;4824:5;4809:21;;;4804:3;4797:34;4791:45;;;4843:347;;4955:39;4988:5;4955:39;;;5006:71;5070:6;5065:3;5006:71;;;4999:78;;5082:52;5127:6;5122:3;5115:4;5108:5;5104:16;5082:52;;;5155:29;5177:6;5155:29;;;5150:3;5146:39;5139:46;;4935:255;;;;;;5198:465;;5358:67;5422:2;5417:3;5358:67;;;5351:74;;5458:66;5454:1;5449:3;5445:11;5438:87;5559:66;5554:2;5549:3;5545:12;5538:88;5654:2;5649:3;5645:12;5638:19;;5344:319;;;;5672:364;;5832:67;5896:2;5891:3;5832:67;;;5825:74;;5932:66;5928:1;5923:3;5919:11;5912:87;6027:2;6022:3;6018:12;6011:19;;5818:218;;;;6045:465;;6205:67;6269:2;6264:3;6205:67;;;6198:74;;6305:66;6301:1;6296:3;6292:11;6285:87;6406:66;6401:2;6396:3;6392:12;6385:88;6501:2;6496:3;6492:12;6485:19;;6191:319;;;;6519:364;;6679:67;6743:2;6738:3;6679:67;;;6672:74;;6779:66;6775:1;6770:3;6766:11;6759:87;6874:2;6869:3;6865:12;6858:19;;6665:218;;;;6892:296;;7069:83;7150:1;7145:3;7069:83;;;7062:90;;7180:1;7175:3;7171:11;7164:18;;7055:133;;;;7196:113;7279:24;7297:5;7279:24;;;7274:3;7267:37;7261:48;;;7316:370;;7514:147;7657:3;7514:147;;;7507:154;;7678:3;7671:10;;7495:191;;;;7693:213;;7811:2;7800:9;7796:18;7788:26;;7825:71;7893:1;7882:9;7878:17;7869:6;7825:71;;;7782:124;;;;;7913:340;;8067:2;8056:9;8052:18;8044:26;;8081:79;8157:1;8146:9;8142:17;8133:6;8081:79;;;8171:72;8239:2;8228:9;8224:18;8215:6;8171:72;;;8038:215;;;;;;8260:201;;8372:2;8361:9;8357:18;8349:26;;8386:65;8448:1;8437:9;8433:17;8424:6;8386:65;;;8343:118;;;;;8468:301;;8606:2;8595:9;8591:18;8583:26;;8656:9;8650:4;8646:20;8642:1;8631:9;8627:17;8620:47;8681:78;8754:4;8745:6;8681:78;;;8673:86;;8577:192;;;;;8776:407;;8967:2;8956:9;8952:18;8944:26;;9017:9;9011:4;9007:20;9003:1;8992:9;8988:17;8981:47;9042:131;9168:4;9042:131;;;9034:139;;8938:245;;;;9190:407;;9381:2;9370:9;9366:18;9358:26;;9431:9;9425:4;9421:20;9417:1;9406:9;9402:17;9395:47;9456:131;9582:4;9456:131;;;9448:139;;9352:245;;;;9604:407;;9795:2;9784:9;9780:18;9772:26;;9845:9;9839:4;9835:20;9831:1;9820:9;9816:17;9809:47;9870:131;9996:4;9870:131;;;9862:139;;9766:245;;;;10018:407;;10209:2;10198:9;10194:18;10186:26;;10259:9;10253:4;10249:20;10245:1;10234:9;10230:17;10223:47;10284:131;10410:4;10284:131;;;10276:139;;10180:245;;;;10432:213;;10550:2;10539:9;10535:18;10527:26;;10564:71;10632:1;10621:9;10617:17;10608:6;10564:71;;;10521:124;;;;;10652:547;;10854:3;10843:9;10839:19;10831:27;;10869:71;10937:1;10926:9;10922:17;10913:6;10869:71;;;10951:72;11019:2;11008:9;11004:18;10995:6;10951:72;;;11034;11102:2;11091:9;11087:18;11078:6;11034:72;;;11117;11185:2;11174:9;11170:18;11161:6;11117:72;;;10825:374;;;;;;;;11206:995;;11520:3;11509:9;11505:19;11497:27;;11535:71;11603:1;11592:9;11588:17;11579:6;11535:71;;;11617:72;11685:2;11674:9;11670:18;11661:6;11617:72;;;11700;11768:2;11757:9;11753:18;11744:6;11700:72;;;11783;11851:2;11840:9;11836:18;11827:6;11783:72;;;11866:73;11934:3;11923:9;11919:19;11910:6;11866:73;;;11950;12018:3;12007:9;12003:19;11994:6;11950:73;;;12034;12102:3;12091:9;12087:19;12078:6;12034:73;;;12118;12186:3;12175:9;12171:19;12162:6;12118:73;;;11491:710;;;;;;;;;;;;12208:1219;;12578:3;12567:9;12563:19;12555:27;;12593:71;12661:1;12650:9;12646:17;12637:6;12593:71;;;12675:72;12743:2;12732:9;12728:18;12719:6;12675:72;;;12758;12826:2;12815:9;12811:18;12802:6;12758:72;;;12841;12909:2;12898:9;12894:18;12885:6;12841:72;;;12924:73;12992:3;12981:9;12977:19;12968:6;12924:73;;;13008;13076:3;13065:9;13061:19;13052:6;13008:73;;;13092;13160:3;13149:9;13145:19;13136:6;13092:73;;;13176;13244:3;13233:9;13229:19;13220:6;13176:73;;;13260;13328:3;13317:9;13313:19;13304:6;13260:73;;;13344;13412:3;13401:9;13397:19;13388:6;13344:73;;;12549:878;;;;;;;;;;;;;;13434:1447;;13862:3;13851:9;13847:19;13839:27;;13877:71;13945:1;13934:9;13930:17;13921:6;13877:71;;;13959:72;14027:2;14016:9;14012:18;14003:6;13959:72;;;14042;14110:2;14099:9;14095:18;14086:6;14042:72;;;14125;14193:2;14182:9;14178:18;14169:6;14125:72;;;14208:73;14276:3;14265:9;14261:19;14252:6;14208:73;;;14292;14360:3;14349:9;14345:19;14336:6;14292:73;;;14376;14444:3;14433:9;14429:19;14420:6;14376:73;;;14460;14528:3;14517:9;14513:19;14504:6;14460:73;;;14544;14612:3;14601:9;14597:19;14588:6;14544:73;;;14628;14696:3;14685:9;14681:19;14672:6;14628:73;;;14712:74;14781:3;14770:9;14766:19;14756:7;14712:74;;;14797;14866:3;14855:9;14851:19;14841:7;14797:74;;;13833:1048;;;;;;;;;;;;;;;;14888:256;;14950:2;14944:9;14934:19;;14988:4;14980:6;14976:17;15087:6;15075:10;15072:22;15051:18;15039:10;15036:34;15033:62;15030:2;;;15108:1;15105;15098:12;15030:2;15128:10;15124:2;15117:22;14928:216;;;;;15151:122;;15245:5;15239:12;15229:22;;15210:63;;;;15281:144;;15416:3;15401:18;;15394:31;;;;;15434:163;;15549:6;15544:3;15537:19;15586:4;15581:3;15577:14;15562:29;;15530:67;;;;;15605:91;;15667:24;15685:5;15667:24;;;15656:35;;15650:46;;;;15703:85;;15776:5;15769:13;15762:21;15751:32;;15745:43;;;;15795:104;;15870:24;15888:5;15870:24;;;15859:35;;15853:46;;;;15906:113;;15979:34;15972:5;15968:46;15957:57;;15951:68;;;;16026:121;;16099:42;16092:5;16088:54;16077:65;;16071:76;;;;16154:72;;16216:5;16205:16;;16199:27;;;;16233:129;;16320:37;16351:5;16320:37;;;16307:50;;16301:61;;;;16369:121;;16448:37;16479:5;16448:37;;;16435:50;;16429:61;;;;16497:108;;16576:24;16594:5;16576:24;;;16563:37;;16557:48;;;;16613:268;16678:1;16685:101;16699:6;16696:1;16693:13;16685:101;;;16775:1;16770:3;16766:11;16760:18;16756:1;16751:3;16747:11;16740:39;16721:2;16718:1;16714:10;16709:15;;16685:101;;;16801:6;16798:1;16795:13;16792:2;;;16866:1;16857:6;16852:3;16848:16;16841:27;16792:2;16662:219;;;;;16889:97;;16977:2;16973:7;16968:2;16961:5;16957:14;16953:28;16943:38;;16937:49;;;;16994:117;17063:24;17081:5;17063:24;;;17056:5;17053:35;17043:2;;17102:1;17099;17092:12;17043:2;17037:74;;17118:111;17184:21;17199:5;17184:21;;;17177:5;17174:32;17164:2;;17220:1;17217;17210:12;17164:2;17158:71;;17236:143;17318:37;17349:5;17318:37;;;17311:5;17308:48;17298:2;;17370:1;17367;17360:12;17298:2;17292:87;;17386:117;17455:24;17473:5;17455:24;;;17448:5;17445:35;17435:2;;17494:1;17491;17484:12;17435:2;17429:74;;17510:117;17579:24;17597:5;17579:24;;;17572:5;17569:35;17559:2;;17618:1;17615;17608:12;17559:2;17553:74;

Swarm Source

bzzr://5b339a38c76beadfc541fcf06ed73d5cc41204ac5c9f47fe25622b25f17ad7c6

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

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.