ETH Price: $3,646.54 (-6.34%)

Contract

0x85899fA0C08F1E13477caADAB07C732dc433D5f7
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer81702782019-07-17 20:08:271981 days ago1563394107IN
0x85899fA0...dc433D5f7
0 ETH0.000040141.575
Transfer81594702019-07-16 3:11:281982 days ago1563246688IN
0x85899fA0...dc433D5f7
0 ETH0.000216928.51
Transfer81468802019-07-14 4:00:551984 days ago1563076855IN
0x85899fA0...dc433D5f7
0 ETH0.000175886.9
Transfer81417582019-07-13 9:00:451985 days ago1563008445IN
0x85899fA0...dc433D5f7
0 ETH0.0002931411.5
Transfer81381342019-07-12 19:29:581986 days ago1562959798IN
0x85899fA0...dc433D5f7
0 ETH0.00158094.8
Transfer81378772019-07-12 18:30:301986 days ago1562956230IN
0x85899fA0...dc433D5f7
0.01 ETH0.000150212
Transfer81365392019-07-12 13:26:211986 days ago1562937981IN
0x85899fA0...dc433D5f7
0 ETH0.000426119.2
Transfer81360872019-07-12 11:40:561986 days ago1562931656IN
0x85899fA0...dc433D5f7
0 ETH0.0004631710
Transfer81360682019-07-12 11:36:071986 days ago1562931367IN
0x85899fA0...dc433D5f7
0 ETH0.0004631710
Transfer81360592019-07-12 11:34:501986 days ago1562931290IN
0x85899fA0...dc433D5f7
0 ETH0.0004631710
Transfer81360452019-07-12 11:32:361986 days ago1562931156IN
0x85899fA0...dc433D5f7
0 ETH0.0004631710
Transfer81328112019-07-11 23:18:171986 days ago1562887097IN
0x85899fA0...dc433D5f7
0.01 ETH0.000215853
Transfer81327732019-07-11 23:10:251987 days ago1562886625IN
0x85899fA0...dc433D5f7
0 ETH0.000138953
Transfer81300512019-07-11 12:52:101987 days ago1562849530IN
0x85899fA0...dc433D5f7
0 ETH0.0010652923
Transfer81288702019-07-11 8:25:451987 days ago1562833545IN
0x85899fA0...dc433D5f7
0 ETH0.00027796
Transfer81260882019-07-10 22:19:411988 days ago1562797181IN
0x85899fA0...dc433D5f7
0 ETH0.000222324.8
Transfer81231372019-07-10 11:08:341988 days ago1562756914IN
0x85899fA0...dc433D5f7
0 ETH0.000185264
Transfer81230972019-07-10 11:00:051988 days ago1562756405IN
0x85899fA0...dc433D5f7
0 ETH0.000069471.5
Transfer81193462019-07-09 21:00:461989 days ago1562706046IN
0x85899fA0...dc433D5f7
0 ETH0.000092632
Transfer81164982019-07-09 10:23:511989 days ago1562667831IN
0x85899fA0...dc433D5f7
0 ETH0.000203794.4
Transfer81163842019-07-09 9:57:181989 days ago1562666238IN
0x85899fA0...dc433D5f7
0 ETH0.000092632
Transfer81163652019-07-09 9:52:291989 days ago1562665949IN
0x85899fA0...dc433D5f7
0 ETH0.000185264
Transfer81163612019-07-09 9:52:091989 days ago1562665929IN
0x85899fA0...dc433D5f7
0 ETH0.000092632
Transfer81160912019-07-09 8:55:071989 days ago1562662507IN
0x85899fA0...dc433D5f7
0 ETH0.0005859112.65
Get My Dividends81159992019-07-09 8:34:171989 days ago1562661257IN
0x85899fA0...dc433D5f7
0 ETH0.000140823
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
81381342019-07-12 19:29:581986 days ago1562959798
0x85899fA0...dc433D5f7
0.16305623 ETH
81381342019-07-12 19:29:581986 days ago1562959798
0x85899fA0...dc433D5f7
 Contract Creation0 ETH
81378772019-07-12 18:30:301986 days ago1562956230
0x85899fA0...dc433D5f7
0.0005 ETH
81378772019-07-12 18:30:301986 days ago1562956230
0x85899fA0...dc433D5f7
0.00075 ETH
81365392019-07-12 13:26:211986 days ago1562937981
0x85899fA0...dc433D5f7
0.0679875 ETH
81360872019-07-12 11:40:561986 days ago1562931656
0x85899fA0...dc433D5f7
0.01356801 ETH
81360682019-07-12 11:36:071986 days ago1562931367
0x85899fA0...dc433D5f7
0.01384797 ETH
81360592019-07-12 11:34:501986 days ago1562931290
0x85899fA0...dc433D5f7
0.01030072 ETH
81360452019-07-12 11:32:361986 days ago1562931156
0x85899fA0...dc433D5f7
0.014985 ETH
81328112019-07-11 23:18:171986 days ago1562887097
0x85899fA0...dc433D5f7
0.0005 ETH
81328112019-07-11 23:18:171986 days ago1562887097
0x85899fA0...dc433D5f7
0.00075 ETH
81327732019-07-11 23:10:251987 days ago1562886625
0x85899fA0...dc433D5f7
0.05228096 ETH
81300512019-07-11 12:52:101987 days ago1562849530
0x85899fA0...dc433D5f7
0.1438375 ETH
81288702019-07-11 8:25:451987 days ago1562833545
0x85899fA0...dc433D5f7
0.01184 ETH
81260882019-07-10 22:19:411988 days ago1562797181
0x85899fA0...dc433D5f7
0.05298272 ETH
81231372019-07-10 11:08:341988 days ago1562756914
0x85899fA0...dc433D5f7
0.00459143 ETH
81230972019-07-10 11:00:051988 days ago1562756405
0x85899fA0...dc433D5f7
0.013875 ETH
81193462019-07-09 21:00:461989 days ago1562706046
0x85899fA0...dc433D5f7
0.06596524 ETH
81164982019-07-09 10:23:511989 days ago1562667831
0x85899fA0...dc433D5f7
0.01649524 ETH
81163842019-07-09 9:57:181989 days ago1562666238
0x85899fA0...dc433D5f7
0.0283975 ETH
81163652019-07-09 9:52:291989 days ago1562665949
0x85899fA0...dc433D5f7
0.02193117 ETH
81163612019-07-09 9:52:091989 days ago1562665929
0x85899fA0...dc433D5f7
0.01915711 ETH
81160912019-07-09 8:55:071989 days ago1562662507
0x85899fA0...dc433D5f7
0.10915 ETH
81159992019-07-09 8:34:171989 days ago1562661257
0x85899fA0...dc433D5f7
0.00544555 ETH
81157832019-07-09 7:47:021989 days ago1562658422
0x85899fA0...dc433D5f7
0.43328676 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Fortune

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-05-08
*/

pragma solidity 0.4.25;


/**
*
* ETH CRYPTOCURRENCY DISTRIBUTION PROJECT v 1.0
* Web              - https://fortune333.online
* GitHub           - https://github.com/fortune333/Fortune333
* Email:             mailto:support(at sign)fortune333token
* 
* 
*  - GAIN 3,33% - 1% PER 24 HOURS (interest is charges in equal parts every 10 min)
*  - Life-long payments
*  - Unprecedentedly reliable
*  - Bringer Fortune
*  - Minimal contribution 0.01 eth
*  - Currency and payment - ETH
*  - Contribution allocation schemes:
*    -- 87,5% payments
*    --  7,5% marketing
*    --  5,0% technical support
*
*   ---About the Project
*  Blockchain-enabled smart contracts have opened a new era of trustless relationships without 
*  intermediaries. This technology opens incredible financial possibilities. Our automated investment 
*  distribution model is written into a smart contract, uploaded to the Ethereum blockchain and can be 
*  freely accessed online. In order to insure our investors' complete security, full control over the 
*  project has been transferred from the organizers to the smart contract: nobody can influence the 
*  system's permanent autonomous functioning.
* 
* ---How to use:
*  1. Send from ETH wallet to the smart contract address 
*     any amount from 0.01 ETH.
*  2. Verify your transaction in the history of your application or etherscan.io, specifying the address 
*     of your wallet.
*  3a. Claim your profit by sending 0 ether transaction (every 10 min, every day, every week, i don't care unless you're 
*      spending too much on GAS)
*  OR
*  3b. For reinvest, you need to deposit the amount that you want to reinvest and the 
*      accrued interest automatically summed to your new contribution.
*  
* RECOMMENDED GAS LIMIT: 200000
* RECOMMENDED GAS PRICE: https://ethgasstation.info/
* You can check the payments on the etherscan.io site, in the "Internal Txns" tab of your wallet.
*
* ---Refferral system:
*     from 0 to 10.000 ethers in the fund - remuneration to each contributor is 3.33%, 
*     from 10.000 to 100.000 ethers in the fund - remuneration will be 2%, 
*     from 100.000 ethers in the fund - each contributor will get 1%.
*
* ---It is not allowed to transfer from exchanges, ONLY from your personal ETH wallet, for which you 
* have private keys.
* 
* Contracts reviewed and approved by pros!
* 
* Main contract - Fortune. Scroll down to find it.
*/ 


library Math {
  function min(uint a, uint b) internal pure returns(uint) {
    if (a > b) {
      return b;
    }
    return a;
  }
}


library Zero {
  function requireNotZero(address addr) internal pure {
    require(addr != address(0), "require not zero address");
  }

  function requireNotZero(uint val) internal pure {
    require(val != 0, "require not zero value");
  }

  function notZero(address addr) internal pure returns(bool) {
    return !(addr == address(0));
  }

  function isZero(address addr) internal pure returns(bool) {
    return addr == address(0);
  }

  function isZero(uint a) internal pure returns(bool) {
    return a == 0;
  }

  function notZero(uint a) internal pure returns(bool) {
    return a != 0;
  }
}


library Percent {
  // Solidity automatically throws when dividing by 0
  struct percent {
    uint num;
    uint den;
  }
  
  // storage
  function mul(percent storage p, uint a) internal view returns (uint) {
    if (a == 0) {
      return 0;
    }
    return a*p.num/p.den;
  }

  function div(percent storage p, uint a) internal view returns (uint) {
    return a/p.num*p.den;
  }

  function sub(percent storage p, uint a) internal view returns (uint) {
    uint b = mul(p, a);
    if (b >= a) {
      return 0;
    }
    return a - b;
  }

  function add(percent storage p, uint a) internal view returns (uint) {
    return a + mul(p, a);
  }

  function toMemory(percent storage p) internal view returns (Percent.percent memory) {
    return Percent.percent(p.num, p.den);
  }

  // memory 
  function mmul(percent memory p, uint a) internal pure returns (uint) {
    if (a == 0) {
      return 0;
    }
    return a*p.num/p.den;
  }

  function mdiv(percent memory p, uint a) internal pure returns (uint) {
    return a/p.num*p.den;
  }

  function msub(percent memory p, uint a) internal pure returns (uint) {
    uint b = mmul(p, a);
    if (b >= a) {
      return 0;
    }
    return a - b;
  }

  function madd(percent memory p, uint a) internal pure returns (uint) {
    return a + mmul(p, a);
  }
}


library Address {
  function toAddress(bytes source) internal pure returns(address addr) {
    assembly { addr := mload(add(source,0x14)) }
    return addr;
  }

  function isNotContract(address addr) internal view returns(bool) {
    uint length;
    assembly { length := extcodesize(addr) }
    return length == 0;
  }
}


/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, reverts on 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-solidity/pull/522
    if (_a == 0) {
      return 0;
    }

    uint256 c = _a * _b;
    require(c / _a == _b);

    return c;
  }

  /**
  * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
  */
  function div(uint256 _a, uint256 _b) internal pure returns (uint256) {
    require(_b > 0); // Solidity only automatically asserts when dividing by 0
    uint256 c = _a / _b;
    // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold

    return c;
  }

  /**
  * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
    require(_b <= _a);
    uint256 c = _a - _b;

    return c;
  }

  /**
  * @dev Adds two numbers, reverts on overflow.
  */
  function add(uint256 _a, uint256 _b) internal pure returns (uint256) {
    uint256 c = _a + _b;
    require(c >= _a);

    return c;
  }

  /**
  * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
  * reverts when dividing by zero.
  */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0);
    return a % b;
  }
}


contract Accessibility {
  address private owner;
  modifier onlyOwner() {
    require(msg.sender == owner, "access denied");
    _;
  }

  constructor() public {
    owner = msg.sender;
  }

  function disown() internal {
    delete owner;
  }
}


contract Rev1Storage {
  function investorShortInfo(address addr) public view returns(uint value, uint refBonus); 
}


contract Rev2Storage {
  function investorInfo(address addr) public view returns(uint investment, uint paymentTime); 
}


library PrivateEntrance {
  using PrivateEntrance for privateEntrance;
  using Math for uint;
  struct privateEntrance {
    Rev1Storage rev1Storage;
    Rev2Storage rev2Storage;
    uint investorMaxInvestment;
    uint endTimestamp;
    mapping(address=>bool) hasAccess;
  }

  function isActive(privateEntrance storage pe) internal view returns(bool) {
    return pe.endTimestamp > now;
  }

  function maxInvestmentFor(privateEntrance storage pe, address investorAddr) internal view returns(uint) {
    // check if investorAddr has access
    if (!pe.hasAccess[investorAddr]) {
      return 0;
    }

    // get investor max investment = investment from revolution 1
    (uint maxInvestment, ) = pe.rev1Storage.investorShortInfo(investorAddr);
    if (maxInvestment == 0) {
      return 0;
    }
    maxInvestment = Math.min(maxInvestment, pe.investorMaxInvestment);

    // get current investment from revolution 2
    (uint currInvestment, ) = pe.rev2Storage.investorInfo(investorAddr);
    
    if (currInvestment >= maxInvestment) {
      return 0;
    }

    return maxInvestment-currInvestment;
  }

  function provideAccessFor(privateEntrance storage pe, address[] addrs) internal {
    for (uint16 i; i < addrs.length; i++) {
      pe.hasAccess[addrs[i]] = true;
    }
  }
}


contract InvestorsStorage is Accessibility {
  struct Investor {
    uint investment;
    uint paymentTime;
  }
  uint public size;

  mapping (address => Investor) private investors;

  function isInvestor(address addr) public view returns (bool) {
    return investors[addr].investment > 0;
  }

  function investorInfo(address addr) public view returns(uint investment, uint paymentTime) {
    investment = investors[addr].investment;
    paymentTime = investors[addr].paymentTime;
  }

  function newInvestor(address addr, uint investment, uint paymentTime) public onlyOwner returns (bool) {
    Investor storage inv = investors[addr];
    if (inv.investment != 0 || investment == 0) {
      return false;
    }
    inv.investment = investment;
    inv.paymentTime = paymentTime;
    size++;
    return true;
  }

  function addInvestment(address addr, uint investment) public onlyOwner returns (bool) {
    if (investors[addr].investment == 0) {
      return false;
    }
    investors[addr].investment += investment;
    return true;
  }

  function setPaymentTime(address addr, uint paymentTime) public onlyOwner returns (bool) {
    if (investors[addr].investment == 0) {
      return false;
    }
    investors[addr].paymentTime = paymentTime;
    return true;
  }
}


library RapidGrowthProtection {
  using RapidGrowthProtection for rapidGrowthProtection;
  
  struct rapidGrowthProtection {
    uint startTimestamp;
    uint maxDailyTotalInvestment;
    uint8 activityDays;
    mapping(uint8 => uint) dailyTotalInvestment;
  }

  function maxInvestmentAtNow(rapidGrowthProtection storage rgp) internal view returns(uint) {
    uint day = rgp.currDay();
    if (day == 0 || day > rgp.activityDays) {
      return 0;
    }
    if (rgp.dailyTotalInvestment[uint8(day)] >= rgp.maxDailyTotalInvestment) {
      return 0;
    }
    return rgp.maxDailyTotalInvestment - rgp.dailyTotalInvestment[uint8(day)];
  }

  function isActive(rapidGrowthProtection storage rgp) internal view returns(bool) {
    uint day = rgp.currDay();
    return day != 0 && day <= rgp.activityDays;
  }

  function saveInvestment(rapidGrowthProtection storage rgp, uint investment) internal returns(bool) {
    uint day = rgp.currDay();
    if (day == 0 || day > rgp.activityDays) {
      return false;
    }
    if (rgp.dailyTotalInvestment[uint8(day)] + investment > rgp.maxDailyTotalInvestment) {
      return false;
    }
    rgp.dailyTotalInvestment[uint8(day)] += investment;
    return true;
  }

  function startAt(rapidGrowthProtection storage rgp, uint timestamp) internal { 
    rgp.startTimestamp = timestamp;

    // restart
    for (uint8 i = 1; i <= rgp.activityDays; i++) {
      if (rgp.dailyTotalInvestment[i] != 0) {
        delete rgp.dailyTotalInvestment[i];
      }
    }
  }

  function currDay(rapidGrowthProtection storage rgp) internal view returns(uint day) {
    if (rgp.startTimestamp > now) {
      return 0;
    }
    day = (now - rgp.startTimestamp) / 24 hours + 1; // +1 for skip zero day
  }
}








contract Fortune is Accessibility {
  using RapidGrowthProtection for RapidGrowthProtection.rapidGrowthProtection;
  using PrivateEntrance for PrivateEntrance.privateEntrance;
  using Percent for Percent.percent;
  using SafeMath for uint;
  using Math for uint;

  // easy read for investors
  using Address for *;
  using Zero for *; 
  
  RapidGrowthProtection.rapidGrowthProtection private m_rgp;
  PrivateEntrance.privateEntrance private m_privEnter;
  mapping(address => bool) private m_referrals;
  InvestorsStorage private m_investors;

  // automatically generates getters
  uint public constant minInvesment = 10 finney; //       0.01 eth
  uint public constant maxBalance = 333e5 ether; // 33 300 000 eth
  address public advertisingAddress;
  address public adminsAddress;
  uint public investmentsNumber;
  uint public waveStartup;

  // percents 
  Percent.percent private m_1_percent = Percent.percent(1, 100);           //   1/100  *100% = 1%
  Percent.percent private m_2_percent = Percent.percent(2, 100);           //   2/100  *100% = 2%
  Percent.percent private m_3_33_percent = Percent.percent(333, 10000);    // 333/10000*100% = 3.33%
  Percent.percent private m_adminsPercent = Percent.percent(5, 100);       //   5/100  *100% = 5%
  Percent.percent private m_advertisingPercent = Percent.percent(75, 1000);// 75/1000  *100% = 7.5%

  // more events for easy read from blockchain
  event LogPEInit(uint when, address rev1Storage, address rev2Storage, uint investorMaxInvestment, uint endTimestamp);
  event LogSendExcessOfEther(address indexed addr, uint when, uint value, uint investment, uint excess);
  event LogNewReferral(address indexed addr, address indexed referrerAddr, uint when, uint refBonus);
  event LogRGPInit(uint when, uint startTimestamp, uint maxDailyTotalInvestment, uint activityDays);
  event LogRGPInvestment(address indexed addr, uint when, uint investment, uint indexed day);
  event LogNewInvesment(address indexed addr, uint when, uint investment, uint value);
  event LogAutomaticReinvest(address indexed addr, uint when, uint investment);
  event LogPayDividends(address indexed addr, uint when, uint dividends);
  event LogNewInvestor(address indexed addr, uint when);
  event LogBalanceChanged(uint when, uint balance);
  event LogNextWave(uint when);
  event LogDisown(uint when);


  modifier balanceChanged {
    _;
    emit LogBalanceChanged(now, address(this).balance);
  }

  modifier notFromContract() {
    require(msg.sender.isNotContract(), "only externally accounts");
    _;
  }

  constructor() public {
    adminsAddress = msg.sender;
    advertisingAddress = msg.sender;
    nextWave();
  }

  function() public payable {
    // investor get him dividends
    if (msg.value.isZero()) {
      getMyDividends();
      return;
    }

    // sender do invest
    doInvest(msg.data.toAddress());
  }

  function doDisown() public onlyOwner {
    disown();
    emit LogDisown(now);
  }

  function init(address rev1StorageAddr, uint timestamp) public onlyOwner {
    // init Rapid Growth Protection
    m_rgp.startTimestamp = timestamp + 1;
    m_rgp.maxDailyTotalInvestment = 500 ether;
    m_rgp.activityDays = 21;
    emit LogRGPInit(
      now, 
      m_rgp.startTimestamp,
      m_rgp.maxDailyTotalInvestment,
      m_rgp.activityDays
    );


    // init Private Entrance
    m_privEnter.rev1Storage = Rev1Storage(rev1StorageAddr);
    m_privEnter.rev2Storage = Rev2Storage(address(m_investors));
    m_privEnter.investorMaxInvestment = 50 ether;
    m_privEnter.endTimestamp = timestamp;
    emit LogPEInit(
      now, 
      address(m_privEnter.rev1Storage), 
      address(m_privEnter.rev2Storage), 
      m_privEnter.investorMaxInvestment, 
      m_privEnter.endTimestamp
    );
  }

  function setAdvertisingAddress(address addr) public onlyOwner {
    addr.requireNotZero();
    advertisingAddress = addr;
  }

  function setAdminsAddress(address addr) public onlyOwner {
    addr.requireNotZero();
    adminsAddress = addr;
  }

  function privateEntranceProvideAccessFor(address[] addrs) public onlyOwner {
    m_privEnter.provideAccessFor(addrs);
  }

  function rapidGrowthProtectionmMaxInvestmentAtNow() public view returns(uint investment) {
    investment = m_rgp.maxInvestmentAtNow();
  }

  function investorsNumber() public view returns(uint) {
    return m_investors.size();
  }

  function balanceETH() public view returns(uint) {
    return address(this).balance;
  }

  function percent1() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_1_percent.num, m_1_percent.den);
  }

  function percent2() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_2_percent.num, m_2_percent.den);
  }

  function percent3_33() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_3_33_percent.num, m_3_33_percent.den);
  }

  function advertisingPercent() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_advertisingPercent.num, m_advertisingPercent.den);
  }

  function adminsPercent() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_adminsPercent.num, m_adminsPercent.den);
  }

  function investorInfo(address investorAddr) public view returns(uint investment, uint paymentTime, bool isReferral) {
    (investment, paymentTime) = m_investors.investorInfo(investorAddr);
    isReferral = m_referrals[investorAddr];
  }

  function investorDividendsAtNow(address investorAddr) public view returns(uint dividends) {
    dividends = calcDividends(investorAddr);
  }

  function dailyPercentAtNow() public view returns(uint numerator, uint denominator) {
    Percent.percent memory p = dailyPercent();
    (numerator, denominator) = (p.num, p.den);
  }

  function refBonusPercentAtNow() public view returns(uint numerator, uint denominator) {
    Percent.percent memory p = refBonusPercent();
    (numerator, denominator) = (p.num, p.den);
  }

  function getMyDividends() public notFromContract balanceChanged {
    // calculate dividends
    uint dividends = calcDividends(msg.sender);
    require (dividends.notZero(), "cannot to pay zero dividends");

    // update investor payment timestamp
    assert(m_investors.setPaymentTime(msg.sender, now));

    // check enough eth - goto next wave if needed
    if (address(this).balance <= dividends) {
      nextWave();
      dividends = address(this).balance;
    } 

    // transfer dividends to investor
    msg.sender.transfer(dividends);
    emit LogPayDividends(msg.sender, now, dividends);
  }

  function doInvest(address referrerAddr) public payable notFromContract balanceChanged {
    uint investment = msg.value;
    uint receivedEther = msg.value;
    require(investment >= minInvesment, "investment must be >= minInvesment");
    require(address(this).balance <= maxBalance, "the contract eth balance limit");

    if (m_rgp.isActive()) { 
      // use Rapid Growth Protection if needed
      uint rpgMaxInvest = m_rgp.maxInvestmentAtNow();
      rpgMaxInvest.requireNotZero();
      investment = Math.min(investment, rpgMaxInvest);
      assert(m_rgp.saveInvestment(investment));
      emit LogRGPInvestment(msg.sender, now, investment, m_rgp.currDay());
      
    } else if (m_privEnter.isActive()) {
      // use Private Entrance if needed
      uint peMaxInvest = m_privEnter.maxInvestmentFor(msg.sender);
      peMaxInvest.requireNotZero();
      investment = Math.min(investment, peMaxInvest);
    }

    // send excess of ether if needed
    if (receivedEther > investment) {
      uint excess = receivedEther - investment;
      msg.sender.transfer(excess);
      receivedEther = investment;
      emit LogSendExcessOfEther(msg.sender, now, msg.value, investment, excess);
    }

    // commission
    advertisingAddress.transfer(m_advertisingPercent.mul(receivedEther));
    adminsAddress.transfer(m_adminsPercent.mul(receivedEther));

    bool senderIsInvestor = m_investors.isInvestor(msg.sender);

    // ref system works only once and only on first invest
    if (referrerAddr.notZero() && !senderIsInvestor && !m_referrals[msg.sender] &&
      referrerAddr != msg.sender && m_investors.isInvestor(referrerAddr)) {
      
      m_referrals[msg.sender] = true;
      // add referral bonus to investor`s and referral`s investments
      uint refBonus = refBonusPercent().mmul(investment);
      assert(m_investors.addInvestment(referrerAddr, refBonus)); // add referrer bonus
      investment += refBonus;                                    // add referral bonus
      emit LogNewReferral(msg.sender, referrerAddr, now, refBonus);
    }

    // automatic reinvest - prevent burning dividends
    uint dividends = calcDividends(msg.sender);
    if (senderIsInvestor && dividends.notZero()) {
      investment += dividends;
      emit LogAutomaticReinvest(msg.sender, now, dividends);
    }

    if (senderIsInvestor) {
      // update existing investor
      assert(m_investors.addInvestment(msg.sender, investment));
      assert(m_investors.setPaymentTime(msg.sender, now));
    } else {
      // create new investor
      assert(m_investors.newInvestor(msg.sender, investment, now));
      emit LogNewInvestor(msg.sender, now);
    }

    investmentsNumber++;
    emit LogNewInvesment(msg.sender, now, investment, receivedEther);
  }

  function getMemInvestor(address investorAddr) internal view returns(InvestorsStorage.Investor memory) {
    (uint investment, uint paymentTime) = m_investors.investorInfo(investorAddr);
    return InvestorsStorage.Investor(investment, paymentTime);
  }

  function calcDividends(address investorAddr) internal view returns(uint dividends) {
    InvestorsStorage.Investor memory investor = getMemInvestor(investorAddr);

    // safe gas if dividends will be 0
    if (investor.investment.isZero() || now.sub(investor.paymentTime) < 10 minutes) {
      return 0;
    }
    
    // for prevent burning daily dividends if 24h did not pass - calculate it per 10 min interval
    // if daily percent is X, then 10min percent = X / (24h / 10 min) = X / 144

    // and we must to get numbers of 10 min interval after investor got payment:
    // (now - investor.paymentTime) / 10min 

    // finaly calculate dividends = ((now - investor.paymentTime) / 10min) * (X * investor.investment)  / 144) 

    Percent.percent memory p = dailyPercent();
    dividends = (now.sub(investor.paymentTime) / 10 minutes) * p.mmul(investor.investment) / 144;
  }

  function dailyPercent() internal view returns(Percent.percent memory p) {
    uint balance = address(this).balance;

    // (3) 3.33% if balance < 1 000 ETH
    // (2) 2% if 1 000 ETH <= balance <= 33 333 ETH
    // (1) 1% if 33 333 ETH < balance

    if (balance < 1000 ether) { 
      p = m_3_33_percent.toMemory(); // (3)
    } else if ( 1000 ether <= balance && balance <= 33333 ether) {
      p = m_2_percent.toMemory();    // (2)
    } else {
      p = m_1_percent.toMemory();    // (1)
    }
  }

  function refBonusPercent() internal view returns(Percent.percent memory p) {
    uint balance = address(this).balance;

    // (1) 1% if 100 000 ETH < balance
    // (2) 2% if 10 000 ETH <= balance <= 100 000 ETH
    // (3) 3.33% if balance < 10 000 ETH   
    
    if (balance < 10000 ether) { 
      p = m_3_33_percent.toMemory(); // (3)
    } else if ( 10000 ether <= balance && balance <= 100000 ether) {
      p = m_2_percent.toMemory();    // (2)
    } else {
      p = m_1_percent.toMemory();    // (1)
    }          
  }

  function nextWave() private {
    m_investors = new InvestorsStorage();
    investmentsNumber = 0;
    waveStartup = now;
    m_rgp.startAt(now);
    emit LogRGPInit(now , m_rgp.startTimestamp, m_rgp.maxDailyTotalInvestment, m_rgp.activityDays);
    emit LogNextWave(now);
  }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"addrs","type":"address[]"}],"name":"privateEntranceProvideAccessFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"percent2","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"advertisingAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refBonusPercentAtNow","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"rev1StorageAddr","type":"address"},{"name":"timestamp","type":"uint256"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minInvesment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adminsAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"investorsNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"percent1","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"investorAddr","type":"address"}],"name":"investorDividendsAtNow","outputs":[{"name":"dividends","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rapidGrowthProtectionmMaxInvestmentAtNow","outputs":[{"name":"investment","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"advertisingPercent","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adminsPercent","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setAdminsAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"investmentsNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"percent3_33","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dailyPercentAtNow","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setAdvertisingAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getMyDividends","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"referrerAddr","type":"address"}],"name":"doInvest","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"investorAddr","type":"address"}],"name":"investorInfo","outputs":[{"name":"investment","type":"uint256"},{"name":"paymentTime","type":"uint256"},{"name":"isReferral","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"waveStartup","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceETH","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"doDisown","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"rev1Storage","type":"address"},{"indexed":false,"name":"rev2Storage","type":"address"},{"indexed":false,"name":"investorMaxInvestment","type":"uint256"},{"indexed":false,"name":"endTimestamp","type":"uint256"}],"name":"LogPEInit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"investment","type":"uint256"},{"indexed":false,"name":"excess","type":"uint256"}],"name":"LogSendExcessOfEther","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":true,"name":"referrerAddr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"refBonus","type":"uint256"}],"name":"LogNewReferral","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"startTimestamp","type":"uint256"},{"indexed":false,"name":"maxDailyTotalInvestment","type":"uint256"},{"indexed":false,"name":"activityDays","type":"uint256"}],"name":"LogRGPInit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"investment","type":"uint256"},{"indexed":true,"name":"day","type":"uint256"}],"name":"LogRGPInvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"investment","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"LogNewInvesment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"investment","type":"uint256"}],"name":"LogAutomaticReinvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"dividends","type":"uint256"}],"name":"LogPayDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"}],"name":"LogNewInvestor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"LogBalanceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"}],"name":"LogNextWave","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"}],"name":"LogDisown","type":"event"}]

60016080819052606460a08190526010919091556011819055600260c081905260e0829052601255601381905561014d61010081905261271061012081905260149190915560155560056101408190526101608290526016556017556101c0604052604b6101808190526103e86101a08190526018919091556019553480156200008857600080fd5b506000805433600160a060020a03199182168117909255600d8054821683179055600c80549091169091179055620000c8640100000000620000ce810204565b6200022d565b620000d86200021c565b604051809103906000f080158015620000f5573d6000803e3d6000fd5b50600b8054600160a060020a031916600160a060020a03929092169190911790556000600e5542600f8190556200013d90600190640100000000620001c4810262001d5c1704565b6001546002546003546040805142815260208101949094528381019290925260ff166060830152517f16171a4e996b33ebb6320397242a4168f60c16e87fbd8b58f1744d68c4179caf9181900360800190a16040805142815290517fc66870ef5f6257a76295d443e9221488043ec691f830f6c6128755c3518e3c759181900360200190a1565b80825560015b600283015460ff90811690821611620002175760ff81166000908152600384016020526040902054156200020e5760ff811660009081526003840160205260408120555b600101620001ca565b505050565b60405161047480620024f583390190565b6122b8806200023d6000396000f3006080604052600436106101485763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306127a1181146101a7578063074a1600146101fc5780631686531a1461022a578063341bae0e1461025b578063399ae724146102705780633d7ac9f81461029457806362d2c555146102bb578063653c3174146102d057806368f6e75f146102e557806373ad468a146102fa578063900334b11461030f57806390b0636f146103305780639396df321461034557806395a23c3a1461035a578063984d4a931461036f5780639ec6e05414610390578063b7c1a119146103a5578063b8fde2a4146103ba578063cb192f2c146103cf578063d50030ad146103f0578063d82fa3f114610405578063dbcbaca414610419578063eafecc7a1461045a578063ecbdbb321461046f578063fc7c41af14610484575b61015134610499565b156101635761015e6104a1565b6101a5565b6101a56101a06000368080601f016020809104026020016040519081016040528093929190818152602001838380828437506106c6945050505050565b6106cd565b005b3480156101b357600080fd5b50604080516020600480358082013583810280860185019096528085526101a595369593946024949385019291829185019084908082843750949750610fca9650505050505050565b34801561020857600080fd5b5061021161102e565b6040805192835260208301919091528051918290030190f35b34801561023657600080fd5b5061023f611038565b60408051600160a060020a039092168252519081900360200190f35b34801561026757600080fd5b50610211611047565b34801561027c57600080fd5b506101a5600160a060020a036004351660243561106c565b3480156102a057600080fd5b506102a96111d1565b60408051918252519081900360200190f35b3480156102c757600080fd5b5061023f6111dc565b3480156102dc57600080fd5b506102a96111eb565b3480156102f157600080fd5b5061021161127b565b34801561030657600080fd5b506102a9611285565b34801561031b57600080fd5b506102a9600160a060020a0360043516611294565b34801561033c57600080fd5b506102a96112a5565b34801561035157600080fd5b506102116112b6565b34801561036657600080fd5b506102116112c0565b34801561037b57600080fd5b506101a5600160a060020a03600435166112ca565b34801561039c57600080fd5b506102a961135b565b3480156103b157600080fd5b50610211611361565b3480156103c657600080fd5b5061021161136b565b3480156103db57600080fd5b506101a5600160a060020a036004351661137e565b3480156103fc57600080fd5b506101a56104a1565b6101a5600160a060020a03600435166106cd565b34801561042557600080fd5b5061043a600160a060020a036004351661140f565b604080519384526020840192909252151582820152519081900360600190f35b34801561046657600080fd5b506102a96114d5565b34801561047b57600080fd5b506102a96114db565b34801561049057600080fd5b506101a56114e0565b80155b919050565b60006104ac3361156d565b1515610502576040805160e560020a62461bcd02815260206004820152601860248201527f6f6e6c792065787465726e616c6c79206163636f756e74730000000000000000604482015290519081900360640190fd5b61050b33611579565b90506105168161162d565b151561056c576040805160e560020a62461bcd02815260206004820152601c60248201527f63616e6e6f7420746f20706179207a65726f206469766964656e647300000000604482015290519081900360640190fd5b600b54604080517f440135850000000000000000000000000000000000000000000000000000000081523360048201524260248201529051600160a060020a03909216916344013585916044808201926020929091908290030181600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506040513d602081101561060257600080fd5b5051151561060c57fe5b303181106106205761061c611632565b5030315b604051339082156108fc029083906000818181858888f1935050505015801561064d573d6000803e3d6000fd5b506040805142815260208101839052815133927f6710e0cad56444677ac916513b384a4acc6501cfb5219f59657ad4ddffef9d60928290030190a2604080514281523031602082015281517f32367fddaa1baa1c6a0fc5c3e8284df724bacc7b50e847c32c9f9765f9f96137929181900390910190a150565b6014015190565b6000808080808080806106df3361156d565b1515610735576040805160e560020a62461bcd02815260206004820152601860248201527f6f6e6c792065787465726e616c6c79206163636f756e74730000000000000000604482015290519081900360640190fd5b349750879650662386f26fc100008710156107c0576040805160e560020a62461bcd02815260206004820152602260248201527f696e766573746d656e74206d757374206265203e3d206d696e496e7665736d6560448201527f6e74000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6a1b8b8c9e000e82a480000030311115610824576040805160e560020a62461bcd02815260206004820152601e60248201527f74686520636f6e7472616374206574682062616c616e6365206c696d69740000604482015290519081900360640190fd5b61082e6001611722565b156108b65761083d600161174d565b9550610848866117c7565b610852888761181e565b975061086560018963ffffffff61183616565b151561086d57fe5b61087760016118b6565b60408051428152602081018b9052815133927f21cd51cc98547f9914bc0b314a40e645408acad21d1289eecb4dfb534fda7cfc928290030190a36108ee565b6108c060056118e0565b156108ee576108d660053363ffffffff6118e916565b94506108e1856117c7565b6108eb888661181e565b97505b87871115610976576040518888039450339085156108fc029086906000818181858888f19350505050158015610928573d6000803e3d6000fd5b50604080514281523460208201528082018a905260608101869052905189985033917faac472d912a7451062b64c942775db41d65cce271603099e1c4760e072050951919081900360800190a25b600c54600160a060020a03166108fc61099660188a63ffffffff611a7e16565b6040518115909202916000818181858888f193505050501580156109be573d6000803e3d6000fd5b50600d54600160a060020a03166108fc6109df60168a63ffffffff611a7e16565b6040518115909202916000818181858888f19350505050158015610a07573d6000803e3d6000fd5b50600b54604080517fcee2a9cf0000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163cee2a9cf916024808201926020929091908290030181600087803b158015610a6e57600080fd5b505af1158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50519250610aae600160a060020a038a16611aa9565b8015610ab8575082155b8015610ad45750336000908152600a602052604090205460ff16155b8015610ae95750600160a060020a0389163314155b8015610b855750600b54604080517fcee2a9cf000000000000000000000000000000000000000000000000000000008152600160a060020a038c811660048301529151919092169163cee2a9cf9160248083019260209291908290030181600087803b158015610b5857600080fd5b505af1158015610b6c573d6000803e3d6000fd5b505050506040513d6020811015610b8257600080fd5b50515b15610cae57336000908152600a60205260409020805460ff19166001179055610bbc88610bb0611ab7565b9063ffffffff611b2816565b600b54604080517f20987e64000000000000000000000000000000000000000000000000000000008152600160a060020a038d811660048301526024820185905291519395509116916320987e64916044808201926020929091908290030181600087803b158015610c2d57600080fd5b505af1158015610c41573d6000803e3d6000fd5b505050506040513d6020811015610c5757600080fd5b50511515610c6157fe5b6040805142815260208101849052815199840199600160a060020a038c169233927fc04fb14bddd876003a335c37b1fe6524ac1dbf74eb64dd08cd085fba4b97d592929081900390910190a35b610cb733611579565b9050828015610cca5750610cca8161162d565b15610d0e57604080514281526020810183905281519983019933927f149822e3a65d38c9b6f40e835864c61ef5ca0866219afc2db638e3f85ae78866928290030190a25b8215610e5a57600b54604080517f20987e64000000000000000000000000000000000000000000000000000000008152336004820152602481018b90529051600160a060020a03909216916320987e64916044808201926020929091908290030181600087803b158015610d8157600080fd5b505af1158015610d95573d6000803e3d6000fd5b505050506040513d6020811015610dab57600080fd5b50511515610db557fe5b600b54604080517f440135850000000000000000000000000000000000000000000000000000000081523360048201524260248201529051600160a060020a03909216916344013585916044808201926020929091908290030181600087803b158015610e2157600080fd5b505af1158015610e35573d6000803e3d6000fd5b505050506040513d6020811015610e4b57600080fd5b50511515610e5557fe5b610f38565b600b54604080517f41b2121c000000000000000000000000000000000000000000000000000000008152336004820152602481018b90524260448201529051600160a060020a03909216916341b2121c916064808201926020929091908290030181600087803b158015610ecd57600080fd5b505af1158015610ee1573d6000803e3d6000fd5b505050506040513d6020811015610ef757600080fd5b50511515610f0157fe5b60408051428152905133917fc8616cf56c542aa2540734215ee474180fc3b9cc7c2fad288000504632cacf18919081900360200190a25b600e8054600101905560408051428152602081018a9052808201899052905133917fd5a986028ae9e04f72859f7d3c1d8ae8b649c26be5b99d4c2d98ca4a19a0502e919081900360600190a2604080514281523031602082015281517f32367fddaa1baa1c6a0fc5c3e8284df724bacc7b50e847c32c9f9765f9f96137929181900390910190a1505050505050505050565b600054600160a060020a0316331461101a576040805160e560020a62461bcd02815260206004820152600d602482015260008051602061226d833981519152604482015290519081900360640190fd5b61102b60058263ffffffff611b4b16565b50565b6012546013549091565b600c54600160a060020a031681565b600080611052611dd1565b61105a611ab7565b80516020909101519094909350915050565b600054600160a060020a031633146110bc576040805160e560020a62461bcd02815260206004820152600d602482015260008051602061226d833981519152604482015290519081900360640190fd5b600180820190819055681b1ae4d6e2ef50000060028190556003805460ff1916601517908190556040805142815260208101949094528381019290925260ff166060830152517f16171a4e996b33ebb6320397242a4168f60c16e87fbd8b58f1744d68c4179caf9181900360800190a160058054600160a060020a0380851673ffffffffffffffffffffffffffffffffffffffff199283161792839055600b546006805490931690821617918290556802b5e3af16b1880000600781905560088590556040805142815294831660208601529290911683830152606083015260808201839052517f7e13d111fea1199cb6fb21cb38766240cfad970317820e8e5713da7a708285309181900360a00190a15050565b662386f26fc1000081565b600d54600160a060020a031681565b600b54604080517f949d225d0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163949d225d91600480830192602092919082900301818787803b15801561124a57600080fd5b505af115801561125e573d6000803e3d6000fd5b505050506040513d602081101561127457600080fd5b5051905090565b6010546011549091565b6a1b8b8c9e000e82a480000081565b600061129f82611579565b92915050565b60006112b1600161174d565b905090565b6018546019549091565b6016546017549091565b600054600160a060020a0316331461131a576040805160e560020a62461bcd02815260206004820152600d602482015260008051602061226d833981519152604482015290519081900360640190fd5b61132c81600160a060020a0316611bb4565b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600e5481565b6014546015549091565b600080611376611dd1565b61105a611c14565b600054600160a060020a031633146113ce576040805160e560020a62461bcd02815260206004820152600d602482015260008051602061226d833981519152604482015290519081900360640190fd5b6113e081600160a060020a0316611bb4565b600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600b54604080517fdbcbaca4000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152825160009485948594939091169263dbcbaca4926024808301939282900301818787803b15801561147957600080fd5b505af115801561148d573d6000803e3d6000fd5b505050506040513d60408110156114a357600080fd5b508051602091820151600160a060020a039096166000908152600a909252604090912054909560ff9091169350915050565b600f5481565b303190565b600054600160a060020a03163314611530576040805160e560020a62461bcd02815260206004820152600d602482015260008051602061226d833981519152604482015290519081900360640190fd5b611538611c68565b6040805142815290517f5189687a7ec9d4aebe2f548f952ffbbad19e4cd545c4a05b5e2369cd272dd5519181900360200190a1565b803b8015905b50919050565b6000611583611dd1565b61158b611dd1565b61159484611c87565b91506115a38260000151610499565b806115c557506102586115c3836020015142611d4590919063ffffffff16565b105b156115d35760009250611626565b6115db611c14565b82519091506090906115f490839063ffffffff611b2816565b61025861160e856020015142611d4590919063ffffffff16565b81151561161757fe5b040281151561162257fe5b0492505b5050919050565b151590565b61163a611de8565b604051809103906000f080158015611656573d6000803e3d6000fd5b50600b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556000600e5542600f81905561169b90600190611d5c565b6001546002546003546040805142815260208101949094528381019290925260ff166060830152517f16171a4e996b33ebb6320397242a4168f60c16e87fbd8b58f1744d68c4179caf9181900360800190a16040805142815290517fc66870ef5f6257a76295d443e9221488043ec691f830f6c6128755c3518e3c759181900360200190a1565b60008061172e836118b6565b905080158015906117465750600283015460ff168111155b9392505050565b600080611759836118b6565b905080158061176e5750600283015460ff1681115b1561177c5760009150611573565b600183015460ff82166000908152600385016020526040902054106117a45760009150611573565b60ff81166000908152600384016020526040902054600184015403915050919050565b80151561102b576040805160e560020a62461bcd02815260206004820152601660248201527f72657175697265206e6f74207a65726f2076616c756500000000000000000000604482015290519081900360640190fd5b60008183111561182f57508061129f565b5090919050565b600080611842846118b6565b90508015806118575750600284015460ff1681115b1561186557600091506118af565b600184015460ff821660009081526003860160205260409020548401111561189057600091506118af565b60ff811660009081526003850160205260409020805484019055600191505b5092915050565b600042826000015411156118cc5750600061049c565b815462015180904203046001019050919050565b60030154421090565b600160a060020a03811660009081526004830160205260408120548190819060ff16151561191a5760009250611a76565b8454604080517f993d3489000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152825193169263993d3489926024808401939192918290030181600087803b15801561197d57600080fd5b505af1158015611991573d6000803e3d6000fd5b505050506040513d60408110156119a757600080fd5b505191508115156119bb5760009250611a76565b6119c982866002015461181e565b6001860154604080517fdbcbaca4000000000000000000000000000000000000000000000000000000008152600160a060020a03888116600483015282519496509092169263dbcbaca49260248082019392918290030181600087803b158015611a3257600080fd5b505af1158015611a46573d6000803e3d6000fd5b505050506040513d6040811015611a5c57600080fd5b50519050818110611a705760009250611a76565b80820392505b505092915050565b6000811515611a8f5750600061129f565b600183015483548302811515611aa157fe5b049392505050565b600160a060020a0316151590565b611abf611dd1565b303169021e19e0c9bab2400000811015611ae457611add6014611dac565b9150611b24565b8069021e19e0c9bab240000011158015611b08575069152d02c7e14af68000008111155b15611b1757611add6012611dac565b611b216010611dac565b91505b5090565b6000811515611b395750600061129f565b602083015183518302811515611aa157fe5b60005b81518161ffff161015611baf576001836004016000848461ffff16815181101515611b7557fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff1916911515919091179055600101611b4e565b505050565b600160a060020a038116151561102b576040805160e560020a62461bcd02815260206004820152601860248201527f72657175697265206e6f74207a65726f20616464726573730000000000000000604482015290519081900360640190fd5b611c1c611dd1565b3031683635c9adc5dea00000811015611c3957611add6014611dac565b80683635c9adc5dea0000011158015611b08575069070efc4d0e326fb400008111611b1757611add6012611dac565b6000805473ffffffffffffffffffffffffffffffffffffffff19169055565b611c8f611dd1565b600b54604080517fdbcbaca4000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528251600094859492169263dbcbaca492602480830193919282900301818787803b158015611cf657600080fd5b505af1158015611d0a573d6000803e3d6000fd5b505050506040513d6040811015611d2057600080fd5b5080516020918201516040805180820190915291825291810191909152949350505050565b60008083831115611d5557600080fd5b5050900390565b80825560015b600283015460ff90811690821611611baf5760ff8116600090815260038401602052604090205415611da45760ff811660009081526003840160205260408120555b600101611d62565b611db4611dd1565b506040805180820190915281548152600190910154602082015290565b604080518082019091526000808252602082015290565b60405161047480611df9833901905600608060405260008054600160a060020a0319163317905561044f806100256000396000f3006080604052600436106100775763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166320987e64811461007c57806341b2121c146100b457806344013585146100db578063949d225d146100ff578063cee2a9cf14610126578063dbcbaca414610147575b600080fd5b34801561008857600080fd5b506100a0600160a060020a0360043516602435610181565b604080519115158252519081900360200190f35b3480156100c057600080fd5b506100a0600160a060020a036004351660243560443561024a565b3480156100e757600080fd5b506100a0600160a060020a0360043516602435610316565b34801561010b57600080fd5b506101146103de565b60408051918252519081900360200190f35b34801561013257600080fd5b506100a0600160a060020a03600435166103e4565b34801561015357600080fd5b50610168600160a060020a0360043516610400565b6040805192835260208301919091528051918290030190f35b60008054600160a060020a031633146101fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6163636573732064656e69656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038316600090815260026020526040902054151561022257506000610244565b50600160a060020a038216600090815260026020526040902080548201905560015b92915050565b600080548190600160a060020a031633146102c657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6163636573732064656e69656400000000000000000000000000000000000000604482015290519081900360640190fd5b50600160a060020a038416600090815260026020526040902080541515806102ec575083155b156102fa576000915061030e565b838155600180820184905580548101815591505b509392505050565b60008054600160a060020a0316331461039057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6163636573732064656e69656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03831660009081526002602052604090205415156103b757506000610244565b50600160a060020a0382166000908152600260205260409020600190810182905592915050565b60015481565b600160a060020a03166000908152600260205260408120541190565b600160a060020a03166000908152600260205260409020805460019091015490915600a165627a7a72305820233221f3ef5e6019774acf7e816ddc22fa8dbe0898388f0c3de7c7e9693adb7b00296163636573732064656e69656400000000000000000000000000000000000000a165627a7a72305820a99a410438dfb957460d8507b8449e419fdd01f926ef722909a90c1e53cabd960029608060405260008054600160a060020a0319163317905561044f806100256000396000f3006080604052600436106100775763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166320987e64811461007c57806341b2121c146100b457806344013585146100db578063949d225d146100ff578063cee2a9cf14610126578063dbcbaca414610147575b600080fd5b34801561008857600080fd5b506100a0600160a060020a0360043516602435610181565b604080519115158252519081900360200190f35b3480156100c057600080fd5b506100a0600160a060020a036004351660243560443561024a565b3480156100e757600080fd5b506100a0600160a060020a0360043516602435610316565b34801561010b57600080fd5b506101146103de565b60408051918252519081900360200190f35b34801561013257600080fd5b506100a0600160a060020a03600435166103e4565b34801561015357600080fd5b50610168600160a060020a0360043516610400565b6040805192835260208301919091528051918290030190f35b60008054600160a060020a031633146101fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6163636573732064656e69656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038316600090815260026020526040902054151561022257506000610244565b50600160a060020a038216600090815260026020526040902080548201905560015b92915050565b600080548190600160a060020a031633146102c657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6163636573732064656e69656400000000000000000000000000000000000000604482015290519081900360640190fd5b50600160a060020a038416600090815260026020526040902080541515806102ec575083155b156102fa576000915061030e565b838155600180820184905580548101815591505b509392505050565b60008054600160a060020a0316331461039057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6163636573732064656e69656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03831660009081526002602052604090205415156103b757506000610244565b50600160a060020a0382166000908152600260205260409020600190810182905592915050565b60015481565b600160a060020a03166000908152600260205260408120541190565b600160a060020a03166000908152600260205260409020805460019091015490915600a165627a7a72305820233221f3ef5e6019774acf7e816ddc22fa8dbe0898388f0c3de7c7e9693adb7b0029

Deployed Bytecode

0x6080604052600436106101485763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306127a1181146101a7578063074a1600146101fc5780631686531a1461022a578063341bae0e1461025b578063399ae724146102705780633d7ac9f81461029457806362d2c555146102bb578063653c3174146102d057806368f6e75f146102e557806373ad468a146102fa578063900334b11461030f57806390b0636f146103305780639396df321461034557806395a23c3a1461035a578063984d4a931461036f5780639ec6e05414610390578063b7c1a119146103a5578063b8fde2a4146103ba578063cb192f2c146103cf578063d50030ad146103f0578063d82fa3f114610405578063dbcbaca414610419578063eafecc7a1461045a578063ecbdbb321461046f578063fc7c41af14610484575b61015134610499565b156101635761015e6104a1565b6101a5565b6101a56101a06000368080601f016020809104026020016040519081016040528093929190818152602001838380828437506106c6945050505050565b6106cd565b005b3480156101b357600080fd5b50604080516020600480358082013583810280860185019096528085526101a595369593946024949385019291829185019084908082843750949750610fca9650505050505050565b34801561020857600080fd5b5061021161102e565b6040805192835260208301919091528051918290030190f35b34801561023657600080fd5b5061023f611038565b60408051600160a060020a039092168252519081900360200190f35b34801561026757600080fd5b50610211611047565b34801561027c57600080fd5b506101a5600160a060020a036004351660243561106c565b3480156102a057600080fd5b506102a96111d1565b60408051918252519081900360200190f35b3480156102c757600080fd5b5061023f6111dc565b3480156102dc57600080fd5b506102a96111eb565b3480156102f157600080fd5b5061021161127b565b34801561030657600080fd5b506102a9611285565b34801561031b57600080fd5b506102a9600160a060020a0360043516611294565b34801561033c57600080fd5b506102a96112a5565b34801561035157600080fd5b506102116112b6565b34801561036657600080fd5b506102116112c0565b34801561037b57600080fd5b506101a5600160a060020a03600435166112ca565b34801561039c57600080fd5b506102a961135b565b3480156103b157600080fd5b50610211611361565b3480156103c657600080fd5b5061021161136b565b3480156103db57600080fd5b506101a5600160a060020a036004351661137e565b3480156103fc57600080fd5b506101a56104a1565b6101a5600160a060020a03600435166106cd565b34801561042557600080fd5b5061043a600160a060020a036004351661140f565b604080519384526020840192909252151582820152519081900360600190f35b34801561046657600080fd5b506102a96114d5565b34801561047b57600080fd5b506102a96114db565b34801561049057600080fd5b506101a56114e0565b80155b919050565b60006104ac3361156d565b1515610502576040805160e560020a62461bcd02815260206004820152601860248201527f6f6e6c792065787465726e616c6c79206163636f756e74730000000000000000604482015290519081900360640190fd5b61050b33611579565b90506105168161162d565b151561056c576040805160e560020a62461bcd02815260206004820152601c60248201527f63616e6e6f7420746f20706179207a65726f206469766964656e647300000000604482015290519081900360640190fd5b600b54604080517f440135850000000000000000000000000000000000000000000000000000000081523360048201524260248201529051600160a060020a03909216916344013585916044808201926020929091908290030181600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506040513d602081101561060257600080fd5b5051151561060c57fe5b303181106106205761061c611632565b5030315b604051339082156108fc029083906000818181858888f1935050505015801561064d573d6000803e3d6000fd5b506040805142815260208101839052815133927f6710e0cad56444677ac916513b384a4acc6501cfb5219f59657ad4ddffef9d60928290030190a2604080514281523031602082015281517f32367fddaa1baa1c6a0fc5c3e8284df724bacc7b50e847c32c9f9765f9f96137929181900390910190a150565b6014015190565b6000808080808080806106df3361156d565b1515610735576040805160e560020a62461bcd02815260206004820152601860248201527f6f6e6c792065787465726e616c6c79206163636f756e74730000000000000000604482015290519081900360640190fd5b349750879650662386f26fc100008710156107c0576040805160e560020a62461bcd02815260206004820152602260248201527f696e766573746d656e74206d757374206265203e3d206d696e496e7665736d6560448201527f6e74000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6a1b8b8c9e000e82a480000030311115610824576040805160e560020a62461bcd02815260206004820152601e60248201527f74686520636f6e7472616374206574682062616c616e6365206c696d69740000604482015290519081900360640190fd5b61082e6001611722565b156108b65761083d600161174d565b9550610848866117c7565b610852888761181e565b975061086560018963ffffffff61183616565b151561086d57fe5b61087760016118b6565b60408051428152602081018b9052815133927f21cd51cc98547f9914bc0b314a40e645408acad21d1289eecb4dfb534fda7cfc928290030190a36108ee565b6108c060056118e0565b156108ee576108d660053363ffffffff6118e916565b94506108e1856117c7565b6108eb888661181e565b97505b87871115610976576040518888039450339085156108fc029086906000818181858888f19350505050158015610928573d6000803e3d6000fd5b50604080514281523460208201528082018a905260608101869052905189985033917faac472d912a7451062b64c942775db41d65cce271603099e1c4760e072050951919081900360800190a25b600c54600160a060020a03166108fc61099660188a63ffffffff611a7e16565b6040518115909202916000818181858888f193505050501580156109be573d6000803e3d6000fd5b50600d54600160a060020a03166108fc6109df60168a63ffffffff611a7e16565b6040518115909202916000818181858888f19350505050158015610a07573d6000803e3d6000fd5b50600b54604080517fcee2a9cf0000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163cee2a9cf916024808201926020929091908290030181600087803b158015610a6e57600080fd5b505af1158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50519250610aae600160a060020a038a16611aa9565b8015610ab8575082155b8015610ad45750336000908152600a602052604090205460ff16155b8015610ae95750600160a060020a0389163314155b8015610b855750600b54604080517fcee2a9cf000000000000000000000000000000000000000000000000000000008152600160a060020a038c811660048301529151919092169163cee2a9cf9160248083019260209291908290030181600087803b158015610b5857600080fd5b505af1158015610b6c573d6000803e3d6000fd5b505050506040513d6020811015610b8257600080fd5b50515b15610cae57336000908152600a60205260409020805460ff19166001179055610bbc88610bb0611ab7565b9063ffffffff611b2816565b600b54604080517f20987e64000000000000000000000000000000000000000000000000000000008152600160a060020a038d811660048301526024820185905291519395509116916320987e64916044808201926020929091908290030181600087803b158015610c2d57600080fd5b505af1158015610c41573d6000803e3d6000fd5b505050506040513d6020811015610c5757600080fd5b50511515610c6157fe5b6040805142815260208101849052815199840199600160a060020a038c169233927fc04fb14bddd876003a335c37b1fe6524ac1dbf74eb64dd08cd085fba4b97d592929081900390910190a35b610cb733611579565b9050828015610cca5750610cca8161162d565b15610d0e57604080514281526020810183905281519983019933927f149822e3a65d38c9b6f40e835864c61ef5ca0866219afc2db638e3f85ae78866928290030190a25b8215610e5a57600b54604080517f20987e64000000000000000000000000000000000000000000000000000000008152336004820152602481018b90529051600160a060020a03909216916320987e64916044808201926020929091908290030181600087803b158015610d8157600080fd5b505af1158015610d95573d6000803e3d6000fd5b505050506040513d6020811015610dab57600080fd5b50511515610db557fe5b600b54604080517f440135850000000000000000000000000000000000000000000000000000000081523360048201524260248201529051600160a060020a03909216916344013585916044808201926020929091908290030181600087803b158015610e2157600080fd5b505af1158015610e35573d6000803e3d6000fd5b505050506040513d6020811015610e4b57600080fd5b50511515610e5557fe5b610f38565b600b54604080517f41b2121c000000000000000000000000000000000000000000000000000000008152336004820152602481018b90524260448201529051600160a060020a03909216916341b2121c916064808201926020929091908290030181600087803b158015610ecd57600080fd5b505af1158015610ee1573d6000803e3d6000fd5b505050506040513d6020811015610ef757600080fd5b50511515610f0157fe5b60408051428152905133917fc8616cf56c542aa2540734215ee474180fc3b9cc7c2fad288000504632cacf18919081900360200190a25b600e8054600101905560408051428152602081018a9052808201899052905133917fd5a986028ae9e04f72859f7d3c1d8ae8b649c26be5b99d4c2d98ca4a19a0502e919081900360600190a2604080514281523031602082015281517f32367fddaa1baa1c6a0fc5c3e8284df724bacc7b50e847c32c9f9765f9f96137929181900390910190a1505050505050505050565b600054600160a060020a0316331461101a576040805160e560020a62461bcd02815260206004820152600d602482015260008051602061226d833981519152604482015290519081900360640190fd5b61102b60058263ffffffff611b4b16565b50565b6012546013549091565b600c54600160a060020a031681565b600080611052611dd1565b61105a611ab7565b80516020909101519094909350915050565b600054600160a060020a031633146110bc576040805160e560020a62461bcd02815260206004820152600d602482015260008051602061226d833981519152604482015290519081900360640190fd5b600180820190819055681b1ae4d6e2ef50000060028190556003805460ff1916601517908190556040805142815260208101949094528381019290925260ff166060830152517f16171a4e996b33ebb6320397242a4168f60c16e87fbd8b58f1744d68c4179caf9181900360800190a160058054600160a060020a0380851673ffffffffffffffffffffffffffffffffffffffff199283161792839055600b546006805490931690821617918290556802b5e3af16b1880000600781905560088590556040805142815294831660208601529290911683830152606083015260808201839052517f7e13d111fea1199cb6fb21cb38766240cfad970317820e8e5713da7a708285309181900360a00190a15050565b662386f26fc1000081565b600d54600160a060020a031681565b600b54604080517f949d225d0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163949d225d91600480830192602092919082900301818787803b15801561124a57600080fd5b505af115801561125e573d6000803e3d6000fd5b505050506040513d602081101561127457600080fd5b5051905090565b6010546011549091565b6a1b8b8c9e000e82a480000081565b600061129f82611579565b92915050565b60006112b1600161174d565b905090565b6018546019549091565b6016546017549091565b600054600160a060020a0316331461131a576040805160e560020a62461bcd02815260206004820152600d602482015260008051602061226d833981519152604482015290519081900360640190fd5b61132c81600160a060020a0316611bb4565b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600e5481565b6014546015549091565b600080611376611dd1565b61105a611c14565b600054600160a060020a031633146113ce576040805160e560020a62461bcd02815260206004820152600d602482015260008051602061226d833981519152604482015290519081900360640190fd5b6113e081600160a060020a0316611bb4565b600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600b54604080517fdbcbaca4000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152825160009485948594939091169263dbcbaca4926024808301939282900301818787803b15801561147957600080fd5b505af115801561148d573d6000803e3d6000fd5b505050506040513d60408110156114a357600080fd5b508051602091820151600160a060020a039096166000908152600a909252604090912054909560ff9091169350915050565b600f5481565b303190565b600054600160a060020a03163314611530576040805160e560020a62461bcd02815260206004820152600d602482015260008051602061226d833981519152604482015290519081900360640190fd5b611538611c68565b6040805142815290517f5189687a7ec9d4aebe2f548f952ffbbad19e4cd545c4a05b5e2369cd272dd5519181900360200190a1565b803b8015905b50919050565b6000611583611dd1565b61158b611dd1565b61159484611c87565b91506115a38260000151610499565b806115c557506102586115c3836020015142611d4590919063ffffffff16565b105b156115d35760009250611626565b6115db611c14565b82519091506090906115f490839063ffffffff611b2816565b61025861160e856020015142611d4590919063ffffffff16565b81151561161757fe5b040281151561162257fe5b0492505b5050919050565b151590565b61163a611de8565b604051809103906000f080158015611656573d6000803e3d6000fd5b50600b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556000600e5542600f81905561169b90600190611d5c565b6001546002546003546040805142815260208101949094528381019290925260ff166060830152517f16171a4e996b33ebb6320397242a4168f60c16e87fbd8b58f1744d68c4179caf9181900360800190a16040805142815290517fc66870ef5f6257a76295d443e9221488043ec691f830f6c6128755c3518e3c759181900360200190a1565b60008061172e836118b6565b905080158015906117465750600283015460ff168111155b9392505050565b600080611759836118b6565b905080158061176e5750600283015460ff1681115b1561177c5760009150611573565b600183015460ff82166000908152600385016020526040902054106117a45760009150611573565b60ff81166000908152600384016020526040902054600184015403915050919050565b80151561102b576040805160e560020a62461bcd02815260206004820152601660248201527f72657175697265206e6f74207a65726f2076616c756500000000000000000000604482015290519081900360640190fd5b60008183111561182f57508061129f565b5090919050565b600080611842846118b6565b90508015806118575750600284015460ff1681115b1561186557600091506118af565b600184015460ff821660009081526003860160205260409020548401111561189057600091506118af565b60ff811660009081526003850160205260409020805484019055600191505b5092915050565b600042826000015411156118cc5750600061049c565b815462015180904203046001019050919050565b60030154421090565b600160a060020a03811660009081526004830160205260408120548190819060ff16151561191a5760009250611a76565b8454604080517f993d3489000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152825193169263993d3489926024808401939192918290030181600087803b15801561197d57600080fd5b505af1158015611991573d6000803e3d6000fd5b505050506040513d60408110156119a757600080fd5b505191508115156119bb5760009250611a76565b6119c982866002015461181e565b6001860154604080517fdbcbaca4000000000000000000000000000000000000000000000000000000008152600160a060020a03888116600483015282519496509092169263dbcbaca49260248082019392918290030181600087803b158015611a3257600080fd5b505af1158015611a46573d6000803e3d6000fd5b505050506040513d6040811015611a5c57600080fd5b50519050818110611a705760009250611a76565b80820392505b505092915050565b6000811515611a8f5750600061129f565b600183015483548302811515611aa157fe5b049392505050565b600160a060020a0316151590565b611abf611dd1565b303169021e19e0c9bab2400000811015611ae457611add6014611dac565b9150611b24565b8069021e19e0c9bab240000011158015611b08575069152d02c7e14af68000008111155b15611b1757611add6012611dac565b611b216010611dac565b91505b5090565b6000811515611b395750600061129f565b602083015183518302811515611aa157fe5b60005b81518161ffff161015611baf576001836004016000848461ffff16815181101515611b7557fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff1916911515919091179055600101611b4e565b505050565b600160a060020a038116151561102b576040805160e560020a62461bcd02815260206004820152601860248201527f72657175697265206e6f74207a65726f20616464726573730000000000000000604482015290519081900360640190fd5b611c1c611dd1565b3031683635c9adc5dea00000811015611c3957611add6014611dac565b80683635c9adc5dea0000011158015611b08575069070efc4d0e326fb400008111611b1757611add6012611dac565b6000805473ffffffffffffffffffffffffffffffffffffffff19169055565b611c8f611dd1565b600b54604080517fdbcbaca4000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528251600094859492169263dbcbaca492602480830193919282900301818787803b158015611cf657600080fd5b505af1158015611d0a573d6000803e3d6000fd5b505050506040513d6040811015611d2057600080fd5b5080516020918201516040805180820190915291825291810191909152949350505050565b60008083831115611d5557600080fd5b5050900390565b80825560015b600283015460ff90811690821611611baf5760ff8116600090815260038401602052604090205415611da45760ff811660009081526003840160205260408120555b600101611d62565b611db4611dd1565b506040805180820190915281548152600190910154602082015290565b604080518082019091526000808252602082015290565b60405161047480611df9833901905600608060405260008054600160a060020a0319163317905561044f806100256000396000f3006080604052600436106100775763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166320987e64811461007c57806341b2121c146100b457806344013585146100db578063949d225d146100ff578063cee2a9cf14610126578063dbcbaca414610147575b600080fd5b34801561008857600080fd5b506100a0600160a060020a0360043516602435610181565b604080519115158252519081900360200190f35b3480156100c057600080fd5b506100a0600160a060020a036004351660243560443561024a565b3480156100e757600080fd5b506100a0600160a060020a0360043516602435610316565b34801561010b57600080fd5b506101146103de565b60408051918252519081900360200190f35b34801561013257600080fd5b506100a0600160a060020a03600435166103e4565b34801561015357600080fd5b50610168600160a060020a0360043516610400565b6040805192835260208301919091528051918290030190f35b60008054600160a060020a031633146101fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6163636573732064656e69656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038316600090815260026020526040902054151561022257506000610244565b50600160a060020a038216600090815260026020526040902080548201905560015b92915050565b600080548190600160a060020a031633146102c657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6163636573732064656e69656400000000000000000000000000000000000000604482015290519081900360640190fd5b50600160a060020a038416600090815260026020526040902080541515806102ec575083155b156102fa576000915061030e565b838155600180820184905580548101815591505b509392505050565b60008054600160a060020a0316331461039057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6163636573732064656e69656400000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03831660009081526002602052604090205415156103b757506000610244565b50600160a060020a0382166000908152600260205260409020600190810182905592915050565b60015481565b600160a060020a03166000908152600260205260408120541190565b600160a060020a03166000908152600260205260409020805460019091015490915600a165627a7a72305820233221f3ef5e6019774acf7e816ddc22fa8dbe0898388f0c3de7c7e9693adb7b00296163636573732064656e69656400000000000000000000000000000000000000a165627a7a72305820a99a410438dfb957460d8507b8449e419fdd01f926ef722909a90c1e53cabd960029

Deployed Bytecode Sourcemap

11665:12176:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14463:18;:9;:16;:18::i;:::-;14459:72;;;14492:16;:14;:16::i;:::-;14517:7;;14459:72;14564:30;14573:20;:8;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14573:18:0;;-1:-1:-1;;;;;14573:20:0:i;:::-;14564:8;:30::i;:::-;11665:12176;15788:123;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15788:123:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15788:123:0;;-1:-1:-1;15788:123:0;;-1:-1:-1;;;;;;;15788:123:0;16410:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16410:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;12402:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12402:33:0;;;;;;;;-1:-1:-1;;;;;12402:33:0;;;;;;;;;;;;;;17661:191;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17661:191:0;;;;14696:828;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14696:828:0;-1:-1:-1;;;;;14696:828:0;;;;;;;12266:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12266:45:0;;;;;;;;;;;;;;;;;;;;12440:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12440:28:0;;;;16064:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16064:91:0;;;;16256:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16256:148:0;;;;12334:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12334:45:0;;;;17322:142;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17322:142:0;-1:-1:-1;;;;;17322:142:0;;;;;15917:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15917:141:0;;;;16727:176;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16727:176:0;;;;16909:161;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16909:161:0;;;;15664:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15664:118:0;-1:-1:-1;;;;;15664:118:0;;;;;12473:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12473:29:0;;;;16564:157;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16564:157:0;;;;17470:185;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17470:185:0;;;;15530:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15530:128:0;-1:-1:-1;;;;;15530:128:0;;;;;17858:620;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17858:620:0;;;;18484:2823;;-1:-1:-1;;;;;18484:2823:0;;;;;17076:240;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17076:240:0;-1:-1:-1;;;;;17076:240:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12507:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12507:23:0;;;;16161:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16161:89:0;;;;14606:84;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14606:84:0;;;;3080:78;3146:6;;3080:78;;;;:::o;17858:620::-;17957:14;14195:26;:10;:24;:26::i;:::-;14187:63;;;;;;;-1:-1:-1;;;;;14187:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17974:25;17988:10;17974:13;:25::i;:::-;17957:42;;18015:19;:9;:17;:19::i;:::-;18006:61;;;;;;;-1:-1:-1;;;;;18006:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18125:11;;:43;;;;;;18152:10;18125:43;;;;18164:3;18125:43;;;;;;-1:-1:-1;;;;;18125:11:0;;;;:26;;:43;;;;;;;;;;;;;;;:11;;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;18125:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18125:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18125:43:0;18118:51;;;;;;18242:4;18234:21;:34;-1:-1:-1;18230:109:0;;18279:10;:8;:10::i;:::-;-1:-1:-1;18318:4:0;18310:21;18230:109;18387:30;;:10;;:30;;;;;18407:9;;18387:30;;;;18407:9;18387:10;:30;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;18429:43:0;;;18457:3;18429:43;;;;;;;;;;18445:10;;18429:43;;;;;;;;14096:45;;;14114:3;14096:45;;14127:4;14119:21;14096:45;;;;;;;;;;;;;;;;;17858:620;:::o;4650:143::-;4762:4;4751:16;4745:23;;4650:143::o;18484:2823::-;18577:15;;;;;;;;14195:26;:10;:24;:26::i;:::-;14187:63;;;;;;;-1:-1:-1;;;;;14187:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18595:9;;-1:-1:-1;18595:9:0;;-1:-1:-1;12302:9:0;18656:26;;;18648:73;;;;;-1:-1:-1;;;;;18648:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12368:11;18744:4;18736:21;:35;;18728:78;;;;;-1:-1:-1;;;;;18728:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18819:16;:5;:14;:16::i;:::-;18815:604;;;18915:26;:5;:24;:26::i;:::-;18895:46;;18950:29;:12;:27;:29::i;:::-;19001:34;19010:10;19022:12;19001:8;:34::i;:::-;18988:47;-1:-1:-1;19051:32:0;:5;18988:47;19051:32;:20;:32;:::i;:::-;19044:40;;;;;;19144:15;:5;:13;:15::i;:::-;19098:62;;;19127:3;19098:62;;;;;;;;;;19115:10;;19098:62;;;;;;;;18815:604;;;19186:22;:11;:20;:22::i;:::-;19182:237;;;19279:40;:11;19308:10;19279:40;:28;:40;:::i;:::-;19260:59;;19328:28;:11;:26;:28::i;:::-;19378:33;19387:10;19399:11;19378:8;:33::i;:::-;19365:46;;19182:237;19486:10;19470:13;:26;19466:242;;;19556:27;;19521:26;;;;-1:-1:-1;19556:10:0;;:27;;;;;19521:26;;19556:27;;;;19521:26;19556:10;:27;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;19632:68:0;;;19665:3;19632:68;;19670:9;19632:68;;;;;;;;;;;;;;;;;;19608:10;;-1:-1:-1;19653:10:0;;19632:68;;;;;;;;;;19466:242;19735:18;;-1:-1:-1;;;;;19735:18:0;:68;19763:39;:20;19788:13;19763:39;:24;:39;:::i;:::-;19735:68;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;19810:13:0;;-1:-1:-1;;;;;19810:13:0;:58;19833:34;:15;19853:13;19833:34;:19;:34;:::i;:::-;19810:58;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;19901:11:0;;:34;;;;;;19924:10;19901:34;;;;;;-1:-1:-1;;;;;19901:11:0;;;;:22;;:34;;;;;;;;;;;;;;;:11;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;19901:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19901:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19901:34:0;;-1:-1:-1;20008:22:0;-1:-1:-1;;;;;20008:20:0;;;:22::i;:::-;:43;;;;;20035:16;20034:17;20008:43;:71;;;;-1:-1:-1;20068:10:0;20056:23;;;;:11;:23;;;;;;;;20055:24;20008:71;:108;;;;-1:-1:-1;;;;;;20090:26:0;;20106:10;20090:26;;20008:108;:148;;;;-1:-1:-1;20120:11:0;;:36;;;;;;-1:-1:-1;;;;;20120:36:0;;;;;;;;;:11;;;;;:22;;:36;;;;;;;;;;;;;;:11;;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;20120:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20120:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20120:36:0;20008:148;20004:583;;;20187:10;20175:23;;;;:11;:23;;;;;:30;;-1:-1:-1;;20175:30:0;20201:4;20175:30;;;20300:34;20323:10;20300:17;:15;:17::i;:::-;:22;:34;:22;:34;:::i;:::-;20350:11;;:49;;;;;;-1:-1:-1;;;;;20350:49:0;;;;;;;;;;;;;;;20284:50;;-1:-1:-1;20350:11:0;;;:25;;:49;;;;;;;;;;;;;;;:11;;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;20350:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20350:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20350:49:0;20343:57;;;;;;20524:55;;;20565:3;20524:55;;;;;;;;;;20431:22;;;;-1:-1:-1;;;;;20524:55:0;;;20539:10;;20524:55;;;;;;;;;;;20004:583;20667:25;20681:10;20667:13;:25::i;:::-;20650:42;;20703:16;:39;;;;;20723:19;:9;:17;:19::i;:::-;20699:147;;;20790:48;;;20823:3;20790:48;;;;;;;;;;20753:23;;;;20811:10;;20790:48;;;;;;;;20699:147;20858:16;20854:349;;;20927:11;;:49;;;;;;20953:10;20927:49;;;;;;;;;;;;-1:-1:-1;;;;;20927:11:0;;;;:25;;:49;;;;;;;;;;;;;;;:11;;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;20927:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20927:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20927:49:0;20920:57;;;;;;20993:11;;:43;;;;;;21020:10;20993:43;;;;21032:3;20993:43;;;;;;-1:-1:-1;;;;;20993:11:0;;;;:26;;:43;;;;;;;;;;;;;;;:11;;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;20993:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20993:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20993:43:0;20986:51;;;;;;20854:349;;;21097:11;;:52;;;;;;21121:10;21097:52;;;;;;;;;;21145:3;21097:52;;;;;;-1:-1:-1;;;;;21097:11:0;;;;:23;;:52;;;;;;;;;;;;;;;:11;;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;21097:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21097:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21097:52:0;21090:60;;;;;;21164:31;;;21191:3;21164:31;;;;21179:10;;21164:31;;;;;;;;;;20854:349;21211:17;:19;;;;;;21242:59;;;21270:3;21242:59;;;;;;;;;;;;;;;;21258:10;;21242:59;;;;;;;;;;14096:45;;;14114:3;14096:45;;14127:4;14119:21;14096:45;;;;;;;;;;;;;;;;;18484:2823;;;;;;;;;:::o;15788:123::-;6789:5;;-1:-1:-1;;;;;6789:5:0;6775:10;:19;6767:45;;;;;-1:-1:-1;;;;;6767:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6767:45:0;;;;;;;;;;;;;;;15870:35;:11;15899:5;15870:35;:28;:35;:::i;:::-;15788:123;:::o;16410:148::-;16519:11;:15;16536;;16519;;16410:148::o;12402:33::-;;;-1:-1:-1;;;;;12402:33:0;;:::o;17661:191::-;17713:14;17729:16;17754:24;;:::i;:::-;17781:17;:15;:17::i;:::-;17833:5;;17840;;;;;17833;;17840;;-1:-1:-1;17661:191:0;-1:-1:-1;;17661:191:0:o;14696:828::-;6789:5;;-1:-1:-1;;;;;6789:5:0;6775:10;:19;6767:45;;;;;-1:-1:-1;;;;;6767:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6767:45:0;;;;;;;;;;;;;;;14847:1;14835:13;;;14812:36;;;;14887:9;14855:29;:41;;;14903:18;:23;;-1:-1:-1;;14903:23:0;14924:2;14903:23;;;;;14938:124;;;14957:3;14938:124;;;;;;;;;;;;;;;;14903:23;15037:18;14938:124;;;;;;;;;;;;;;15103:11;:54;;-1:-1:-1;;;;;15103:54:0;;;-1:-1:-1;;15103:54:0;;;;;;;;15210:11;;15164:23;:59;;;;;15210:11;;;15164:59;;;;;15266:8;15230:33;:44;;;15281:24;:36;;;15329:189;;;15347:3;15329:189;;15368:23;;;15329:189;;;;15410:23;;;;15329:189;;;;;;;;;;;;;;;;;;;;;;;;14696:828;;:::o;12266:45::-;12302:9;12266:45;:::o;12440:28::-;;;-1:-1:-1;;;;;12440:28:0;;:::o;16064:91::-;16131:11;;:18;;;;;;;;16111:4;;-1:-1:-1;;;;;16131:11:0;;:16;;:18;;;;;;;;;;;;;;16111:4;16131:11;:18;;;5:2:-1;;;;30:1;27;20:12;5:2;16131:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16131:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16131:18:0;;-1:-1:-1;16064:91:0;:::o;16256:148::-;16365:11;:15;16382;;16365;;16256:148::o;12334:45::-;12368:11;12334:45;:::o;17322:142::-;17396:14;17431:27;17445:12;17431:13;:27::i;:::-;17419:39;17322:142;-1:-1:-1;;17322:142:0:o;15917:141::-;15989:15;16026:26;:5;:24;:26::i;:::-;16013:39;;15917:141;:::o;16727:176::-;16846:20;:24;16872;;16846;;16727:176::o;16909:161::-;17023:15;:19;17044;;17023;;16909:161::o;15664:118::-;6789:5;;-1:-1:-1;;;;;6789:5:0;6775:10;:19;6767:45;;;;;-1:-1:-1;;;;;6767:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6767:45:0;;;;;;;;;;;;;;;15728:21;:4;-1:-1:-1;;;;;15728:19:0;;:21::i;:::-;15756:13;:20;;-1:-1:-1;;15756:20:0;-1:-1:-1;;;;;15756:20:0;;;;;;;;;;15664:118::o;12473:29::-;;;;:::o;16564:157::-;16676:14;:18;16696;;16676;;16564:157::o;17470:185::-;17519:14;17535:16;17560:24;;:::i;:::-;17587:14;:12;:14::i;15530:128::-;6789:5;;-1:-1:-1;;;;;6789:5:0;6775:10;:19;6767:45;;;;;-1:-1:-1;;;;;6767:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6767:45:0;;;;;;;;;;;;;;;15599:21;:4;-1:-1:-1;;;;;15599:19:0;;:21::i;:::-;15627:18;:25;;-1:-1:-1;;15627:25:0;-1:-1:-1;;;;;15627:25:0;;;;;;;;;;15530:128::o;17076:240::-;17227:11;;:38;;;;;;-1:-1:-1;;;;;17227:38:0;;;;;;;;;17140:15;;;;;;17227:11;;;;;:24;;:38;;;;;;;;;;;17140:15;17227:11;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;17227:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17227:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17227:38:0;;;;;;;-1:-1:-1;;;;;17285:25:0;;;;;;;:11;:25;;;17227:38;17285:25;;;;17227:38;;17285:25;;;;;-1:-1:-1;17076:240:0;-1:-1:-1;;17076:240:0:o;12507:23::-;;;;:::o;16161:89::-;16231:4;16223:21;16161:89;:::o;14606:84::-;6789:5;;-1:-1:-1;;;;;6789:5:0;6775:10;:19;6767:45;;;;;-1:-1:-1;;;;;6767:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6767:45:0;;;;;;;;;;;;;;;14650:8;:6;:8::i;:::-;14670:14;;;14680:3;14670:14;;;;;;;;;;;;;14606:84::o;4799:160::-;4910:17;;4942:11;;;4799:160;;;;;:::o;21574:901::-;21641:14;21664:41;;:::i;:::-;22329:24;;:::i;:::-;21708:28;21723:12;21708:14;:28::i;:::-;21664:72;;21789:28;:8;:19;;;:26;:28::i;:::-;:74;;;;21853:10;21821:29;21829:8;:20;;;21821:3;:7;;:29;;;;:::i;:::-;:42;21789:74;21785:105;;;21881:1;21874:8;;;;21785:105;22356:14;:12;:14::i;:::-;22443:19;;22329:41;;-1:-1:-1;22466:3:0;;22436:27;;22329:41;;22436:27;:6;:27;:::i;:::-;22422:10;22390:29;22398:8;:20;;;22390:3;:7;;:29;;;;:::i;:::-;:42;;;;;;;;22389:74;:80;;;;;;;;22377:92;;21574:901;;;;;;:::o;3164:79::-;3231:6;;;3164:79::o;23555:283::-;23604:22;;:::i;:::-;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;23590:11:0;:36;;-1:-1:-1;;23590:36:0;-1:-1:-1;;;;;23590:36:0;;;;;;;;;;-1:-1:-1;23633:17:0;:21;23675:3;23661:11;:17;;;23685:18;;-1:-1:-1;;23685:13:0;:18::i;:::-;23732:5;:20;23754:29;;23785:18;;23715:89;;;23726:3;23715:89;;;;;;;;;;;;;;;;23785:18;;23715:89;;;;;;;;;;;;;;23816:16;;;23828:3;23816:16;;;;;;;;;;;;;23555:283::o;10524:167::-;10599:4;10612:8;10623:13;:3;:11;:13::i;:::-;10612:24;-1:-1:-1;10650:8:0;;;;;:35;;-1:-1:-1;10669:16:0;;;;;;10662:23;;;10650:35;10643:42;10524:167;-1:-1:-1;;;10524:167:0:o;10135:383::-;10220:4;10233:8;10244:13;:3;:11;:13::i;:::-;10233:24;-1:-1:-1;10268:8:0;;;:34;;-1:-1:-1;10286:16:0;;;;;;10280:22;;10268:34;10264:65;;;10320:1;10313:8;;;;10264:65;10379:27;;;;10339:36;;;;;;;:24;;;:36;;;;;;:67;10335:98;;10424:1;10417:8;;;;10335:98;10476:36;;;;;;;:24;;;:36;;;;;;10446:27;;;;:66;;-1:-1:-1;10135:383:0;;;;:::o;2762:104::-;2825:8;;;2817:43;;;;;-1:-1:-1;;;;;2817:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2489:120;2540:4;2561:1;2557;:5;2553:36;;;-1:-1:-1;2580:1:0;2573:8;;2553:36;-1:-1:-1;2602:1:0;;2489:120;-1:-1:-1;2489:120:0:o;10697:406::-;10790:4;10803:8;10814:13;:3;:11;:13::i;:::-;10803:24;-1:-1:-1;10838:8:0;;;:34;;-1:-1:-1;10856:16:0;;;;;;10850:22;;10838:34;10834:69;;;10890:5;10883:12;;;;10834:69;10965:27;;;;10913:36;;;;;;;:24;;;:36;;;;;;:49;;:79;10909:114;;;11010:5;11003:12;;;;10909:114;11029:36;;;;;;;:24;;;:36;;;;;:50;;;;;;-1:-1:-1;;;10697:406:0;;;;;;:::o;11415:229::-;11489:8;11531:3;11510;:18;;;:24;11506:55;;;-1:-1:-1;11552:1:0;11545:8;;11506:55;11580:18;;11602:8;;11574:3;:24;11573:37;11613:1;11573:41;11567:47;;11415:229;;;:::o;7492:115::-;7580:15;;;7598:3;-1:-1:-1;;7492:115:0:o;7613:732::-;-1:-1:-1;;;;;7770:26:0;;7711:4;7770:26;;;:12;;;:26;;;;;;7711:4;;;;7770:26;;7769:27;7765:58;;;7814:1;7807:8;;;;7765:58;7923:14;;:46;;;;;;-1:-1:-1;;;;;7923:46:0;;;;;;;;;:14;;;:32;;:46;;;;;;;;;;;;;:14;;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;7923:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7923:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7923:46:0;;-1:-1:-1;7980:18:0;;7976:49;;;8016:1;8009:8;;;;7976:49;8047;8056:13;8071:2;:24;;;8047:8;:49::i;:::-;8180:14;;;;:41;;;;;;-1:-1:-1;;;;;8180:41:0;;;;;;;;;8031:65;;-1:-1:-1;8180:14:0;;;;:27;;:41;;;;;;;;;;;;:14;;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;8180:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8180:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8180:41:0;;-1:-1:-1;8238:31:0;;;8234:62;;8287:1;8280:8;;;;8234:62;8325:14;8311:13;:28;8304:35;;7613:732;;;;;;;:::o;3401:145::-;3464:4;3481:6;;3477:37;;;-1:-1:-1;3505:1:0;3498:8;;3477:37;3535:5;;;;3529;;3527:7;;:13;;;;;;;;;3401:145;-1:-1:-1;;;3401:145:0:o;2872:100::-;-1:-1:-1;;;;;2947:18:0;;2945:21;;2872:100::o;23004:545::-;23053:24;;:::i;:::-;23109:4;23101:21;23293:11;23283:21;;23279:255;;;23320:25;:14;:23;:25::i;:::-;23316:29;;23279:255;;;23386:7;23371:11;:22;;:49;;;;;23408:12;23397:7;:23;;23371:49;23366:168;;;23435:22;:11;:20;:22::i;23366:168::-;23494:22;:11;:20;:22::i;:::-;23490:26;;23366:168;23004:545;;:::o;4089:145::-;4152:4;4169:6;;4165:37;;;-1:-1:-1;4193:1:0;4186:8;;4165:37;4223:5;;;;4217;;4215:7;;:13;;;;;;8351:176;8443:8;8438:84;8457:5;:12;8453:1;:16;;;8438:84;;;8510:4;8485:2;:12;;:22;8498:5;8504:1;8498:8;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8485:22:0;;;;;;;;;;;-1:-1:-1;8485:22:0;:29;;-1:-1:-1;;8485:29:0;;;;;;;;;;-1:-1:-1;8471:3:0;8438:84;;;8351:176;;;:::o;2636:120::-;-1:-1:-1;;;;;2703:18:0;;;;2695:55;;;;;-1:-1:-1;;;;;2695:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;22481:517;22527:24;;:::i;:::-;22583:4;22575:21;22755:10;22745:20;;22741:252;;;22781:25;:14;:23;:25::i;22741:252::-;22846:7;22832:10;:21;;:47;;;;-1:-1:-1;22868:11:0;22857:22;;22827:166;;22894:22;:11;:20;:22::i;6890:52::-;6931:5;6924:12;;-1:-1:-1;;6924:12:0;;;6890:52::o;21313:255::-;21381:25;;:::i;:::-;21460:11;;:38;;;;;;-1:-1:-1;;;;;21460:38:0;;;;;;;;;21423:15;;;;21460:11;;;:24;;:38;;;;;;;;;;;;21423:15;21460:11;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;21460:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21460:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21460:38:0;;;;;;;;21512:50;;;;;;;;;;;;;;;;;;;21313:255;-1:-1:-1;;;;21313:255:0:o;6073:142::-;6133:7;;6157:8;;;;6149:17;;;;;;-1:-1:-1;;6185:7:0;;;6073:142::o;11109:300::-;11194:30;;;11264:1;11249:155;11272:16;;;;;;;;11267:21;;;;11249:155;;11308:27;;;;;;;:24;;;:27;;;;;;:32;11304:93;;11360:27;;;;;;;:24;;;:27;;;;;11353:34;11304:93;11290:3;;11249:155;;3936:133;3996:15;;:::i;:::-;-1:-1:-1;4034:29:0;;;;;;;;;4050:5;;4034:29;;4057:5;;;;;4034:29;;;;;3936:133::o;11665:12176::-;;;;;;;;;;-1:-1:-1;11665:12176:0;;;;;;;;:::o;:::-;;;;;;;;;;:::o

Swarm Source

bzzr://233221f3ef5e6019774acf7e816ddc22fa8dbe0898388f0c3de7c7e9693adb7b

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.