ETH Price: $2,634.02 (-3.83%)

Contract

0xFf40827Ee1c4Eb6052044101E1C6E28DBe1440e3
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Remove Liquidity128762782021-07-22 12:48:341310 days ago1626958114IN
0xFf40827E...DBe1440e3
0 ETH0.0053468969.01
Add Liquidity128762712021-07-22 12:47:141310 days ago1626958034IN
0xFf40827E...DBe1440e3
0 ETH0.0020934727
Set Active128760362021-07-22 11:56:261310 days ago1626954986IN
0xFf40827E...DBe1440e3
0 ETH0.0002956911
Remove Liquidity127763012021-07-06 21:23:011326 days ago1625606581IN
0xFf40827E...DBe1440e3
0 ETH0.0056358946.2
Remove Liquidity122485912021-04-16 2:52:151407 days ago1618541535IN
0xFf40827E...DBe1440e3
0 ETH0.0272182695
Remove Liquidity122220522021-04-12 0:41:041411 days ago1618188064IN
0xFf40827E...DBe1440e3
0 ETH0.0314081183
Remove Liquidity121795162021-04-05 11:54:531418 days ago1617623693IN
0xFf40827E...DBe1440e3
0 ETH0.0389247100
Remove Liquidity121258752021-03-28 5:59:481426 days ago1616911188IN
0xFf40827E...DBe1440e3
0 ETH0.0315350680.0100001
Remove Liquidity120292142021-03-13 8:51:391441 days ago1615625499IN
0xFf40827E...DBe1440e3
0 ETH0.04336398110
Remove Liquidity120283762021-03-13 5:54:561441 days ago1615614896IN
0xFf40827E...DBe1440e3
0 ETH0.04632039119
Remove Liquidity119736712021-03-04 19:28:321450 days ago1614886112IN
0xFf40827E...DBe1440e3
0 ETH0.0354701790
Remove Liquidity119310992021-02-26 6:05:481456 days ago1614319548IN
0xFf40827E...DBe1440e3
0 ETH0.05272765135.5
Remove Liquidity118518012021-02-14 1:29:381468 days ago1613266178IN
0xFf40827E...DBe1440e3
0 ETH0.0358096292
Update Price118152392021-02-08 10:22:261474 days ago1612779746IN
0xFf40827E...DBe1440e3
0 ETH0.02904036114
Remove Liquidity117626442021-01-31 8:18:521482 days ago1612081132IN
0xFf40827E...DBe1440e3
0 ETH0.0296087676
Remove Liquidity117529842021-01-29 20:35:051484 days ago1611952505IN
0xFf40827E...DBe1440e3
0 ETH0.0295992676
Set Sell Fee117374852021-01-27 11:12:131486 days ago1611745933IN
0xFf40827E...DBe1440e3
0 ETH0.0017255763
Set Buy Fee117374642021-01-27 11:06:531486 days ago1611745613IN
0xFf40827E...DBe1440e3
0 ETH0.0014517253.00000156
Remove Liquidity117282202021-01-26 0:53:351487 days ago1611622415IN
0xFf40827E...DBe1440e3
0 ETH0.0222195557.1
Remove Liquidity117202502021-01-24 19:35:491489 days ago1611516949IN
0xFf40827E...DBe1440e3
0 ETH0.01234437126.5
Remove Liquidity117117392021-01-23 12:12:301490 days ago1611403950IN
0xFf40827E...DBe1440e3
0 ETH0.0186948448
Add Liquidity117072952021-01-22 19:53:571491 days ago1611345237IN
0xFf40827E...DBe1440e3
1 ETH0.0264928368.2
Remove Liquidity116956212021-01-21 0:33:321492 days ago1611189212IN
0xFf40827E...DBe1440e3
0 ETH0.0218169856
Remove Liquidity116950062021-01-20 22:07:291493 days ago1611180449IN
0xFf40827E...DBe1440e3
0 ETH0.0159685141
Add Liquidity116906972021-01-20 6:39:011493 days ago1611124741IN
0xFf40827E...DBe1440e3
2 ETH0.0159267741
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
128762782021-07-22 12:48:341310 days ago1626958114
0xFf40827E...DBe1440e3
24.26528956 ETH
127762402021-07-06 21:08:161326 days ago1625605696
0xFf40827E...DBe1440e3
0.00093 ETH
127762402021-07-06 21:08:161326 days ago1625605696
0xFf40827E...DBe1440e3
0.31 ETH
126901432021-06-23 11:35:031339 days ago1624448103
0xFf40827E...DBe1440e3
0.46673256 ETH
126715972021-06-20 13:55:541342 days ago1624197354
0xFf40827E...DBe1440e3
0.28162789 ETH
126715972021-06-20 13:55:541342 days ago1624197354
0xFf40827E...DBe1440e3
0.00084998 ETH
126534012021-06-17 17:54:241345 days ago1623952464
0xFf40827E...DBe1440e3
0.29805378 ETH
126141362021-06-11 15:47:531351 days ago1623426473
0xFf40827E...DBe1440e3
0.00024 ETH
126141362021-06-11 15:47:531351 days ago1623426473
0xFf40827E...DBe1440e3
0.08 ETH
125320502021-05-29 22:47:271364 days ago1622328447
0xFf40827E...DBe1440e3
0.02122689 ETH
125320502021-05-29 22:47:271364 days ago1622328447
0xFf40827E...DBe1440e3
0.00006406 ETH
123396452021-04-30 4:16:411393 days ago1619756201
0xFf40827E...DBe1440e3
0.06490925 ETH
123396452021-04-30 4:16:411393 days ago1619756201
0xFf40827E...DBe1440e3
0.0001959 ETH
122597632021-04-17 20:30:041406 days ago1618691404
0xFf40827E...DBe1440e3
2.25739202 ETH
122597632021-04-17 20:30:041406 days ago1618691404
0xFf40827E...DBe1440e3
0.00681305 ETH
122485912021-04-16 2:52:151407 days ago1618541535
0xFf40827E...DBe1440e3
4.04905359 ETH
122220522021-04-12 0:41:041411 days ago1618188064
0xFf40827E...DBe1440e3
0.03954188 ETH
121795162021-04-05 11:54:531418 days ago1617623693
0xFf40827E...DBe1440e3
0.08412012 ETH
121258752021-03-28 5:59:481426 days ago1616911188
0xFf40827E...DBe1440e3
0.87709633 ETH
120727922021-03-20 1:47:181434 days ago1616204838
0xFf40827E...DBe1440e3
0.31357671 ETH
120727922021-03-20 1:47:181434 days ago1616204838
0xFf40827E...DBe1440e3
0.0009464 ETH
120475982021-03-16 4:46:451438 days ago1615870005
0xFf40827E...DBe1440e3
0.6268517 ETH
120475982021-03-16 4:46:451438 days ago1615870005
0xFf40827E...DBe1440e3
0.0018919 ETH
120311592021-03-13 15:52:591441 days ago1615650779
0xFf40827E...DBe1440e3
0.08731892 ETH
120311592021-03-13 15:52:591441 days ago1615650779
0xFf40827E...DBe1440e3
0.00026353 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
vault

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: vault.sol
//////////////////////////////////////////////////
//SYNLEV VAULT CONTRACT V 1.0.0
//////////////////////////

pragma solidity >= 0.6.6;

import './ownable.sol';
import './SafeMath.sol';
import './IERC20.sol';
import './priceCalculatorInterface.sol';
import './vaultHelperInterface.sol';
import './priceAggregatorInterface.sol';

/*
 * @title SynLev vault contract.
 * @author Icarus
 */
contract vault is Owned {
  using SafeMath for uint256;

  constructor() public {
    priceAggregatorInterface(0x7196545d854D03D9c87B7588F6D9e1e42D876E95).registerVaultAggregator(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419);
    priceAggregator = priceAggregatorInterface(0xb658E8680c1E1f148fb09cDbB3Bd0d58F9c14c00);
    priceCalculator = priceCalculatorInterface(0x80D129A01879422EB102c47Ed32DC6E8B123D05f);
    vaultHelper = vaultHelperInterface(0x70873daAa742bEA6D0EDf03f4f85c615983C01D7);
    synStakingProxy = 0x0070F3e1147c03a1Bb0caF80035B7c362D312119;
    buyFee = 4 * 10**6;
    sellFee = 4 * 10**6;
  }

  /////////////////////
  //EVENTS/////////////
  /////////////////////
  event PriceUpdate(
    uint256 bullPrice,
    uint256 bearPrice,
    uint256 bullLiqEquity,
    uint256 bearLiqEquity,
    uint256 bullEquity,
    uint256 bearEquity,
    uint256 roundId,
    bool updated
  );
  event TokenBuy(
    address account,
    address token,
    uint256 tokensMinted,
    uint256 ethin,
    uint256 fees,
    uint256 bonus
  );
  event TokenSell(
    address account,
    address token,
    uint256 tokensBurned,
    uint256 ethout,
    uint256 fees,
    uint256 penalty
  );
  event LiquidityAdd(
    address account,
    uint256 eth,
    uint256 shares,
    uint256 shareprice
  );
  event LiquidityRemove(
    address account,
    uint256 eth,
    uint256 shares,
    uint256 shareprice
  );

  modifier isActive() {
    require(active == true);
    if(active == true && !priceAggregator.roundIdCheck(address(this))) {
      updatePrice();
    }
    _;
  }

  modifier updateIfActive() {
    if(active == true && !priceAggregator.roundIdCheck(address(this))) {
      updatePrice();
    }
    _;
  }

  /////////////////////
  //GLOBAL VARIBLES
  /////////////////////

  bool private active;
  uint256 constant private multiplier = 3;
  address private bull;
  address private bear;
  uint256 private latestRoundId;
  mapping(address => uint256) private price;
  mapping(address => uint256) private equity;
  uint256 private buyFee;
  uint256 private sellFee;
  uint256 private totalLiqShares;
  uint256 private liqFees;
  uint256 private balanceEquity;
  mapping(address => uint256) private liqTokens;
  mapping(address => uint256) private liqEquity;
  mapping(address => uint256) private userShares;

  priceAggregatorInterface  public priceAggregator;
  priceCalculatorInterface public priceCalculator;
  vaultHelperInterface public vaultHelper;
  address payable public synStakingProxy;

  //Fallback function
  receive() external payable {}

  ////////////////////////////////////
  //LOW LEVEL BUY AND SELL FUNCTIONS//
  //        NO SAFETY CHECK         //
  //SHOULD ONLY BE CALLED BY OTHER  //
  //          CONTRACTS             //
  ////////////////////////////////////

  /*
   * @notice Buys bull or bear token and updates price before token buy.
   * @param token bull or bear token address
   * @param account Recipient of newly minted tokens
   * @dev Should only be called by a router contract. Checks the excess ETH in
   * contract by calling getDepositEquity(). Can't 0 ETH buy. Calculates
   * resulting tokens and fees. Sends fees and mints tokens.
   *
   */
  function tokenBuy(address token, address account)
  public
  virtual
  isActive()
  {
    uint256 ethin = getDepositEquity();
    require(ethin > 0);
    require(token == bull || token == bear);
    IERC20 itkn = IERC20(token);
    uint256 fees = ethin.mul(buyFee).div(10**9);
    uint256 buyeth = ethin.sub(fees);
    uint256 bonus = vaultHelper.getBonus(address(this), token, buyeth);
    uint256 tokensToMint = buyeth.add(bonus).mul(10**18).div(price[token]);
    equity[token] = equity[token].add(buyeth).add(bonus);
    if(bonus != 0) balanceEquity = balanceEquity.sub(bonus);
    payFees(fees);
    itkn.mint(account, tokensToMint);

    emit TokenBuy(account, token, tokensToMint, ethin, fees, bonus);
  }

  /*
   * @notice Sells bull or bear token and updates price before token sell.
   * @param token bull or bear token address
   * @param account Recipient of resulting eth from burned tokens
   * @dev Should only be called by a router contract that simultaneously sends
   * tokens using transferFrom() and calls this function. Looks at the current
   * balance of the contract of the selected token. Can't 0 token sell.
   * Calculates resulting ETH from burned tokens. Pays fees, burns tokens, and
   * sends ETH.
   */
  function tokenSell(address token, address payable account)
  public
  virtual
  isActive()
  {
    IERC20 itkn = IERC20(token);
    uint256 tokensToBurn = itkn.balanceOf(address(this));
    require(tokensToBurn > 0);
    require(token == bull || token == bear);
    uint256 selleth = tokensToBurn.mul(price[token]).div(10**18);
    uint256 penalty = vaultHelper.getPenalty(address(this), token, selleth);
    uint256 fees = sellFee.mul(selleth.sub(penalty)).div(10**9);
    uint256 ethout = selleth.sub(penalty).sub(fees);
    equity[token] = equity[token].sub(selleth);
    if(penalty != 0) balanceEquity = balanceEquity.add(penalty);
    payFees(fees);
    itkn.burn(tokensToBurn);
    account.transfer(ethout);

    emit TokenSell(account, token, tokensToBurn, ethout, fees, penalty);
  }

  /*
   * @notice Adds liquidty to the contract and gives LP shares. Minimum LP add
   * is 1 wei. Virtually mints bear/bull tokens to be held in the vault.
   * @param account Recipient of LP shares
   * @dev Can be called by router but there is benefit to doing so. All
   * calculations are done with respect to equity and supply. Doing by price
   * creates rounding error. Calls updatePrice() then calls getLiqAddTokens()
   * to determine how many bull/bear to create.
   */
  function addLiquidity(address account)
  public
  payable
  virtual
  updateIfActive()
  {
    uint256 ethin = getDepositEquity();
    (
      uint256 bullEquity,
      uint256 bearEquity,
      uint256 bullTokens,
      uint256 bearTokens
    ) = vaultHelper.getLiqAddTokens(address(this), ethin);
    uint256 sharePrice = vaultHelper.getSharePrice(address(this));
    uint256 resultingShares = ethin.mul(10**18).div(sharePrice);
    liqEquity[bull] = liqEquity[bull].add(bullEquity);
    liqEquity[bear] = liqEquity[bear].add(bearEquity);
    liqTokens[bull] = liqTokens[bull].add(bullTokens);
    liqTokens[bear] = liqTokens[bear].add(bearTokens);
    userShares[account] = userShares[account].add(resultingShares);
    totalLiqShares = totalLiqShares.add(resultingShares);

    emit LiquidityAdd(account, ethin, resultingShares, sharePrice);
  }

  /*
   * @notice Removes liquidty to the contract and gives LP shares. Virtually
   * burns bear/bull tokens to be held in the vault. Cannot be called if user
   * has 0 shares
   * @param _shares How many shares to burn
   * @dev Cannot be called by a router as LP shares are not currently tokenized.
   * Calls updatePrice() then calls getLiqRemoveTokens() to determine how many
   * bull/bear tokens to remove.
   */
  function removeLiquidity(uint256 shares)
  public
  virtual
  updateIfActive()
  {
    require(shares <= userShares[msg.sender]);
    (
      uint256 bullEquity,
      uint256 bearEquity,
      uint256 bullTokens,
      uint256 bearTokens,
      uint256 feesPaid
    ) = vaultHelper.getLiqRemoveTokens(address(this), shares);
    uint256 sharePrice = vaultHelper.getSharePrice(address(this));
    uint256 resultingEth = bullEquity.add(bearEquity).add(feesPaid);
    liqEquity[bull] = liqEquity[bull].sub(bullEquity);
    liqEquity[bear] = liqEquity[bear].sub(bearEquity);
    liqTokens[bull] = liqTokens[bull].sub(bullTokens);
    liqTokens[bear] = liqTokens[bear].sub(bearTokens);
    userShares[msg.sender] = userShares[msg.sender].sub(shares);
    totalLiqShares = totalLiqShares.sub(shares);
    liqFees = liqFees.sub(feesPaid);
    msg.sender.transfer(resultingEth);

    emit LiquidityRemove(msg.sender, resultingEth, shares, sharePrice);
  }

  /*
   * @notice Updates price from chainlink oracles.
   * @param _shares How many shares to burn
   * @dev Calls getUpdatedPrice() function and sets new price, equity, liquidity
   * equity, and latestRoundId; only if there is new price data
   * @return bool if price was updated
   */
  function updatePrice()
  public
  {
    require(active == true);
    (
      uint256[6] memory priceArray,
      uint256 roundId,
      bool updated
    ) = priceCalculator.getUpdatedPrice(address(this), latestRoundId);
    if(updated == true) {
      (
        price[bull],
        price[bear],
        liqEquity[bull],
        liqEquity[bear],
        equity[bull],
        equity[bear],
        latestRoundId
      ) =
      (
        priceArray[0],
        priceArray[1],
        priceArray[2],
        priceArray[3],
        priceArray[4],
        priceArray[5],
        roundId
      );
    }
    emit PriceUpdate(
      price[bull],
      price[bear],
      liqEquity[bull],
      liqEquity[bear],
      equity[bull],
      equity[bear],
      latestRoundId,
      updated
    );
  }

  ///////////////////////
  //INTERNAL FUNCTIONS///
  ///////////////////////

  /*
   * @notice Pays half fees to SYN stakers and half to LP
   * @param _amount Fees to be paid in ETH
   * @dev Only called by tokenBuy() and tokenSell()
   */
  function payFees(uint256 amount) internal {
    synStakingProxy.transfer(amount.div(2));
    liqFees += amount.sub(amount.div(2));
  }

  ///////////////////
  ///VIEW FUNCTIONS//
  ///////////////////
  function getActive() public view returns(bool) {return(active);}
  function getMultiplier() public pure returns(uint256) {return(multiplier);}
  function getBullToken() public view returns(address) {return(bull);}
  function getBearToken() public view returns(address) {return(bear);}
  function getLatestRoundId() public view returns(uint256) {return(latestRoundId);}
  function getPrice(address token) public view returns(uint256) {return(price[token]);}
  function getEquity(address token) public view returns(uint256) {return(equity[token]);}
  function getBuyFee() public view returns(uint256) {return(buyFee);}
  function getSellFee() public view returns(uint256) {return(sellFee);}
  function getTotalLiqShares() public view returns(uint256) {return(totalLiqShares);}
  function getLiqFees() public view returns(uint256) {return(liqFees);}
  function getBalanceEquity() public view returns(uint256) {return(balanceEquity);}
  function getLiqTokens(address token) public view returns(uint256) {return(liqTokens[token]);}
  function getLiqEquity(address token) public view returns(uint256) {return(liqEquity[token]);}
  function getUserShares(address account) public view returns(uint256) {return(userShares[account]);}

  function getTotalEquity() public view returns(uint256) {
    return(getTokenEquity(bear).add(getTokenEquity(bull)));
  }

  function getTokenEquity(address token) public view returns(uint256) {
    return(equity[token].add(liqEquity[token]));
  }
  function getTokenLiqEquity(address token) public view returns(uint256) {
    return(liqTokens[token].mul(price[token]).div(10**18));
  }
  function getDepositEquity() public view returns(uint256) {
    return(address(this).balance.sub(liqFees.add(balanceEquity).add(getTotalEquity())));
  }
  ///////////////////
  //ADMIN FUNCTIONS//
  ///////////////////

  //One time use function to set token addresses. this can never be changed once set.
  //Cannot be included in constructor as vault must be deployed before tokens.
  function setTokens(address bearAddress, address bullAddress) public onlyOwner() {
    require(bear == address(0) || bull == address(0));
    (bull, bear) = (bullAddress, bearAddress);
    //Set initial price to .01 eth
    (price[bull], price[bear]) = (10**16, 10**16);
  }
  function setActive(bool state, uint256 roundId) public onlyOwner() {
    if(roundId != 0) {
      advanceRoundId(roundId);
    }
    active = state;
  }
  function advanceRoundId(uint256 roundId) public onlyOwner() {
    require(active == false);
    require(roundId > latestRoundId);
    ( , uint256 lastRoundId) = priceAggregator.priceRequest(address(this), latestRoundId);
    latestRoundId = lastRoundId >= roundId ? roundId : lastRoundId;
  }
  //Fees in the form of 1 / 10^8
  function setBuyFee(uint256 amount) public onlyOwner() {
    require(amount <= 10**9);
    buyFee = amount;
  }
  //Sell fees limited to a maximum of 1%
  function setSellFee(uint256 amount) public onlyOwner() {
    require(amount <= 10**7);
    sellFee = amount;
  }

}

File 2 of 7: IERC20.sol
pragma solidity >= 0.6.4;

interface IERC20 {
  function totalSupply() external view returns (uint256);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function allowance(address owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  function mint(address account, uint256 amount) external;
  function burn(uint256 amount) external;
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 7: ownable.sol
pragma solidity ^0.6.0;

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

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

contract Owned is Context {
    address private _owner;

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

    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 4 of 7: priceAggregatorInterface.sol
pragma solidity >= 0.6.6;

interface priceAggregatorInterface {
  function registerVaultAggregator(address oracle) external;
  function priceRequest(
    address vault,
    uint256 lastUpdated
  )
  external
  view
  returns(int256[] memory, uint256);
  function roundIdCheck(address vault) external view returns(bool);
}

File 5 of 7: priceCalculatorInterface.sol
pragma solidity >= 0.6.6;

interface priceCalculatorInterface {
  function getUpdatedPrice(
    address vault,
    uint256 latestRoundId
  )
    external
    view
    returns(
      uint256[6] memory latestPrice,
      uint256 rRoundId,
      bool updated
  );
  function getKFactor(
    uint256 targetEquity,
    uint256 bullEquity,
    uint256 bearEquity,
    uint256 totalEquity
  )
  external
  view
  returns(uint256 kFactor);
}

File 6 of 7: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

File 7 of 7: vaultHelperInterface.sol
pragma solidity >= 0.6.6;

interface vaultHelperInterface {
  function getBonus(address vault, address token, uint256 eth)
  external
  view
  returns(uint256 bonus);

  function getPenalty(address vault, address token, uint256 eth)
  external
  view
  returns(uint256 penalty);

  function getSharePrice(address vault)
  external
  view
  returns(uint256 sharePrice);

  function getLiqAddTokens(address vault, uint256 eth)
  external
  view
  returns(
    uint256 bullEquity,
    uint256 bearEquity,
    uint256 bullTokens,
    uint256 bearTokens
  );

  function getLiqRemoveTokens(address vault, uint256 eth)
  external
  view
  returns(
    uint256 bullEquity,
    uint256 bearEquity,
    uint256 bullTokens,
    uint256 bearTokens,
    uint256 feesPaid
  );
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"eth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shareprice","type":"uint256"}],"name":"LiquidityAdd","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"eth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shareprice","type":"uint256"}],"name":"LiquidityRemove","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"bullPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bearPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bullLiqEquity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bearLiqEquity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bullEquity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bearEquity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"updated","type":"bool"}],"name":"PriceUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensMinted","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"TokenBuy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensBurned","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethout","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"penalty","type":"uint256"}],"name":"TokenSell","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"advanceRoundId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalanceEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBearToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBullToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDepositEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestRoundId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getLiqEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiqFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getLiqTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getTokenEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getTokenLiqEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalLiqShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceAggregator","outputs":[{"internalType":"contract priceAggregatorInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceCalculator","outputs":[{"internalType":"contract priceCalculatorInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"removeLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"},{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"setActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bearAddress","type":"address"},{"internalType":"address","name":"bullAddress","type":"address"}],"name":"setTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"synStakingProxy","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"tokenBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address payable","name":"account","type":"address"}],"name":"tokenSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultHelper","outputs":[{"internalType":"contract vaultHelperInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b5060006100246001600160e01b0361018016565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506040805163446bc45360e01b8152735f4ec3df9cbd43714fe2740f5e3616155c5b841960048201529051737196545d854d03d9c87b7588f6d9e1e42d876e959163446bc45391602480830192600092919082900301818387803b1580156100d457600080fd5b505af11580156100e8573d6000803e3d6000fd5b5050600e80546001600160a01b031990811673b658e8680c1e1f148fb09cdbb3bd0d58f9c14c0017909155600f805482167380d129a01879422eb102c47ed32dc6e8b123d05f1790556010805482167370873daaa742bea6d0edf03f4f85c615983c01d7179055601180549091167270f3e1147c03a1bb0caf80035b7c362d3121191790555050623d09006006819055600755610184565b3390565b61232880620001946000396000f3fe6080604052600436106102125760003560e01c806382496e6f11610118578063b5a71d14116100a0578063cbc7854e1161006f578063cbc7854e14610641578063d344d4991461067c578063daa22f7a146106af578063e3412e3d146106e1578063f2fde38b1461070757610219565b8063b5a71d1414610593578063ba0cb22b146105c6578063c4056493146105f9578063cad29e9c1461062c57610219565b80638da5cb5b116100e75780638da5cb5b146104f75780638f818b901461050c5780639c8f9f2314610521578063a4d7a6cc1461054b578063ac86ea0c1461056057610219565b806382496e6f146104795780638b4cee08146104a35780638b95e335146104cd5780638c3b990b146104e257610219565b80633ba5d96d1161019b57806356aef98c1161016a57806356aef98c146104105780635db214da14610425578063673a7e281461043a5780636c4ea9291461044f578063715018a61461046457610219565b80633ba5d96d1461037857806340490a901461038d57806341976e09146103a257806347f958a7146103d557610219565b806321172e5d116101e257806321172e5d146102e9578063289af0d8146102fe5780633078fff51461031357806333163773146103285780633b252e151461033d57610219565b80629ebb101461021e5780630cc835a31461024757806316eb3814146102735780631ee60337146102b857610219565b3661021957005b600080fd5b34801561022a57600080fd5b5061023361073a565b604080519115158252519081900360200190f35b34801561025357600080fd5b506102716004803603602081101561026a57600080fd5b503561074a565b005b34801561027f57600080fd5b506102a66004803603602081101561029657600080fd5b50356001600160a01b03166107b8565b60408051918252519081900360200190f35b3480156102c457600080fd5b506102cd6107d3565b604080516001600160a01b039092168252519081900360200190f35b3480156102f557600080fd5b506102cd6107e2565b34801561030a57600080fd5b506102a66107f1565b34801561031f57600080fd5b506102cd6107f7565b34801561033457600080fd5b506102a6610806565b34801561034957600080fd5b506102716004803603604081101561036057600080fd5b506001600160a01b038135811691602001351661080c565b34801561038457600080fd5b506102cd610c06565b34801561039957600080fd5b506102a6610c15565b3480156103ae57600080fd5b506102a6600480360360208110156103c557600080fd5b50356001600160a01b0316610c1a565b3480156103e157600080fd5b50610271600480360360408110156103f857600080fd5b506001600160a01b0381358116916020013516610c35565b34801561041c57600080fd5b506102a6610fa6565b34801561043157600080fd5b506102cd610fdc565b34801561044657600080fd5b50610271610feb565b34801561045b57600080fd5b506102a66111f8565b34801561047057600080fd5b5061027161122a565b34801561048557600080fd5b506102716004803603602081101561049c57600080fd5b50356112cc565b3480156104af57600080fd5b50610271600480360360208110156104c657600080fd5b5035611485565b3480156104d957600080fd5b506102cd6114f2565b3480156104ee57600080fd5b506102a6611501565b34801561050357600080fd5b506102cd611507565b34801561051857600080fd5b506102a6611516565b34801561052d57600080fd5b506102716004803603602081101561054457600080fd5b503561151c565b34801561055757600080fd5b506102a66118ef565b34801561056c57600080fd5b506102a66004803603602081101561058357600080fd5b50356001600160a01b03166118f5565b34801561059f57600080fd5b506102a6600480360360208110156105b657600080fd5b50356001600160a01b031661192e565b3480156105d257600080fd5b506102a6600480360360208110156105e957600080fd5b50356001600160a01b031661196f565b34801561060557600080fd5b506102a66004803603602081101561061c57600080fd5b50356001600160a01b031661198a565b34801561063857600080fd5b506102a66119a5565b34801561064d57600080fd5b506102716004803603604081101561066457600080fd5b506001600160a01b03813581169160200135166119ab565b34801561068857600080fd5b506102a66004803603602081101561069f57600080fd5b50356001600160a01b0316611a8b565b3480156106bb57600080fd5b50610271600480360360408110156106d257600080fd5b50803515159060200135611aa6565b610271600480360360208110156106f757600080fd5b50356001600160a01b0316611b2c565b34801561071357600080fd5b506102716004803603602081101561072a57600080fd5b50356001600160a01b0316611ec1565b600054600160a01b900460ff1690565b610752611fb9565b6000546001600160a01b039081169116146107a2576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b633b9aca008111156107b357600080fd5b600655565b6001600160a01b03166000908152600b602052604090205490565b6010546001600160a01b031681565b6011546001600160a01b031681565b60075490565b600e546001600160a01b031681565b60085490565b600054600160a01b900460ff16151560011461082757600080fd5b600054600160a01b900460ff16151560011480156108b95750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b15801561088b57600080fd5b505afa15801561089f573d6000803e3d6000fd5b505050506040513d60208110156108b557600080fd5b5051155b156108c6576108c6610feb565b604080516370a0823160e01b8152306004820152905183916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561091157600080fd5b505afa158015610925573d6000803e3d6000fd5b505050506040513d602081101561093b57600080fd5b505190508061094957600080fd5b6001546001600160a01b038581169116148061097257506002546001600160a01b038581169116145b61097b57600080fd5b6001600160a01b0384166000908152600460205260408120546109bf90670de0b6b3a7640000906109b390859063ffffffff611fbd16565b9063ffffffff61201d16565b60105460408051637c83ffd160e01b81523060048201526001600160a01b0389811660248301526044820185905291519394506000939190921691637c83ffd1916064808301926020929190829003018186803b158015610a1f57600080fd5b505afa158015610a33573d6000803e3d6000fd5b505050506040513d6020811015610a4957600080fd5b505190506000610a79633b9aca006109b3610a6a868663ffffffff61205f16565b6007549063ffffffff611fbd16565b90506000610a9d82610a91868663ffffffff61205f16565b9063ffffffff61205f16565b6001600160a01b038916600090815260056020526040902054909150610ac9908563ffffffff61205f16565b6001600160a01b0389166000908152600560205260409020558215610aff57600a54610afb908463ffffffff6120a116565b600a555b610b08826120fb565b856001600160a01b03166342966c68866040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610b4e57600080fd5b505af1158015610b62573d6000803e3d6000fd5b50506040516001600160a01b038a16925083156108fc02915083906000818181858888f19350505050158015610b9c573d6000803e3d6000fd5b50604080516001600160a01b03808a1682528a166020820152808201879052606081018390526080810184905260a0810185905290517fe540b6cc73989eeec2f777710efa155b6cc71a931d80862d5bf911c6109972c39181900360c00190a15050505050505050565b6001546001600160a01b031690565b600390565b6001600160a01b031660009081526004602052604090205490565b600054600160a01b900460ff161515600114610c5057600080fd5b600054600160a01b900460ff1615156001148015610ce25750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b158015610cb457600080fd5b505afa158015610cc8573d6000803e3d6000fd5b505050506040513d6020811015610cde57600080fd5b5051155b15610cef57610cef610feb565b6000610cf96111f8565b905060008111610d0857600080fd5b6001546001600160a01b0384811691161480610d3157506002546001600160a01b038481169116145b610d3a57600080fd5b60008390506000610d5e633b9aca006109b360065486611fbd90919063ffffffff16565b90506000610d72848363ffffffff61205f16565b6010546040805163f8956a6760e01b81523060048201526001600160a01b038a81166024830152604482018590529151939450600093919092169163f8956a67916064808301926020929190829003018186803b158015610dd257600080fd5b505afa158015610de6573d6000803e3d6000fd5b505050506040513d6020811015610dfc57600080fd5b50516001600160a01b03881660009081526004602052604081205491925090610e47906109b3670de0b6b3a7640000610e3b878763ffffffff6120a116565b9063ffffffff611fbd16565b6001600160a01b038916600090815260056020526040902054909150610e85908390610e79908663ffffffff6120a116565b9063ffffffff6120a116565b6001600160a01b0389166000908152600560205260409020558115610ebb57600a54610eb7908363ffffffff61205f16565b600a555b610ec4846120fb565b846001600160a01b03166340c10f1988836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610f2457600080fd5b505af1158015610f38573d6000803e3d6000fd5b5050604080516001600160a01b03808c1682528c166020820152808201859052606081018a90526080810188905260a0810186905290517f73cfafc06c41aefbe585fd047208a7776b2334d2329decfb3d1b1f6ec8c3c41693509081900360c0019150a15050505050505050565b600154600090610fd790610fc2906001600160a01b03166118f5565b600254610e79906001600160a01b03166118f5565b905090565b6002546001600160a01b031690565b600054600160a01b900460ff16151560011461100657600080fd5b61100e61226d565b600f546003546040805163416bd10760e11b815230600482015260248101929092525160009283926001600160a01b03909116916382d7a20e9160448082019261010092909190829003018186803b15801561106957600080fd5b505afa15801561107d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101008110156110a357600080fd5b5060c081015160e0820151919450925090506001811515141561113a5782516020808501516040808701516060880151608089015160a08a01516001546001600160a01b03908116600081815260048a52878120600254909316808252888220838352600c8c528983208284528a84209484526005909c528983209183529890912060038e90559390935592909155919055935555555b6001546001600160a01b0390811660008181526004602090815260408083205460025490951680845281842054858552600c8452828520548286528386205496865260058552838620549286529483902054600354845198895294880191909152868301949094526060860194909452608085019390935260a084019190915260c083015282151560e0830152517fe7d4328bcca588827789f132837dde7289420fb8512d5c0a706059194fe1dfd1918190036101000190a1505050565b6000610fd761121d611208610fa6565b600a54600954610e799163ffffffff6120a116565b479063ffffffff61205f16565b611232611fb9565b6000546001600160a01b03908116911614611282576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6112d4611fb9565b6000546001600160a01b03908116911614611324576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b600054600160a01b900460ff161561133b57600080fd5b600354811161134957600080fd5b600e5460035460408051631760164960e31b81523060048201526024810192909252516000926001600160a01b03169163bb00b2489160448083019286929190829003018186803b15801561139d57600080fd5b505afa1580156113b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160409081528110156113da57600080fd5b81019080805160405193929190846401000000008211156113fa57600080fd5b90830190602082018581111561140f57600080fd5b825186602082028301116401000000008211171561142c57600080fd5b82525081516020918201928201910280838360005b83811015611459578181015183820152602001611441565b5050505091909101604052506020015193505050508181101561147c578061147e565b815b6003555050565b61148d611fb9565b6000546001600160a01b039081169116146114dd576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b629896808111156114ed57600080fd5b600755565b600f546001600160a01b031681565b60035490565b6000546001600160a01b031690565b60065490565b600054600160a01b900460ff16151560011480156115ae5750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b15801561158057600080fd5b505afa158015611594573d6000803e3d6000fd5b505050506040513d60208110156115aa57600080fd5b5051155b156115bb576115bb610feb565b336000908152600d60205260409020548111156115d757600080fd5b60105460408051639486909f60e01b815230600482015260248101849052905160009283928392839283926001600160a01b0390911691639486909f9160448082019260a092909190829003018186803b15801561163457600080fd5b505afa158015611648573d6000803e3d6000fd5b505050506040513d60a081101561165e57600080fd5b5080516020808301516040808501516060860151608090960151601054835163b9c7840b60e01b81523060048201529351969c50939a509098509496509394506000936001600160a01b039091169263b9c7840b92602480840193919291829003018186803b1580156116d057600080fd5b505afa1580156116e4573d6000803e3d6000fd5b505050506040513d60208110156116fa57600080fd5b50519050600061171483610e79898963ffffffff6120a116565b6001546001600160a01b03166000908152600c6020526040902054909150611742908863ffffffff61205f16565b6001546001600160a01b039081166000908152600c6020526040808220939093556002549091168152205461177d908763ffffffff61205f16565b6002546001600160a01b039081166000908152600c60209081526040808320949094556001549092168152600b90915220546117bf908663ffffffff61205f16565b6001546001600160a01b039081166000908152600b602052604080822093909355600254909116815220546117fa908563ffffffff61205f16565b6002546001600160a01b03166000908152600b6020908152604080832093909355338252600d90522054611834908963ffffffff61205f16565b336000908152600d6020526040902055600854611857908963ffffffff61205f16565b60085560095461186d908463ffffffff61205f16565b600955604051339082156108fc029083906000818181858888f1935050505015801561189d573d6000803e3d6000fd5b5060408051338152602081018390528082018a90526060810184905290517f11c75623de2058a663854f734fb8083a261970290f564abc9aa2ac01bfcbe81f9181900360800190a15050505050505050565b60095490565b6001600160a01b0381166000908152600c602090815260408083205460059092528220546119289163ffffffff6120a116565b92915050565b6001600160a01b038116600090815260046020908152604080832054600b90925282205461192891670de0b6b3a7640000916109b39163ffffffff611fbd16565b6001600160a01b03166000908152600d602052604090205490565b6001600160a01b03166000908152600c602052604090205490565b600a5490565b6119b3611fb9565b6000546001600160a01b03908116911614611a03576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b6002546001600160a01b03161580611a2457506001546001600160a01b0316155b611a2d57600080fd5b600280546001600160a01b03199081166001600160a01b03948516179182905560018054909116928416929092179182905590821660009081526004602052604080822092909316815291909120662386f26fc10000908190559055565b6001600160a01b031660009081526005602052604090205490565b611aae611fb9565b6000546001600160a01b03908116911614611afe576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b8015611b0d57611b0d816112cc565b5060008054911515600160a01b0260ff60a01b19909216919091179055565b600054600160a01b900460ff1615156001148015611bbe5750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b158015611b9057600080fd5b505afa158015611ba4573d6000803e3d6000fd5b505050506040513d6020811015611bba57600080fd5b5051155b15611bcb57611bcb610feb565b6000611bd56111f8565b60105460408051630bdc478960e01b81523060048201526024810184905290519293506000928392839283926001600160a01b0390921691630bdc478991604480820192608092909190829003018186803b158015611c3357600080fd5b505afa158015611c47573d6000803e3d6000fd5b505050506040513d6080811015611c5d57600080fd5b508051602080830151604080850151606090950151601054825163b9c7840b60e01b81523060048201529251959a509298509496509394506000936001600160a01b039091169263b9c7840b92602480840193919291829003018186803b158015611cc757600080fd5b505afa158015611cdb573d6000803e3d6000fd5b505050506040513d6020811015611cf157600080fd5b505190506000611d13826109b389670de0b6b3a764000063ffffffff611fbd16565b6001546001600160a01b03166000908152600c6020526040902054909150611d41908763ffffffff6120a116565b6001546001600160a01b039081166000908152600c60205260408082209390935560025490911681522054611d7c908663ffffffff6120a116565b6002546001600160a01b039081166000908152600c60209081526040808320949094556001549092168152600b9091522054611dbe908563ffffffff6120a116565b6001546001600160a01b039081166000908152600b60205260408082209390935560025490911681522054611df9908463ffffffff6120a116565b6002546001600160a01b039081166000908152600b6020908152604080832094909455918b168152600d9091522054611e38908263ffffffff6120a116565b6001600160a01b0389166000908152600d6020526040902055600854611e64908263ffffffff6120a116565b600855604080516001600160a01b038a168152602081018990528082018390526060810184905290517fe1d1934c742278e3794231612340f57d39d41877f0106ef92422f2f86ce07bf49181900360800190a15050505050505050565b611ec9611fb9565b6000546001600160a01b03908116911614611f19576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b6001600160a01b038116611f5e5760405162461bcd60e51b815260040180806020018281038252602681526020018061228c6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082611fcc57506000611928565b82820282848281611fd957fe5b04146120165760405162461bcd60e51b81526004018080602001828103825260218152602001806122b26021913960400191505060405180910390fd5b9392505050565b600061201683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612171565b600061201683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612213565b600082820183811015612016576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6011546001600160a01b03166108fc61211b83600263ffffffff61201d16565b6040518115909202916000818181858888f19350505050158015612143573d6000803e3d6000fd5b5061216561215882600263ffffffff61201d16565b829063ffffffff61205f16565b60098054909101905550565b600081836121fd5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156121c25781810151838201526020016121aa565b50505050905090810190601f1680156121ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161220957fe5b0495945050505050565b600081848411156122655760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156121c25781810151838201526020016121aa565b505050900390565b6040518060c00160405280600690602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122010dd92a068998e4436d525a0067a19469ea659347f3cbebe836dcbeebadc835864736f6c63430006060033

Deployed Bytecode

0x6080604052600436106102125760003560e01c806382496e6f11610118578063b5a71d14116100a0578063cbc7854e1161006f578063cbc7854e14610641578063d344d4991461067c578063daa22f7a146106af578063e3412e3d146106e1578063f2fde38b1461070757610219565b8063b5a71d1414610593578063ba0cb22b146105c6578063c4056493146105f9578063cad29e9c1461062c57610219565b80638da5cb5b116100e75780638da5cb5b146104f75780638f818b901461050c5780639c8f9f2314610521578063a4d7a6cc1461054b578063ac86ea0c1461056057610219565b806382496e6f146104795780638b4cee08146104a35780638b95e335146104cd5780638c3b990b146104e257610219565b80633ba5d96d1161019b57806356aef98c1161016a57806356aef98c146104105780635db214da14610425578063673a7e281461043a5780636c4ea9291461044f578063715018a61461046457610219565b80633ba5d96d1461037857806340490a901461038d57806341976e09146103a257806347f958a7146103d557610219565b806321172e5d116101e257806321172e5d146102e9578063289af0d8146102fe5780633078fff51461031357806333163773146103285780633b252e151461033d57610219565b80629ebb101461021e5780630cc835a31461024757806316eb3814146102735780631ee60337146102b857610219565b3661021957005b600080fd5b34801561022a57600080fd5b5061023361073a565b604080519115158252519081900360200190f35b34801561025357600080fd5b506102716004803603602081101561026a57600080fd5b503561074a565b005b34801561027f57600080fd5b506102a66004803603602081101561029657600080fd5b50356001600160a01b03166107b8565b60408051918252519081900360200190f35b3480156102c457600080fd5b506102cd6107d3565b604080516001600160a01b039092168252519081900360200190f35b3480156102f557600080fd5b506102cd6107e2565b34801561030a57600080fd5b506102a66107f1565b34801561031f57600080fd5b506102cd6107f7565b34801561033457600080fd5b506102a6610806565b34801561034957600080fd5b506102716004803603604081101561036057600080fd5b506001600160a01b038135811691602001351661080c565b34801561038457600080fd5b506102cd610c06565b34801561039957600080fd5b506102a6610c15565b3480156103ae57600080fd5b506102a6600480360360208110156103c557600080fd5b50356001600160a01b0316610c1a565b3480156103e157600080fd5b50610271600480360360408110156103f857600080fd5b506001600160a01b0381358116916020013516610c35565b34801561041c57600080fd5b506102a6610fa6565b34801561043157600080fd5b506102cd610fdc565b34801561044657600080fd5b50610271610feb565b34801561045b57600080fd5b506102a66111f8565b34801561047057600080fd5b5061027161122a565b34801561048557600080fd5b506102716004803603602081101561049c57600080fd5b50356112cc565b3480156104af57600080fd5b50610271600480360360208110156104c657600080fd5b5035611485565b3480156104d957600080fd5b506102cd6114f2565b3480156104ee57600080fd5b506102a6611501565b34801561050357600080fd5b506102cd611507565b34801561051857600080fd5b506102a6611516565b34801561052d57600080fd5b506102716004803603602081101561054457600080fd5b503561151c565b34801561055757600080fd5b506102a66118ef565b34801561056c57600080fd5b506102a66004803603602081101561058357600080fd5b50356001600160a01b03166118f5565b34801561059f57600080fd5b506102a6600480360360208110156105b657600080fd5b50356001600160a01b031661192e565b3480156105d257600080fd5b506102a6600480360360208110156105e957600080fd5b50356001600160a01b031661196f565b34801561060557600080fd5b506102a66004803603602081101561061c57600080fd5b50356001600160a01b031661198a565b34801561063857600080fd5b506102a66119a5565b34801561064d57600080fd5b506102716004803603604081101561066457600080fd5b506001600160a01b03813581169160200135166119ab565b34801561068857600080fd5b506102a66004803603602081101561069f57600080fd5b50356001600160a01b0316611a8b565b3480156106bb57600080fd5b50610271600480360360408110156106d257600080fd5b50803515159060200135611aa6565b610271600480360360208110156106f757600080fd5b50356001600160a01b0316611b2c565b34801561071357600080fd5b506102716004803603602081101561072a57600080fd5b50356001600160a01b0316611ec1565b600054600160a01b900460ff1690565b610752611fb9565b6000546001600160a01b039081169116146107a2576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b633b9aca008111156107b357600080fd5b600655565b6001600160a01b03166000908152600b602052604090205490565b6010546001600160a01b031681565b6011546001600160a01b031681565b60075490565b600e546001600160a01b031681565b60085490565b600054600160a01b900460ff16151560011461082757600080fd5b600054600160a01b900460ff16151560011480156108b95750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b15801561088b57600080fd5b505afa15801561089f573d6000803e3d6000fd5b505050506040513d60208110156108b557600080fd5b5051155b156108c6576108c6610feb565b604080516370a0823160e01b8152306004820152905183916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561091157600080fd5b505afa158015610925573d6000803e3d6000fd5b505050506040513d602081101561093b57600080fd5b505190508061094957600080fd5b6001546001600160a01b038581169116148061097257506002546001600160a01b038581169116145b61097b57600080fd5b6001600160a01b0384166000908152600460205260408120546109bf90670de0b6b3a7640000906109b390859063ffffffff611fbd16565b9063ffffffff61201d16565b60105460408051637c83ffd160e01b81523060048201526001600160a01b0389811660248301526044820185905291519394506000939190921691637c83ffd1916064808301926020929190829003018186803b158015610a1f57600080fd5b505afa158015610a33573d6000803e3d6000fd5b505050506040513d6020811015610a4957600080fd5b505190506000610a79633b9aca006109b3610a6a868663ffffffff61205f16565b6007549063ffffffff611fbd16565b90506000610a9d82610a91868663ffffffff61205f16565b9063ffffffff61205f16565b6001600160a01b038916600090815260056020526040902054909150610ac9908563ffffffff61205f16565b6001600160a01b0389166000908152600560205260409020558215610aff57600a54610afb908463ffffffff6120a116565b600a555b610b08826120fb565b856001600160a01b03166342966c68866040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610b4e57600080fd5b505af1158015610b62573d6000803e3d6000fd5b50506040516001600160a01b038a16925083156108fc02915083906000818181858888f19350505050158015610b9c573d6000803e3d6000fd5b50604080516001600160a01b03808a1682528a166020820152808201879052606081018390526080810184905260a0810185905290517fe540b6cc73989eeec2f777710efa155b6cc71a931d80862d5bf911c6109972c39181900360c00190a15050505050505050565b6001546001600160a01b031690565b600390565b6001600160a01b031660009081526004602052604090205490565b600054600160a01b900460ff161515600114610c5057600080fd5b600054600160a01b900460ff1615156001148015610ce25750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b158015610cb457600080fd5b505afa158015610cc8573d6000803e3d6000fd5b505050506040513d6020811015610cde57600080fd5b5051155b15610cef57610cef610feb565b6000610cf96111f8565b905060008111610d0857600080fd5b6001546001600160a01b0384811691161480610d3157506002546001600160a01b038481169116145b610d3a57600080fd5b60008390506000610d5e633b9aca006109b360065486611fbd90919063ffffffff16565b90506000610d72848363ffffffff61205f16565b6010546040805163f8956a6760e01b81523060048201526001600160a01b038a81166024830152604482018590529151939450600093919092169163f8956a67916064808301926020929190829003018186803b158015610dd257600080fd5b505afa158015610de6573d6000803e3d6000fd5b505050506040513d6020811015610dfc57600080fd5b50516001600160a01b03881660009081526004602052604081205491925090610e47906109b3670de0b6b3a7640000610e3b878763ffffffff6120a116565b9063ffffffff611fbd16565b6001600160a01b038916600090815260056020526040902054909150610e85908390610e79908663ffffffff6120a116565b9063ffffffff6120a116565b6001600160a01b0389166000908152600560205260409020558115610ebb57600a54610eb7908363ffffffff61205f16565b600a555b610ec4846120fb565b846001600160a01b03166340c10f1988836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610f2457600080fd5b505af1158015610f38573d6000803e3d6000fd5b5050604080516001600160a01b03808c1682528c166020820152808201859052606081018a90526080810188905260a0810186905290517f73cfafc06c41aefbe585fd047208a7776b2334d2329decfb3d1b1f6ec8c3c41693509081900360c0019150a15050505050505050565b600154600090610fd790610fc2906001600160a01b03166118f5565b600254610e79906001600160a01b03166118f5565b905090565b6002546001600160a01b031690565b600054600160a01b900460ff16151560011461100657600080fd5b61100e61226d565b600f546003546040805163416bd10760e11b815230600482015260248101929092525160009283926001600160a01b03909116916382d7a20e9160448082019261010092909190829003018186803b15801561106957600080fd5b505afa15801561107d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101008110156110a357600080fd5b5060c081015160e0820151919450925090506001811515141561113a5782516020808501516040808701516060880151608089015160a08a01516001546001600160a01b03908116600081815260048a52878120600254909316808252888220838352600c8c528983208284528a84209484526005909c528983209183529890912060038e90559390935592909155919055935555555b6001546001600160a01b0390811660008181526004602090815260408083205460025490951680845281842054858552600c8452828520548286528386205496865260058552838620549286529483902054600354845198895294880191909152868301949094526060860194909452608085019390935260a084019190915260c083015282151560e0830152517fe7d4328bcca588827789f132837dde7289420fb8512d5c0a706059194fe1dfd1918190036101000190a1505050565b6000610fd761121d611208610fa6565b600a54600954610e799163ffffffff6120a116565b479063ffffffff61205f16565b611232611fb9565b6000546001600160a01b03908116911614611282576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6112d4611fb9565b6000546001600160a01b03908116911614611324576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b600054600160a01b900460ff161561133b57600080fd5b600354811161134957600080fd5b600e5460035460408051631760164960e31b81523060048201526024810192909252516000926001600160a01b03169163bb00b2489160448083019286929190829003018186803b15801561139d57600080fd5b505afa1580156113b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160409081528110156113da57600080fd5b81019080805160405193929190846401000000008211156113fa57600080fd5b90830190602082018581111561140f57600080fd5b825186602082028301116401000000008211171561142c57600080fd5b82525081516020918201928201910280838360005b83811015611459578181015183820152602001611441565b5050505091909101604052506020015193505050508181101561147c578061147e565b815b6003555050565b61148d611fb9565b6000546001600160a01b039081169116146114dd576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b629896808111156114ed57600080fd5b600755565b600f546001600160a01b031681565b60035490565b6000546001600160a01b031690565b60065490565b600054600160a01b900460ff16151560011480156115ae5750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b15801561158057600080fd5b505afa158015611594573d6000803e3d6000fd5b505050506040513d60208110156115aa57600080fd5b5051155b156115bb576115bb610feb565b336000908152600d60205260409020548111156115d757600080fd5b60105460408051639486909f60e01b815230600482015260248101849052905160009283928392839283926001600160a01b0390911691639486909f9160448082019260a092909190829003018186803b15801561163457600080fd5b505afa158015611648573d6000803e3d6000fd5b505050506040513d60a081101561165e57600080fd5b5080516020808301516040808501516060860151608090960151601054835163b9c7840b60e01b81523060048201529351969c50939a509098509496509394506000936001600160a01b039091169263b9c7840b92602480840193919291829003018186803b1580156116d057600080fd5b505afa1580156116e4573d6000803e3d6000fd5b505050506040513d60208110156116fa57600080fd5b50519050600061171483610e79898963ffffffff6120a116565b6001546001600160a01b03166000908152600c6020526040902054909150611742908863ffffffff61205f16565b6001546001600160a01b039081166000908152600c6020526040808220939093556002549091168152205461177d908763ffffffff61205f16565b6002546001600160a01b039081166000908152600c60209081526040808320949094556001549092168152600b90915220546117bf908663ffffffff61205f16565b6001546001600160a01b039081166000908152600b602052604080822093909355600254909116815220546117fa908563ffffffff61205f16565b6002546001600160a01b03166000908152600b6020908152604080832093909355338252600d90522054611834908963ffffffff61205f16565b336000908152600d6020526040902055600854611857908963ffffffff61205f16565b60085560095461186d908463ffffffff61205f16565b600955604051339082156108fc029083906000818181858888f1935050505015801561189d573d6000803e3d6000fd5b5060408051338152602081018390528082018a90526060810184905290517f11c75623de2058a663854f734fb8083a261970290f564abc9aa2ac01bfcbe81f9181900360800190a15050505050505050565b60095490565b6001600160a01b0381166000908152600c602090815260408083205460059092528220546119289163ffffffff6120a116565b92915050565b6001600160a01b038116600090815260046020908152604080832054600b90925282205461192891670de0b6b3a7640000916109b39163ffffffff611fbd16565b6001600160a01b03166000908152600d602052604090205490565b6001600160a01b03166000908152600c602052604090205490565b600a5490565b6119b3611fb9565b6000546001600160a01b03908116911614611a03576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b6002546001600160a01b03161580611a2457506001546001600160a01b0316155b611a2d57600080fd5b600280546001600160a01b03199081166001600160a01b03948516179182905560018054909116928416929092179182905590821660009081526004602052604080822092909316815291909120662386f26fc10000908190559055565b6001600160a01b031660009081526005602052604090205490565b611aae611fb9565b6000546001600160a01b03908116911614611afe576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b8015611b0d57611b0d816112cc565b5060008054911515600160a01b0260ff60a01b19909216919091179055565b600054600160a01b900460ff1615156001148015611bbe5750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b158015611b9057600080fd5b505afa158015611ba4573d6000803e3d6000fd5b505050506040513d6020811015611bba57600080fd5b5051155b15611bcb57611bcb610feb565b6000611bd56111f8565b60105460408051630bdc478960e01b81523060048201526024810184905290519293506000928392839283926001600160a01b0390921691630bdc478991604480820192608092909190829003018186803b158015611c3357600080fd5b505afa158015611c47573d6000803e3d6000fd5b505050506040513d6080811015611c5d57600080fd5b508051602080830151604080850151606090950151601054825163b9c7840b60e01b81523060048201529251959a509298509496509394506000936001600160a01b039091169263b9c7840b92602480840193919291829003018186803b158015611cc757600080fd5b505afa158015611cdb573d6000803e3d6000fd5b505050506040513d6020811015611cf157600080fd5b505190506000611d13826109b389670de0b6b3a764000063ffffffff611fbd16565b6001546001600160a01b03166000908152600c6020526040902054909150611d41908763ffffffff6120a116565b6001546001600160a01b039081166000908152600c60205260408082209390935560025490911681522054611d7c908663ffffffff6120a116565b6002546001600160a01b039081166000908152600c60209081526040808320949094556001549092168152600b9091522054611dbe908563ffffffff6120a116565b6001546001600160a01b039081166000908152600b60205260408082209390935560025490911681522054611df9908463ffffffff6120a116565b6002546001600160a01b039081166000908152600b6020908152604080832094909455918b168152600d9091522054611e38908263ffffffff6120a116565b6001600160a01b0389166000908152600d6020526040902055600854611e64908263ffffffff6120a116565b600855604080516001600160a01b038a168152602081018990528082018390526060810184905290517fe1d1934c742278e3794231612340f57d39d41877f0106ef92422f2f86ce07bf49181900360800190a15050505050505050565b611ec9611fb9565b6000546001600160a01b03908116911614611f19576040805162461bcd60e51b815260206004820181905260248201526000805160206122d3833981519152604482015290519081900360640190fd5b6001600160a01b038116611f5e5760405162461bcd60e51b815260040180806020018281038252602681526020018061228c6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082611fcc57506000611928565b82820282848281611fd957fe5b04146120165760405162461bcd60e51b81526004018080602001828103825260218152602001806122b26021913960400191505060405180910390fd5b9392505050565b600061201683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612171565b600061201683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612213565b600082820183811015612016576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6011546001600160a01b03166108fc61211b83600263ffffffff61201d16565b6040518115909202916000818181858888f19350505050158015612143573d6000803e3d6000fd5b5061216561215882600263ffffffff61201d16565b829063ffffffff61205f16565b60098054909101905550565b600081836121fd5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156121c25781810151838201526020016121aa565b50505050905090810190601f1680156121ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161220957fe5b0495945050505050565b600081848411156122655760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156121c25781810151838201526020016121aa565b505050900390565b6040518060c00160405280600690602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122010dd92a068998e4436d525a0067a19469ea659347f3cbebe836dcbeebadc835864736f6c63430006060033

Deployed Bytecode Sourcemap

388:12500:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;9858:64:5;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9858:64:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;12619:110;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12619:110:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12619:110:5;;:::i;:::-;;10791:93;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10791:93:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10791:93:5;-1:-1:-1;;;;;10791:93:5;;:::i;:::-;;;;;;;;;;;;;;;;2811:39;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2811:39:5;;;:::i;:::-;;;;-1:-1:-1;;;;;2811:39:5;;;;;;;;;;;;;;2854:38;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2854:38:5;;;:::i;10477:69::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10477:69:5;;;:::i;2708:48::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2708:48:5;;;:::i;10549:83::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10549:83:5;;;:::i;4825:791::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4825:791:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;4825:791:5;;;;;;;;;;:::i;10003:68::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10003:68:5;;;:::i;9925:75::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9925:75:5;;;:::i;10229:85::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10229:85:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10229:85:5;-1:-1:-1;;;;;10229:85:5;;:::i;3587:712::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3587:712:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;3587:712:5;;;;;;;;;;:::i;11086:120::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11086:120:5;;;:::i;10074:68::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10074:68:5;;;:::i;8617:790::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8617:790:5;;;:::i;11474:151::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11474:151:5;;;:::i;922:145:2:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;922:145:2;;;:::i;12291:292:5:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12291:292:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12291:292:5;;:::i;12773:112::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12773:112:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12773:112:5;;:::i;2760:47::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2760:47:5;;;:::i;10145:81::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10145:81:5;;;:::i;717:77:2:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;717:77:2;;;:::i;10407:67:5:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10407:67:5;;;:::i;7375:948::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7375:948:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;7375:948:5;;:::i;10635:69::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10635:69:5;;;:::i;11210:122::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11210:122:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11210:122:5;-1:-1:-1;;;;;11210:122:5;;:::i;11335:136::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11335:136:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11335:136:5;-1:-1:-1;;;;;11335:136:5;;:::i;10983:99::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10983:99:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10983:99:5;-1:-1:-1;;;;;10983:99:5;;:::i;10887:93::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10887:93:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10887:93:5;-1:-1:-1;;;;;10887:93:5;;:::i;10707:81::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10707:81:5;;;:::i;11860:273::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11860:273:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;11860:273:5;;;;;;;;;;:::i;10317:87::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10317:87:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10317:87:5;-1:-1:-1;;;;;10317:87:5;;:::i;12136:152::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12136:152:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12136:152:5;;;;;;;;;:::i;6101:849::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6101:849:5;-1:-1:-1;;;;;6101:849:5;;:::i;1073:240:2:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1073:240:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1073:240:2;-1:-1:-1;;;;;1073:240:2;;:::i;9858:64:5:-;9899:4;9913:6;-1:-1:-1;;;9913:6:5;;;;;9858:64::o;12619:110::-;849:12:2;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:2;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:2;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:2;;;;;;;;;;;;;;;12697:5:5::1;12687:6;:15;;12679:24;;12:1:-1;9::::0;2:12:::1;12679:24:5;12709:6;:15:::0;12619:110::o;10791:93::-;-1:-1:-1;;;;;10865:16:5;10848:7;10865:16;;;:9;:16;;;;;;;10791:93::o;2811:39::-;;;-1:-1:-1;;;;;2811:39:5;;:::o;2854:38::-;;;-1:-1:-1;;;;;2854:38:5;;:::o;10477:69::-;10536:7;;10477:69;:::o;2708:48::-;;;-1:-1:-1;;;;;2708:48:5;;:::o;10549:83::-;10615:14;;10549:83;:::o;4825:791::-;1832:6;;-1:-1:-1;;;1832:6:5;;;;:14;;1842:4;1832:14;1824:23;;12:1:-1;9;2:12;1824:23:5;1856:6;;-1:-1:-1;;;1856:6:5;;;;:14;;1866:4;1856:14;:62;;;;-1:-1:-1;1875:15:5;;:43;;;-1:-1:-1;;;1875:43:5;;1912:4;1875:43;;;;;;-1:-1:-1;;;;;1875:15:5;;;;:28;;:43;;;;;;;;;;;;;;;:15;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;1875:43:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1875:43:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1875:43:5;1874:44;1856:62;1853:95;;;1928:13;:11;:13::i;:::-;4980:29:::1;::::0;;-1:-1:-1;;;4980:29:5;;5003:4:::1;4980:29;::::0;::::1;::::0;;;4945:5;;4924:11:::1;::::0;-1:-1:-1;;;;;4980:14:5;::::1;::::0;::::1;::::0;:29;;;;;::::1;::::0;;;;;;;;:14;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;4980:29:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;4980:29:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;4980:29:5;;-1:-1:-1;5023:16:5;5015:25:::1;;12:1:-1;9::::0;2:12:::1;5015:25:5;5063:4;::::0;-1:-1:-1;;;;;5054:13:5;;::::1;5063:4:::0;::::1;5054:13;::::0;:30:::1;;-1:-1:-1::0;5080:4:5::1;::::0;-1:-1:-1;;;;;5071:13:5;;::::1;5080:4:::0;::::1;5071:13;5054:30;5046:39;;12:1:-1;9::::0;2:12:::1;5046:39:5;-1:-1:-1::0;;;;;5126:12:5;::::1;5091:15;5126:12:::0;;;:5:::1;:12;::::0;;;;;5109:42:::1;::::0;5144:6:::1;::::0;5109:30:::1;::::0;:12;;:30:::1;:16;:30;:::i;:::-;:34:::0;:42:::1;:34;:42;:::i;:::-;5175:11;::::0;:53:::1;::::0;;-1:-1:-1;;;5175:53:5;;5206:4:::1;5175:53;::::0;::::1;::::0;-1:-1:-1;;;;;5175:53:5;;::::1;::::0;;;;;;;;;;;;5091:60;;-1:-1:-1;5157:15:5::1;::::0;5175:11;;;::::1;::::0;:22:::1;::::0;:53;;;;;::::1;::::0;;;;;;;;:11;:53;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;5175:53:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;5175:53:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;5175:53:5;;-1:-1:-1;5234:12:5::1;5249:44;5287:5;5249:33;5261:20;:7:::0;5175:53;5261:20:::1;:11;:20;:::i;:::-;5249:7;::::0;;:33:::1;:11;:33;:::i;:44::-;5234:59:::0;-1:-1:-1;5299:14:5::1;5316:30;5234:59:::0;5316:20:::1;:7:::0;5328;5316:20:::1;:11;:20;:::i;:::-;:24:::0;:30:::1;:24;:30;:::i;:::-;-1:-1:-1::0;;;;;5368:13:5;::::1;;::::0;;;:6:::1;:13;::::0;;;;;5299:47;;-1:-1:-1;5368:26:5::1;::::0;5386:7;5368:26:::1;:17;:26;:::i;:::-;-1:-1:-1::0;;;;;5352:13:5;::::1;;::::0;;;:6:::1;:13;::::0;;;;:42;5403:12;;5400:59:::1;;5433:13;::::0;:26:::1;::::0;5451:7;5433:26:::1;:17;:26;:::i;:::-;5417:13;:42:::0;5400:59:::1;5465:13;5473:4;5465:7;:13::i;:::-;5484:4;-1:-1:-1::0;;;;;5484:9:5::1;;5494:12;5484:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;5484:23:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;5513:24:5::1;::::0;-1:-1:-1;;;;;5513:16:5;::::1;::::0;-1:-1:-1;5513:24:5;::::1;;;::::0;-1:-1:-1;5530:6:5;;5513:24:::1;::::0;;;5530:6;5513:16;:24;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;5549:62:5::1;::::0;;-1:-1:-1;;;;;5549:62:5;;::::1;::::0;;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;1953:1;;;;;;4825:791:::0;;:::o;10003:68::-;10064:4;;-1:-1:-1;;;;;10064:4:5;10003:68;:::o;9925:75::-;2235:1;9925:75;:::o;10229:85::-;-1:-1:-1;;;;;10299:12:5;10282:7;10299:12;;;:5;:12;;;;;;;10229:85::o;3587:712::-;1832:6;;-1:-1:-1;;;1832:6:5;;;;:14;;1842:4;1832:14;1824:23;;12:1:-1;9;2:12;1824:23:5;1856:6;;-1:-1:-1;;;1856:6:5;;;;:14;;1866:4;1856:14;:62;;;;-1:-1:-1;1875:15:5;;:43;;;-1:-1:-1;;;1875:43:5;;1912:4;1875:43;;;;;;-1:-1:-1;;;;;1875:15:5;;;;:28;;:43;;;;;;;;;;;;;;;:15;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;1875:43:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1875:43:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1875:43:5;1874:44;1856:62;1853:95;;;1928:13;:11;:13::i;:::-;3677::::1;3693:18;:16;:18::i;:::-;3677:34;;3733:1;3725:5;:9;3717:18;;12:1:-1;9::::0;2:12:::1;3717:18:5;3758:4;::::0;-1:-1:-1;;;;;3749:13:5;;::::1;3758:4:::0;::::1;3749:13;::::0;:30:::1;;-1:-1:-1::0;3775:4:5::1;::::0;-1:-1:-1;;;;;3766:13:5;;::::1;3775:4:::0;::::1;3766:13;3749:30;3741:39;;12:1:-1;9::::0;2:12:::1;3741:39:5;3786:11;3807:5;3786:27;;3819:12;3834:28;3856:5;3834:17;3844:6;;3834:5;:9;;:17;;;;:::i;:28::-;3819:43:::0;-1:-1:-1;3868:14:5::1;3885:15;:5:::0;3819:43;3885:15:::1;:9;:15;:::i;:::-;3922:11;::::0;:50:::1;::::0;;-1:-1:-1;;;3922:50:5;;3951:4:::1;3922:50;::::0;::::1;::::0;-1:-1:-1;;;;;3922:50:5;;::::1;::::0;;;;;;;;;;;;3868:32;;-1:-1:-1;3906:13:5::1;::::0;3922:11;;;::::1;::::0;:20:::1;::::0;:50;;;;;::::1;::::0;;;;;;;;:11;:50;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;3922:50:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3922:50:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;3922:50:5;-1:-1:-1;;;;;4035:12:5;::::1;3978:20;4035:12:::0;;;:5:::1;3922:50;4035:12:::0;;;;;3922:50;;-1:-1:-1;3978:20:5;4001:47:::1;::::0;:29:::1;4023:6;4001:17;:6:::0;3922:50;4001:17:::1;:10;:17;:::i;:::-;:21:::0;:29:::1;:21;:29;:::i;:47::-;-1:-1:-1::0;;;;;4070:13:5;::::1;;::::0;;;:6:::1;:13;::::0;;;;;3978:70;;-1:-1:-1;4070:36:5::1;::::0;4100:5;;4070:25:::1;::::0;4088:6;4070:25:::1;:17;:25;:::i;:::-;:29:::0;:36:::1;:29;:36;:::i;:::-;-1:-1:-1::0;;;;;4054:13:5;::::1;;::::0;;;:6:::1;:13;::::0;;;;:52;4115:10;;4112:55:::1;;4143:13;::::0;:24:::1;::::0;4161:5;4143:24:::1;:17;:24;:::i;:::-;4127:13;:40:::0;4112:55:::1;4173:13;4181:4;4173:7;:13::i;:::-;4192:4;-1:-1:-1::0;;;;;4192:9:5::1;;4202:7;4211:12;4192:32;;;;;;;;;;;;;-1:-1:-1::0;;;;;4192:32:5::1;-1:-1:-1::0;;;;;4192:32:5::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;4192:32:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;4236:58:5::1;::::0;;-1:-1:-1;;;;;4236:58:5;;::::1;::::0;;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;-1:-1:-1;4236:58:5;;;;;;;-1:-1:-1;4236:58:5::1;1953:1;;;;;;3587:712:::0;;:::o;11086:120::-;11194:4;;11132:7;;11154:46;;11179:20;;-1:-1:-1;;;;;11194:4:5;11179:14;:20::i;:::-;11169:4;;11154:20;;-1:-1:-1;;;;;11169:4:5;11154:14;:20::i;:46::-;11147:54;;11086:120;:::o;10074:68::-;10135:4;;-1:-1:-1;;;;;10135:4:5;10074:68;:::o;8617:790::-;8665:6;;-1:-1:-1;;;8665:6:5;;;;:14;;8675:4;8665:14;8657:23;;12:1:-1;9;2:12;8657:23:5;8694:28;;:::i;:::-;8774:15;;8821:13;;8774:61;;;-1:-1:-1;;;8774:61:5;;8814:4;8774:61;;;;;;;;;;;;8730:15;;;;-1:-1:-1;;;;;8774:15:5;;;;:31;;:61;;;;;:15;;:61;;;;;;;;:15;:61;;;2:2:-1;;;;27:1;24;17:12;2:2;8774:61:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8774:61:5;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15:3;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;8774:61:5;;;;;;;;;;-1:-1:-1;8774:61:5;-1:-1:-1;8774:61:5;-1:-1:-1;8855:4:5;8844:15;;;;8841:374;;;9055:13;;;9078;;;;9101;;;;;9124;;;;9147;;;;9170;;;;9089:1;8885:4;-1:-1:-1;;;;;8885:4:5;;;9066:1;8879:11;;;9158:1;8879:11;;;;;9112:1;8906:4;;;;8900:11;;;;;;8921:15;;;:9;:15;;;;;8946;;;;;;8971:12;;;9181:1;8971:12;;;;;;8993;;;;;;;9135:1;8869:339;;;;;;;;;;;;;;;;;;8841:374;9250:4;;-1:-1:-1;;;;;9250:4:5;;;9244:11;;;;:5;:11;;;;;;;;;9269:4;;;;;9263:11;;;;;;;9282:15;;;:9;:15;;;;;;9305;;;;;;;9328:12;;;:6;:12;;;;;;9348;;;;;;;;9368:13;;9225:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9250:4;9225:177;;;8617:790;;;:::o;11474:151::-;11522:7;11544:75;11570:48;11601:16;:14;:16::i;:::-;11582:13;;11570:7;;:26;;;:11;:26;:::i;:48::-;11544:21;;:75;:25;:75;:::i;922:145:2:-;849:12;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:2;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:2;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:2;;;;;;;;;;;;;;;1028:1:::1;1012:6:::0;;991:40:::1;::::0;-1:-1:-1;;;;;1012:6:2;;::::1;::::0;991:40:::1;::::0;1028:1;;991:40:::1;1058:1;1041:19:::0;;-1:-1:-1;;;;;;1041:19:2::1;::::0;;922:145::o;12291:292:5:-;849:12:2;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:2;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:2;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:2;;;;;;;;;;;;;;;12365:6:5::1;::::0;-1:-1:-1;;;12365:6:5;::::1;;;:15;12357:24;;12:1:-1;9::::0;2:12:::1;12357:24:5;12405:13;;12395:7;:23;12387:32;;12:1:-1;9::::0;2:12:::1;12387:32:5;12452:15;::::0;12496:13:::1;::::0;12452:58:::1;::::0;;-1:-1:-1;;;12452:58:5;;12489:4:::1;12452:58;::::0;::::1;::::0;;;;;;;;;12429:19:::1;::::0;-1:-1:-1;;;;;12452:15:5::1;::::0;:28:::1;::::0;:58;;;;;12429:19;;12452:58;;;;;;;:15;:58;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;12452:58:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;12452:58:5;;;;;;39:16:-1;36:1;17:17;2:54;101:4;12452:58:5;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;;;7:11;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;12452:58:5;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;12452:58:5;;421:4:-1::1;412:14:::0;;::::1;::::0;12452:58:5;::::1;::::0;::::1;::::0;412:14:-1;12452:58:5;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;-1:-1:::0;;;;12452:58:5;;;::::1;;::::0;-1:-1:-1;12452:58:5::1;;::::0;;-1:-1:-1;;;;12532:22:5;;::::1;;:46;;12567:11;12532:46;;;12557:7;12532:46;12516:13;:62:::0;-1:-1:-1;;12291:292:5:o;12773:112::-;849:12:2;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:2;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:2;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:2;;;;;;;;;;;;;;;12852:5:5::1;12842:6;:15;;12834:24;;12:1:-1;9::::0;2:12:::1;12834:24:5;12864:7;:16:::0;12773:112::o;2760:47::-;;;-1:-1:-1;;;;;2760:47:5;;:::o;10145:81::-;10210:13;;10145:81;:::o;717:77:2:-;755:7;781:6;-1:-1:-1;;;;;781:6:2;717:77;:::o;10407:67:5:-;10465:6;;10407:67;:::o;7375:948::-;1998:6;;-1:-1:-1;;;1998:6:5;;;;:14;;2008:4;1998:14;:62;;;;-1:-1:-1;2017:15:5;;:43;;;-1:-1:-1;;;2017:43:5;;2054:4;2017:43;;;;;;-1:-1:-1;;;;;2017:15:5;;;;:28;;:43;;;;;;;;;;;;;;;:15;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;2017:43:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2017:43:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2017:43:5;2016:44;1998:62;1995:95;;;2070:13;:11;:13::i;:::-;7491:10:::1;7480:22;::::0;;;:10:::1;:22;::::0;;;;;7470:32;::::1;;7462:41;;12:1:-1;9::::0;2:12:::1;7462:41:5;7646:11;::::0;:53:::1;::::0;;-1:-1:-1;;;7646:53:5;;7685:4:::1;7646:53;::::0;::::1;::::0;;;;;;;;;7517:18:::1;::::0;;;;;;;;;-1:-1:-1;;;;;7646:11:5;;::::1;::::0;:30:::1;::::0;:53;;;;;::::1;::::0;;;;;;;;;:11;:53;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;7646:53:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;7646:53:5;;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29::::0;22:12:::1;4:2;-1:-1:::0;7646:53:5;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;7726:11:::1;::::0;:40;;-1:-1:-1;;;7726:40:5;;7760:4:::1;7726:40;::::0;::::1;::::0;;;7646:53;;-1:-1:-1;7646:53:5;;-1:-1:-1;7646:53:5;;-1:-1:-1;7646:53:5;;-1:-1:-1;7646:53:5;;-1:-1:-1;7705:18:5::1;::::0;-1:-1:-1;;;;;7726:11:5;;::::1;::::0;:25:::1;::::0;:40;;;;;7646:53;;7726:40;;;;;;:11;:40;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;7726:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;7726:40:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;7726:40:5;;-1:-1:-1;7772:20:5::1;7795:40;7826:8:::0;7795:26:::1;:10:::0;7810;7795:26:::1;:14;:26;:::i;:40::-;7869:4;::::0;-1:-1:-1;;;;;7869:4:5::1;7859:15;::::0;;;:9:::1;:15;::::0;;;;;7772:63;;-1:-1:-1;7859:31:5::1;::::0;7879:10;7859:31:::1;:19;:31;:::i;:::-;7851:4;::::0;-1:-1:-1;;;;;7851:4:5;;::::1;7841:15;::::0;;;:9:::1;:15;::::0;;;;;:49;;;;7924:4:::1;::::0;;;::::1;7914:15:::0;;;;:31:::1;::::0;7934:10;7914:31:::1;:19;:31;:::i;:::-;7906:4;::::0;-1:-1:-1;;;;;7906:4:5;;::::1;7896:15;::::0;;;:9:::1;:15;::::0;;;;;;;:49;;;;7906:4;7979;;;::::1;7969:15:::0;;:9:::1;:15:::0;;;;;:31:::1;::::0;7989:10;7969:31:::1;:19;:31;:::i;:::-;7961:4;::::0;-1:-1:-1;;;;;7961:4:5;;::::1;7951:15;::::0;;;:9:::1;:15;::::0;;;;;:49;;;;8034:4:::1;::::0;;;::::1;8024:15:::0;;;;:31:::1;::::0;8044:10;8024:31:::1;:19;:31;:::i;:::-;8016:4;::::0;-1:-1:-1;;;;;8016:4:5::1;8006:15;::::0;;;:9:::1;:15;::::0;;;;;;;:49;;;;8097:10:::1;8086:22:::0;;:10:::1;:22:::0;;;;:34:::1;::::0;8113:6;8086:34:::1;:26;:34;:::i;:::-;8072:10;8061:22;::::0;;;:10:::1;:22;::::0;;;;:59;8143:14:::1;::::0;:26:::1;::::0;8162:6;8143:26:::1;:18;:26;:::i;:::-;8126:14;:43:::0;8185:7:::1;::::0;:21:::1;::::0;8197:8;8185:21:::1;:11;:21;:::i;:::-;8175:7;:31:::0;8212:33:::1;::::0;:10:::1;::::0;:33;::::1;;;::::0;8232:12;;8212:33:::1;::::0;;;8232:12;8212:10;:33;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;8257:61:5::1;::::0;;8273:10:::1;8257:61:::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;2095:1;;;;;;;7375:948:::0;:::o;10635:69::-;10694:7;;10635:69;:::o;11210:122::-;-1:-1:-1;;;;;11309:16:5;;11269:7;11309:16;;;:9;:16;;;;;;;;;11291:6;:13;;;;;;:35;;;:17;:35;:::i;:::-;11284:43;11210:122;-1:-1:-1;;11210:122:5:o;11335:136::-;-1:-1:-1;;;;;11440:12:5;;11397:7;11440:12;;;:5;:12;;;;;;;;;11419:9;:16;;;;;;:46;;11458:6;;11419:34;;;:20;:34;:::i;10983:99::-;-1:-1:-1;;;;;11060:19:5;11043:7;11060:19;;;:10;:19;;;;;;;10983:99::o;10887:93::-;-1:-1:-1;;;;;10961:16:5;10944:7;10961:16;;;:9;:16;;;;;;;10887:93::o;10707:81::-;10772:13;;10707:81;:::o;11860:273::-;849:12:2;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:2;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:2;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:2;;;;;;;;;;;;;;;11954:4:5::1;::::0;-1:-1:-1;;;;;11954:4:5::1;:18:::0;;:40:::1;;-1:-1:-1::0;11976:4:5::1;::::0;-1:-1:-1;;;;;11976:4:5::1;:18:::0;11954:40:::1;11946:49;;12:1:-1;9::::0;2:12:::1;11946:49:5;12008:4;12001:41:::0;;-1:-1:-1;;;;;;12001:41:5;;::::1;-1:-1:-1::0;;;;;12001:41:5;;::::1;;::::0;;;;-1:-1:-1;12001:41:5;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;12090:4;;::::1;-1:-1:-1::0;12084:11:5;;;:5:::1;:11;::::0;;;;;12103:4;;;::::1;12097:11:::0;;;;;;12113:6:::1;12083:45:::0;;;;;;11860:273::o;10317:87::-;-1:-1:-1;;;;;10388:13:5;10371:7;10388:13;;;:6;:13;;;;;;;10317:87::o;12136:152::-;849:12:2;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:2;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:2;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:2;;;;;;;;;;;;;;;12212:12:5;;12209:55:::1;;12234:23;12249:7;12234:14;:23::i;:::-;-1:-1:-1::0;12269:6:5::1;:14:::0;;;::::1;;-1:-1:-1::0;;;12269:14:5::1;-1:-1:-1::0;;;;12269:14:5;;::::1;::::0;;;::::1;::::0;;12136:152::o;6101:849::-;1998:6;;-1:-1:-1;;;1998:6:5;;;;:14;;2008:4;1998:14;:62;;;;-1:-1:-1;2017:15:5;;:43;;;-1:-1:-1;;;2017:43:5;;2054:4;2017:43;;;;;;-1:-1:-1;;;;;2017:15:5;;;;:28;;:43;;;;;;;;;;;;;;;:15;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;2017:43:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2017:43:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2017:43:5;2016:44;1998:62;1995:95;;;2070:13;:11;:13::i;:::-;6196::::1;6212:18;:16;:18::i;:::-;6349:11;::::0;:49:::1;::::0;;-1:-1:-1;;;6349:49:5;;6385:4:::1;6349:49;::::0;::::1;::::0;;;;;;;;;6196:34;;-1:-1:-1;6244:18:5::1;::::0;;;;;;;-1:-1:-1;;;;;6349:11:5;;::::1;::::0;:27:::1;::::0;:49;;;;;::::1;::::0;;;;;;;;;:11;:49;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;6349:49:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;6349:49:5;;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29::::0;22:12:::1;4:2;-1:-1:::0;6349:49:5;;::::1;::::0;;::::1;::::0;;;;;;;;;;;6425:11:::1;::::0;:40;;-1:-1:-1;;;6425:40:5;;6459:4:::1;6425:40;::::0;::::1;::::0;;;6349:49;;-1:-1:-1;6349:49:5;;-1:-1:-1;6349:49:5;;-1:-1:-1;6349:49:5;;-1:-1:-1;6404:18:5::1;::::0;-1:-1:-1;;;;;6425:11:5;;::::1;::::0;:25:::1;::::0;:40;;;;;6349:49;;6425:40;;;;;;:11;:40;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;6425:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;6425:40:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;6425:40:5;;-1:-1:-1;6471:23:5::1;6497:33;6425:40:::0;6497:17:::1;:5:::0;6507:6:::1;6497:17;:9;:17;:::i;:33::-;6564:4;::::0;-1:-1:-1;;;;;6564:4:5::1;6554:15;::::0;;;:9:::1;:15;::::0;;;;;6471:59;;-1:-1:-1;6554:31:5::1;::::0;6574:10;6554:31:::1;:19;:31;:::i;:::-;6546:4;::::0;-1:-1:-1;;;;;6546:4:5;;::::1;6536:15;::::0;;;:9:::1;:15;::::0;;;;;:49;;;;6619:4:::1;::::0;;;::::1;6609:15:::0;;;;:31:::1;::::0;6629:10;6609:31:::1;:19;:31;:::i;:::-;6601:4;::::0;-1:-1:-1;;;;;6601:4:5;;::::1;6591:15;::::0;;;:9:::1;:15;::::0;;;;;;;:49;;;;6601:4;6674;;;::::1;6664:15:::0;;:9:::1;:15:::0;;;;;:31:::1;::::0;6684:10;6664:31:::1;:19;:31;:::i;:::-;6656:4;::::0;-1:-1:-1;;;;;6656:4:5;;::::1;6646:15;::::0;;;:9:::1;:15;::::0;;;;;:49;;;;6729:4:::1;::::0;;;::::1;6719:15:::0;;;;:31:::1;::::0;6739:10;6719:31:::1;:19;:31;:::i;:::-;6711:4;::::0;-1:-1:-1;;;;;6711:4:5;;::::1;6701:15;::::0;;;:9:::1;:15;::::0;;;;;;;:49;;;;6778:19;;::::1;::::0;;:10:::1;:19:::0;;;;;:40:::1;::::0;6802:15;6778:40:::1;:23;:40;:::i;:::-;-1:-1:-1::0;;;;;6756:19:5;::::1;;::::0;;;:10:::1;:19;::::0;;;;:62;6841:14:::1;::::0;:35:::1;::::0;6860:15;6841:35:::1;:18;:35;:::i;:::-;6824:14;:52:::0;6888:57:::1;::::0;;-1:-1:-1;;;;;6888:57:5;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;2095:1;;;;;;;6101:849:::0;:::o;1073:240:2:-;849:12;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:2;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:2;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;1161:22:2;::::1;1153:73;;;;-1:-1:-1::0;;;1153:73:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1262:6;::::0;;1241:38:::1;::::0;-1:-1:-1;;;;;1241:38:2;;::::1;::::0;1262:6;::::1;::::0;1241:38:::1;::::0;::::1;1289:6;:17:::0;;-1:-1:-1;;;;;;1289:17:2::1;-1:-1:-1::0;;;;;1289:17:2;;;::::1;::::0;;;::::1;::::0;;1073:240::o;57:104::-;144:10;57:104;:::o;2180:459:1:-;2238:7;2479:6;2475:45;;-1:-1:-1;2508:1:1;2501:8;;2475:45;2542:5;;;2546:1;2542;:5;:1;2565:5;;;;;:10;2557:56;;;;-1:-1:-1;;;2557:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:1;2180:459;-1:-1:-1;;;2180:459:1:o;3101:130::-;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;1321:134::-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;874:176::-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:1;;;;;;;;;;;;;;;;;;;;;;;;;;;9654:134:5;9702:15;;-1:-1:-1;;;;;9702:15:5;:39;9727:13;:6;9738:1;9727:13;:10;:13;:::i;:::-;9702:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;9758:25:5;9769:13;:6;9780:1;9769:13;:10;:13;:::i;:::-;9758:6;;:25;:10;:25;:::i;:::-;9747:7;:36;;;;;;;-1:-1:-1;9654:134:5:o;3713:272:1:-;3799:7;3833:12;3826:5;3818:28;;;;-1:-1:-1;;;3818:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3818:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:9;3872:1;3868;:5;;;;;;;3713:272;-1:-1:-1;;;;;3713:272:1:o;1746:187::-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1851:29:1;-1:-1:-1;;;1902:5:1;;;1746:187::o;388:12500:5:-;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;-1:-1;388:12500:5;;;-1:-1:-1;;388:12500:5:o

Swarm Source

ipfs://10dd92a068998e4436d525a0067a19469ea659347f3cbebe836dcbeebadc8358

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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