ETH Price: $1,615.88 (-0.05%)
 

Overview

ETH Balance

0.49085407521683963 ETH

Eth Value

$793.16 (@ $1,615.88/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Ether82841402019-08-04 12:16:022079 days ago1564920962IN
0xE94F0adA...7170Bf7CB
0 ETH0.000031761
Withdraw Ether82841132019-08-04 12:12:012079 days ago1564920721IN
0xE94F0adA...7170Bf7CB
0 ETH0.000031691
Withdraw Ether82840912019-08-04 12:05:282079 days ago1564920328IN
0xE94F0adA...7170Bf7CB
0 ETH0.000031371
Withdraw Ether82840742019-08-04 12:00:432079 days ago1564920043IN
0xE94F0adA...7170Bf7CB
0 ETH0.00003151
Withdraw Ether82840202019-08-04 11:48:322079 days ago1564919312IN
0xE94F0adA...7170Bf7CB
0 ETH0.000024611
Rescue Tokens82838712019-08-04 11:14:472079 days ago1564917287IN
0xE94F0adA...7170Bf7CB
0 ETH0.000042831
Rescue Tokens82837222019-08-04 10:44:072079 days ago1564915447IN
0xE94F0adA...7170Bf7CB
0 ETH0.000042641
Rescue Tokens82835982019-08-04 10:15:462079 days ago1564913746IN
0xE94F0adA...7170Bf7CB
0 ETH0.000028361
Transfer82262142019-07-26 12:47:372088 days ago1564145257IN
0xE94F0adA...7170Bf7CB
0.87028509 ETH0.000122751
Transfer81879432019-07-20 13:49:252094 days ago1563630565IN
0xE94F0adA...7170Bf7CB
10 ETH0.005027453
Transfer81425682019-07-13 12:06:332101 days ago1563019593IN
0xE94F0adA...7170Bf7CB
0.2625 ETH0.00011641
Transfer81306542019-07-11 15:09:472103 days ago1562857787IN
0xE94F0adA...7170Bf7CB
0.03 ETH0.000425820
Transfer81306192019-07-11 15:01:112103 days ago1562857271IN
0xE94F0adA...7170Bf7CB
0.03 ETH0.000425820
Transfer81305942019-07-11 14:56:452103 days ago1562857005IN
0xE94F0adA...7170Bf7CB
0.03 ETH0.000425820
Transfer81107932019-07-08 13:13:562106 days ago1562591636IN
0xE94F0adA...7170Bf7CB
5 ETH0.0126871410
Transfer81107832019-07-08 13:12:182106 days ago1562591538IN
0xE94F0adA...7170Bf7CB
0.3 ETH0.0065929610
Transfer81090212019-07-08 6:31:382106 days ago1562567498IN
0xE94F0adA...7170Bf7CB
1 ETH0.0024877210
Transfer80966292019-07-06 8:25:262108 days ago1562401526IN
0xE94F0adA...7170Bf7CB
0.03 ETH0.000025761.21
Transfer80962982019-07-06 7:11:022108 days ago1562397062IN
0xE94F0adA...7170Bf7CB
1.1 ETH0.002756215.75
Transfer80962862019-07-06 7:09:002108 days ago1562396940IN
0xE94F0adA...7170Bf7CB
1.1 ETH0.000122415.75
Transfer80962562019-07-06 7:02:522108 days ago1562396572IN
0xE94F0adA...7170Bf7CB
1.1 ETH0.000122415.75
Transfer80896182019-07-05 6:07:392109 days ago1562306859IN
0xE94F0adA...7170Bf7CB
0.1 ETH0.0108817612
Transfer80895872019-07-05 6:02:122109 days ago1562306532IN
0xE94F0adA...7170Bf7CB
0.1 ETH0.000212910
Transfer80887422019-07-05 3:04:452109 days ago1562295885IN
0xE94F0adA...7170Bf7CB
1.89103817 ETH0.0051008610
Transfer80837552019-07-04 8:23:332110 days ago1562228613IN
0xE94F0adA...7170Bf7CB
0.1 ETH0.0059076810
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-82841402019-08-04 12:16:022079 days ago1564920962
0xE94F0adA...7170Bf7CB
100 ETH
-82841132019-08-04 12:12:012079 days ago1564920721
0xE94F0adA...7170Bf7CB
1 ETH
-82840912019-08-04 12:05:282079 days ago1564920328
0xE94F0adA...7170Bf7CB
1 wei
-82840742019-08-04 12:00:432079 days ago1564920043
0xE94F0adA...7170Bf7CB
0 ETH
-82262142019-07-26 12:47:372088 days ago1564145257
0xE94F0adA...7170Bf7CB
0.74 ETH
-81879432019-07-20 13:49:252094 days ago1563630565
0xE94F0adA...7170Bf7CB
4.97 ETH
-81879432019-07-20 13:49:252094 days ago1563630565
0xE94F0adA...7170Bf7CB
0.4 ETH
-81879432019-07-20 13:49:252094 days ago1563630565
0xE94F0adA...7170Bf7CB
0.6 ETH
-81879432019-07-20 13:49:252094 days ago1563630565
0xE94F0adA...7170Bf7CB
0.6 ETH
-81425682019-07-13 12:06:332101 days ago1563019593
0xE94F0adA...7170Bf7CB
0.23 ETH
-81107932019-07-08 13:13:562106 days ago1562591636
0xE94F0adA...7170Bf7CB
2.48 ETH
-81107932019-07-08 13:13:562106 days ago1562591636
0xE94F0adA...7170Bf7CB
0.2 ETH
-81107932019-07-08 13:13:562106 days ago1562591636
0xE94F0adA...7170Bf7CB
0.25 ETH
-81107932019-07-08 13:13:562106 days ago1562591636
0xE94F0adA...7170Bf7CB
0.3 ETH
-81107932019-07-08 13:13:562106 days ago1562591636
0xE94F0adA...7170Bf7CB
0.3 ETH
-81107832019-07-08 13:12:182106 days ago1562591538
0xE94F0adA...7170Bf7CB
0.15 ETH
-81107832019-07-08 13:12:182106 days ago1562591538
0xE94F0adA...7170Bf7CB
0.012 ETH
-81107832019-07-08 13:12:182106 days ago1562591538
0xE94F0adA...7170Bf7CB
0.015 ETH
-81107832019-07-08 13:12:182106 days ago1562591538
0xE94F0adA...7170Bf7CB
0.018 ETH
-81107832019-07-08 13:12:182106 days ago1562591538
0xE94F0adA...7170Bf7CB
0.018 ETH
-81090212019-07-08 6:31:382106 days ago1562567498
0xE94F0adA...7170Bf7CB
0.85 ETH
-80962982019-07-06 7:11:022108 days ago1562397062
0xE94F0adA...7170Bf7CB
0.55 ETH
-80962982019-07-06 7:11:022108 days ago1562397062
0xE94F0adA...7170Bf7CB
0.055 ETH
-80962982019-07-06 7:11:022108 days ago1562397062
0xE94F0adA...7170Bf7CB
0.066 ETH
-80962982019-07-06 7:11:022108 days ago1562397062
0xE94F0adA...7170Bf7CB
0.066 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenPublicSale

Compiler Version
v0.5.7+commit.6da8b019

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-06-24
*/

pragma solidity ^0.5.7;


// Token Public Sale

library SafeMath256 {

    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        c = a + b;
        assert(c >= a);
        return c;
    }


    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }


    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        assert(c / a == b);
        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b > 0);
        uint256 c = a / b;
        assert(a == b * c + a % b);
        return a / b;
    }


    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}


library SafeMath16 {

    function add(uint16 a, uint16 b) internal pure returns (uint16 c) {
        c = a + b;
        assert(c >= a);
        return c;
    }


    function sub(uint16 a, uint16 b) internal pure returns (uint16) {
        assert(b <= a);
        return a - b;
    }

    function mul(uint16 a, uint16 b) internal pure returns (uint16 c) {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        assert(c / a == b);
        return c;
    }

    function div(uint16 a, uint16 b) internal pure returns (uint16) {
        assert(b > 0);
        uint256 c = a / b;
        assert(a == b * c + a % b);
        return a / b;
    }

    function mod(uint16 a, uint16 b) internal pure returns (uint16) {
        require(b != 0);
        return a % b;
    }
}


contract Ownable {
    address private _owner;
    address payable internal _receiver;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ReceiverChanged(address indexed previousReceiver, address indexed newReceiver);

    constructor () internal {
        _owner = msg.sender;
        _receiver = msg.sender;
    }


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


    modifier onlyOwner() {
        require(msg.sender == _owner);
        _;
    }


    function transferOwnership(address newOwner) external onlyOwner {
        require(newOwner != address(0));
        address __previousOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(__previousOwner, newOwner);
    }

    function changeReceiver(address payable newReceiver) external onlyOwner {
        require(newReceiver != address(0));
        address __previousReceiver = _receiver;
        _receiver = newReceiver;
        emit ReceiverChanged(__previousReceiver, newReceiver);
    }

    function rescueTokens(address tokenAddress, address receiver, uint256 amount) external onlyOwner {
        IERC20 _token = IERC20(tokenAddress);
        require(receiver != address(0));
        uint256 balance = _token.balanceOf(address(this));
        require(balance >= amount);

        assert(_token.transfer(receiver, amount));
    }


    function withdrawEther(address payable to, uint256 amount) external onlyOwner {
        require(to != address(0));
        uint256 balance = address(this).balance;
        require(balance >= amount);

        to.transfer(amount);
    }
}



contract Pausable is Ownable {
    bool private _paused;

    event Paused(address account);
    event Unpaused(address account);

    constructor () internal {
        _paused = false;
    }

    function paused() public view returns (bool) {
        return _paused;
    }

    modifier whenNotPaused() {
        require(!_paused, "Paused.");
        _;
    }

    function setPaused(bool state) external onlyOwner {
        if (_paused && !state) {
            _paused = false;
            emit Unpaused(msg.sender);
        } else if (!_paused && state) {
            _paused = true;
            emit Paused(msg.sender);
        }
    }
}


interface IERC20 {
    function balanceOf(address owner) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
}


interface IToken {
    function balanceOf(address owner) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function inWhitelist(address account) external view returns (bool);
    function referrer(address account) external view returns (address);
    function refCount(address account) external view returns (uint256);
}


contract TokenPublicSale is Ownable, Pausable{
    using SafeMath16 for uint16;
    using SafeMath256 for uint256;

    IToken public TOKEN = IToken(0x13bB73376c18faB89Dd5143D50BeF64d9D865200);

    // Start timestamp
    uint32 _startTimestamp;

    // Audit ether price
    uint256 private _etherPrice;    // 1 Ether = xx.xxxxxx USD, with 6 decimals

    // Referral rewards, 35% for 15 levels
    uint16 private WHITELIST_REF_REWARDS_PCT_SUM = 35;
    uint16[15] private WHITELIST_REF_REWARDS_PCT = [
    6,  // 6% for Level.1
    6,  // 6% for Level.2
    5,  // 5% for Level.3
    4,  // 4% for Level.4
    3,  // 3% for Level.5
    2,  // 2% for Level.6
    1,  // 1% for Level.7
    1,  // 1% for Level.8
    1,  // 1% for Level.9
    1,  // 1% for Level.10
    1,  // 1% for Level.11
    1,  // 1% for Level.12
    1,  // 1% for Level.13
    1,  // 1% for Level.14
    1   // 1% for Level.15
    ];

    // Wei & Gas
    uint72 private WEI_MIN   = 0.1 ether;      // 0.1 Ether Minimum
    uint72 private WEI_MAX   = 10 ether;       // 10 Ether Maximum
    uint72 private WEI_BONUS = 10 ether;       // >10 Ether for Bonus
    uint24 private GAS_MIN   = 3000000;        // 3.0 Mwei gas Mininum
    uint24 private GAS_EX    = 1500000;        // 1.5 Mwei gas for ex

    // Price
    uint256 private TOKEN_USD_PRICE_START = 1000;           // $      0.00100 USD
    uint256 private TOKEN_USD_PRICE_STEP  = 10;             // $    + 0.00001 USD
    uint256 private STAGE_USD_CAP_START   = 100000000;      // $    100 USD
    uint256 private STAGE_USD_CAP_STEP    = 1000000;        // $     +1 USD
    uint256 private STAGE_USD_CAP_MAX     = 15100000000;    // $    15,100 USD

    uint256 private _tokenUsdPrice        = TOKEN_USD_PRICE_START;

    // Progress
    uint16 private STAGE_MAX = 60000;   // 60,000 stages total
    uint16 private SEASON_MAX = 100;    // 100 seasons total
    uint16 private SEASON_STAGES = 600; // each 600 stages is a season

    uint16 private _stage;
    uint16 private _season;

    // Sum
    uint256 private _txs;
    uint256 private _tokenTxs;
    uint256 private _tokenBonusTxs;
    uint256 private _tokenWhitelistTxs;
    uint256 private _tokenIssued;
    uint256 private _tokenBonus;
    uint256 private _tokenWhitelist;
    uint256 private _weiSold;
    uint256 private _weiRefRewarded;
    uint256 private _weiTopSales;
    uint256 private _weiTeam;
    uint256 private _weiPending;
    uint256 private _weiPendingTransfered;

    // Top-Sales
    uint256 private TOP_SALES_RATIO_START = 15000000;         // 15%, with 8 decimals
    uint256 private TOP_SALES_RATIO_DISTANCE = 50000000;      // 50%, with 8 decimals

    uint256 private _topSalesRatio = TOP_SALES_RATIO_START;   // 15% + 50% x(_stage/_stageMax)

    // During tx
    bool private _inWhitelist_;
    uint256 private _pending_ = WHITELIST_REF_REWARDS_PCT_SUM;
    uint16[] private _rewards_;
    address[] private _referrers_;

    // Audit ether price auditor
    mapping (address => bool) private _etherPriceAuditors;

    // Stage
    mapping (uint16 => uint256) private _stageUsdSold;
    mapping (uint16 => uint256) private _stageTokenIssued;

    // Season
    mapping (uint16 => uint256) private _seasonWeiSold;
    mapping (uint16 => uint256) private _seasonWeiTopSales;
    mapping (uint16 => uint256) private _seasonWeiTopSalesTransfered;

    // Account
    mapping (address => uint256) private _accountTokenIssued;
    mapping (address => uint256) private _accountTokenBonus;
    mapping (address => uint256) private _accountTokenWhitelisted;
    mapping (address => uint256) private _accountWeiPurchased;
    mapping (address => uint256) private _accountWeiRefRewarded;

    // Ref
    mapping (uint16 => address[]) private _seasonRefAccounts;
    mapping (uint16 => mapping (address => bool)) private _seasonHasRefAccount;
    mapping (uint16 => mapping (address => uint256)) private _usdSeasonAccountPurchased;
    mapping (uint16 => mapping (address => uint256)) private _usdSeasonAccountRef;

    // Events
    event AuditEtherPriceChanged(uint256 value, address indexed account);
    event AuditEtherPriceAuditorChanged(address indexed account, bool state);

    event TokenBonusTransfered(address indexed to, uint256 amount);
    event TokenWhitelistTransfered(address indexed to, uint256 amount);
    event TokenIssuedTransfered(uint16 stageIndex, address indexed to, uint256 tokenAmount, uint256 auditEtherPrice, uint256 weiUsed);

    event StageClosed(uint256 _stageNumber, address indexed account);
    event SeasonClosed(uint16 _seasonNumber, address indexed account);

    event SeasonTopSalesWeiTransfered(uint16 seasonNumber, address indexed to, uint256 amount);
    event TeamWeiTransfered(address indexed to, uint256 amount);
    event PendingWeiTransfered(address indexed to, uint256 amount);


    function startTimestamp() public view returns (uint32) {
        return _startTimestamp;
    }

    function setStartTimestamp(uint32 timestamp) external onlyOwner {
        _startTimestamp = timestamp;
    }

    modifier onlyEtherPriceAuditor() {
        require(_etherPriceAuditors[msg.sender]);
        _;
    }

    function setEtherPrice(uint256 value) external onlyEtherPriceAuditor {
        _etherPrice = value;
        emit AuditEtherPriceChanged(value, msg.sender);
    }

    function etherPriceAuditor(address account) public view returns (bool) {
        return _etherPriceAuditors[account];
    }

    function setEtherPriceAuditor(address account, bool state) external onlyOwner {
        _etherPriceAuditors[account] = state;
        emit AuditEtherPriceAuditorChanged(account, state);
    }

    function stageTokenUsdPrice(uint16 stageIndex) private view returns (uint256) {
        return TOKEN_USD_PRICE_START.add(TOKEN_USD_PRICE_STEP.mul(stageIndex));
    }

    function wei2usd(uint256 amount) private view returns (uint256) {
        return amount.mul(_etherPrice).div(1 ether);
    }

    function usd2wei(uint256 amount) private view returns (uint256) {
        return amount.mul(1 ether).div(_etherPrice);
    }

    function usd2token(uint256 usdAmount) private view returns (uint256) {
        return usdAmount.mul(1000000).div(_tokenUsdPrice);
    }

    function usd2tokenByStage(uint256 usdAmount, uint16 stageIndex) public view returns (uint256) {
        return usdAmount.mul(1000000).div(stageTokenUsdPrice(stageIndex));
    }

    function calcSeason(uint16 stageIndex) private view returns (uint16) {
        if (stageIndex > 0) {
            uint16 __seasonNumber = stageIndex.div(SEASON_STAGES);

            if (stageIndex.mod(SEASON_STAGES) > 0) {
                return __seasonNumber.add(1);
            }

            return __seasonNumber;
        }

        return 1;
    }


    function transferTopSales(uint16 seasonNumber, address payable to) external onlyOwner {
        uint256 __weiRemain = seasonTopSalesRemain(seasonNumber);
        require(to != address(0));

        _seasonWeiTopSalesTransfered[seasonNumber] = _seasonWeiTopSalesTransfered[seasonNumber].add(__weiRemain);
        emit SeasonTopSalesWeiTransfered(seasonNumber, to, __weiRemain);
        to.transfer(__weiRemain);
    }

    function pendingRemain() private view returns (uint256) {
        return _weiPending.sub(_weiPendingTransfered);
    }


    function transferPending(address payable to) external onlyOwner {
        uint256 __weiRemain = pendingRemain();
        require(to != address(0));

        _weiPendingTransfered = _weiPendingTransfered.add(__weiRemain);
        emit PendingWeiTransfered(to, __weiRemain);
        to.transfer(__weiRemain);
    }

    function transferTeam(address payable to) external onlyOwner {
        uint256 __weiRemain = _weiSold.sub(_weiRefRewarded).sub(_weiTopSales).sub(_weiPending).sub(_weiTeam);
        require(to != address(0));

        _weiTeam = _weiTeam.add(__weiRemain);
        emit TeamWeiTransfered(to, __weiRemain);
        to.transfer(__weiRemain);
    }


    function status() public view returns (uint256 auditEtherPrice,
        uint16 stage,
        uint16 season,
        uint256 tokenUsdPrice,
        uint256 currentTopSalesRatio,
        uint256 txs,
        uint256 tokenTxs,
        uint256 tokenBonusTxs,
        uint256 tokenWhitelistTxs,
        uint256 tokenIssued,
        uint256 tokenBonus,
        uint256 tokenWhitelist) {
        auditEtherPrice = _etherPrice;

        if (_stage > STAGE_MAX) {
            stage = STAGE_MAX;
            season = SEASON_MAX;
        } else {
            stage = _stage;
            season = _season;
        }

        tokenUsdPrice = _tokenUsdPrice;
        currentTopSalesRatio = _topSalesRatio;

        txs = _txs;
        tokenTxs = _tokenTxs;
        tokenBonusTxs = _tokenBonusTxs;
        tokenWhitelistTxs = _tokenWhitelistTxs;
        tokenIssued = _tokenIssued;
        tokenBonus = _tokenBonus;
        tokenWhitelist = _tokenWhitelist;
    }

    function sum() public view returns(uint256 weiSold,
        uint256 weiReferralRewarded,
        uint256 weiTopSales,
        uint256 weiTeam,
        uint256 weiPending,
        uint256 weiPendingTransfered,
        uint256 weiPendingRemain) {
        weiSold = _weiSold;
        weiReferralRewarded = _weiRefRewarded;
        weiTopSales = _weiTopSales;
        weiTeam = _weiTeam;
        weiPending = _weiPending;
        weiPendingTransfered = _weiPendingTransfered;
        weiPendingRemain = pendingRemain();
    }

    modifier enoughGas() {
        require(gasleft() > GAS_MIN);
        _;
    }

    modifier onlyOnSale() {
        require(_startTimestamp > 0 && now > _startTimestamp, "TM Token Public-Sale has not started yet.");
        require(_etherPrice > 0,        "Audit ETH price must be greater than zero.");
        require(!paused(),              "TM Token Public-Sale is paused.");
        require(_stage <= STAGE_MAX,    "TM Token Public-Sale Closed.");
        _;
    }


    function topSalesRatio(uint16 stageIndex) private view returns (uint256) {
        return TOP_SALES_RATIO_START.add(TOP_SALES_RATIO_DISTANCE.mul(stageIndex).div(STAGE_MAX));
    }

    function usd2weiTopSales(uint256 usdAmount) private view returns (uint256) {
        return usd2wei(usdAmount.mul(_topSalesRatio).div(100000000));
    }


    function stageUsdCap(uint16 stageIndex) private view returns (uint256) {
        uint256 __usdCap = STAGE_USD_CAP_START.add(STAGE_USD_CAP_STEP.mul(stageIndex));

        if (__usdCap > STAGE_USD_CAP_MAX) {
            return STAGE_USD_CAP_MAX;
        }

        return __usdCap;
    }


    function stageTokenCap(uint16 stageIndex) private view returns (uint256) {
        return usd2tokenByStage(stageUsdCap(stageIndex), stageIndex);
    }


    function stageStatus(uint16 stageIndex) public view returns (uint256 tokenUsdPrice,
        uint256 tokenCap,
        uint256 tokenOnSale,
        uint256 tokenSold,
        uint256 usdCap,
        uint256 usdOnSale,
        uint256 usdSold,
        uint256 weiTopSalesRatio) {
        if (stageIndex > STAGE_MAX) {
            return (0, 0, 0, 0, 0, 0, 0, 0);
        }

        tokenUsdPrice = stageTokenUsdPrice(stageIndex);

        tokenSold = _stageTokenIssued[stageIndex];
        tokenCap = stageTokenCap(stageIndex);
        tokenOnSale = tokenCap.sub(tokenSold);

        usdSold = _stageUsdSold[stageIndex];
        usdCap = stageUsdCap(stageIndex);
        usdOnSale = usdCap.sub(usdSold);

        weiTopSalesRatio = topSalesRatio(stageIndex);
    }

    function seasonTopSalesRemain(uint16 seasonNumber) private view returns (uint256) {
        return _seasonWeiTopSales[seasonNumber].sub(_seasonWeiTopSalesTransfered[seasonNumber]);
    }

    function seasonTopSalesRewards(uint16 seasonNumber) public view returns (uint256 weiSold,
        uint256 weiTopSales,
        uint256 weiTopSalesTransfered,
        uint256 weiTopSalesRemain) {
        weiSold = _seasonWeiSold[seasonNumber];
        weiTopSales = _seasonWeiTopSales[seasonNumber];
        weiTopSalesTransfered = _seasonWeiTopSalesTransfered[seasonNumber];
        weiTopSalesRemain = seasonTopSalesRemain(seasonNumber);
    }

    function accountQuery(address account) public view returns (uint256 tokenIssued,
        uint256 tokenBonus,
        uint256 tokenWhitelisted,
        uint256 weiPurchased,
        uint256 weiReferralRewarded) {
        tokenIssued = _accountTokenIssued[account];
        tokenBonus = _accountTokenBonus[account];
        tokenWhitelisted = _accountTokenWhitelisted[account];
        weiPurchased = _accountWeiPurchased[account];
        weiReferralRewarded = _accountWeiRefRewarded[account];
    }

    function seasonRefAccounts(uint16 seasonNumber) public view returns (address[] memory accounts) {
        accounts = _seasonRefAccounts[seasonNumber];
    }

    function usdSeasonAccountPurchased(uint16 seasonNumber, address account) public view returns (uint256) {
        return _usdSeasonAccountPurchased[seasonNumber][account];
    }

    function usdSeasonAccountRef(uint16 seasonNumber, address account) public view returns (uint256) {
        return _usdSeasonAccountRef[seasonNumber][account];
    }

    constructor () public {
        _etherPriceAuditors[msg.sender] = true;
        _stage = 0;
        _season = 1;
    }

    function () external payable enoughGas onlyOnSale {
        require(msg.value >= WEI_MIN);
        require(msg.value <= WEI_MAX);

        // Set temporary variables.
        setTemporaryVariables();
        uint256 __usdAmount = wei2usd(msg.value);
        uint256 __usdRemain = __usdAmount;
        uint256 __tokenIssued;
        uint256 __tokenBonus;
        uint256 __usdUsed;
        uint256 __weiUsed;

        // USD => TM Token
        while (gasleft() > GAS_EX && __usdRemain > 0 && _stage <= STAGE_MAX) {
            uint256 __txTokenIssued;
            (__txTokenIssued, __usdRemain) = ex(__usdRemain);
            __tokenIssued = __tokenIssued.add(__txTokenIssued);
        }

        // Used
        __usdUsed = __usdAmount.sub(__usdRemain);
        __weiUsed = usd2wei(__usdUsed);

        // Bonus 10%
        if (msg.value >= WEI_BONUS) {
            __tokenBonus = __tokenIssued.div(10);
            assert(transferTokenBonus(__tokenBonus));
        }

        // Whitelisted
        // BUY-ONE-AND-GET-ONE-MORE-FREE
        if (_inWhitelist_ && __tokenIssued > 0) {
            // both issued and bonus
            assert(transferTokenWhitelisted(__tokenIssued.add(__tokenBonus)));

            // 35% for 15 levels
            sendWhitelistReferralRewards(__weiUsed);
        }

        // If wei remains, refund.
        if (__usdRemain > 0) {
            uint256 __weiRemain = usd2wei(__usdRemain);

            __weiUsed = msg.value.sub(__weiRemain);

            // Refund wei back
            msg.sender.transfer(__weiRemain);
        }

        // Counter
        if (__weiUsed > 0) {
            _txs = _txs.add(1);
            _weiSold = _weiSold.add(__weiUsed);
            _accountWeiPurchased[msg.sender] = _accountWeiPurchased[msg.sender].add(__weiUsed);
        }

        // Wei team
        uint256 __weiTeam;
        if (_season > SEASON_MAX)
            __weiTeam = _weiSold.sub(_weiRefRewarded).sub(_weiTopSales).sub(_weiPending).sub(_weiTeam);
        else
            __weiTeam = _weiSold.sub(_weiRefRewarded).sub(_weiTopSales).sub(_weiPending).sub(_weiTeam).div(0.01 ether).mul(0.01 ether);

        _weiTeam = _weiTeam.add(__weiTeam);
        _receiver.transfer(__weiTeam);

        // Assert finished
        assert(true);
    }

    function setTemporaryVariables() private {
        delete _referrers_;
        delete _rewards_;

        _inWhitelist_ = TOKEN.inWhitelist(msg.sender);
        _pending_ = WHITELIST_REF_REWARDS_PCT_SUM;

        address __cursor = msg.sender;
        for(uint16 i = 0; i < WHITELIST_REF_REWARDS_PCT.length; i++) {
            address __refAccount = TOKEN.referrer(__cursor);

            if (__cursor == __refAccount)
                  break;

            if (TOKEN.refCount(__refAccount) > i) {
                if (!_seasonHasRefAccount[_season][__refAccount]) {
                    _seasonRefAccounts[_season].push(__refAccount);
                    _seasonHasRefAccount[_season][__refAccount] = true;
                }

                _pending_ = _pending_.sub(WHITELIST_REF_REWARDS_PCT[i]);
                _rewards_.push(WHITELIST_REF_REWARDS_PCT[i]);
                _referrers_.push(__refAccount);
            }

            __cursor = __refAccount;
        }
    }

    /**
     *  USD => TM Token
     */
    function ex(uint256 usdAmount) private returns (uint256, uint256) {
        uint256 __stageUsdCap = stageUsdCap(_stage);
        uint256 __tokenIssued;

        // in stage
        if (_stageUsdSold[_stage].add(usdAmount) <= __stageUsdCap) {
            exCount(usdAmount);

            __tokenIssued = usd2token(usdAmount);
            assert(transfertokenIssued(__tokenIssued, usdAmount));

            // close stage, if stage dollor cap reached
            if (__stageUsdCap == _stageUsdSold[_stage]) {
                assert(closeStage());
            }

            return (__tokenIssued, 0);
        }

        // close stage
        uint256 __usdUsed = __stageUsdCap.sub(_stageUsdSold[_stage]);
        uint256 __usdRemain = usdAmount.sub(__usdUsed);

        exCount(__usdUsed);

        __tokenIssued = usd2token(__usdUsed);
        assert(transfertokenIssued(__tokenIssued, __usdUsed));
        assert(closeStage());

        return (__tokenIssued, __usdRemain);
    }

    function exCount(uint256 usdAmount) private {
        uint256 __weiSold = usd2wei(usdAmount);
        uint256 __weiTopSales = usd2weiTopSales(usdAmount);

        _usdSeasonAccountPurchased[_season][msg.sender] = _usdSeasonAccountPurchased[_season][msg.sender].add(usdAmount);   // season => address => purchased, in USD

        _stageUsdSold[_stage] = _stageUsdSold[_stage].add(usdAmount);                   // stage sold, in USD
        _seasonWeiSold[_season] = _seasonWeiSold[_season].add(__weiSold);               // season sold, in wei
        _seasonWeiTopSales[_season] = _seasonWeiTopSales[_season].add(__weiTopSales);   // season Top-Sales, in wei
        _weiTopSales = _weiTopSales.add(__weiTopSales);                                 // sum Top-Sales, in wei

        // season referral account
        if (_inWhitelist_) {
            for (uint16 i = 0; i < _rewards_.length; i++) {
                _usdSeasonAccountRef[_season][_referrers_[i]] = _usdSeasonAccountRef[_season][_referrers_[i]].add(usdAmount);
            }
        }
    }

    function transfertokenIssued(uint256 amount, uint256 usdAmount) private returns (bool) {
        _tokenTxs = _tokenTxs.add(1);

        _tokenIssued = _tokenIssued.add(amount);
        _stageTokenIssued[_stage] = _stageTokenIssued[_stage].add(amount);
        _accountTokenIssued[msg.sender] = _accountTokenIssued[msg.sender].add(amount);

        assert(TOKEN.transfer(msg.sender, amount));
        emit TokenIssuedTransfered(_stage, msg.sender, amount, _etherPrice, usdAmount);
        return true;
    }

    function transferTokenBonus(uint256 amount) private returns (bool) {
        _tokenBonusTxs = _tokenBonusTxs.add(1);

        _tokenBonus = _tokenBonus.add(amount);
        _accountTokenBonus[msg.sender] = _accountTokenBonus[msg.sender].add(amount);

        assert(TOKEN.transfer(msg.sender, amount));
        emit TokenBonusTransfered(msg.sender, amount);
        return true;
    }

    function transferTokenWhitelisted(uint256 amount) private returns (bool) {
        _tokenWhitelistTxs = _tokenWhitelistTxs.add(1);

        _tokenWhitelist = _tokenWhitelist.add(amount);
        _accountTokenWhitelisted[msg.sender] = _accountTokenWhitelisted[msg.sender].add(amount);

        assert(TOKEN.transfer(msg.sender, amount));
        emit TokenWhitelistTransfered(msg.sender, amount);
        return true;
    }

    function closeStage() private returns (bool) {
        emit StageClosed(_stage, msg.sender);
        _stage = _stage.add(1);
        _tokenUsdPrice = stageTokenUsdPrice(_stage);
        _topSalesRatio = topSalesRatio(_stage);

        // Close current season
        uint16 __seasonNumber = calcSeason(_stage);
        if (_season < __seasonNumber) {
            emit SeasonClosed(_season, msg.sender);
            _season = __seasonNumber;
        }

        return true;
    }

    function sendWhitelistReferralRewards(uint256 weiAmount) private {
        uint256 __weiRemain = weiAmount;
        for (uint16 i = 0; i < _rewards_.length; i++) {
            uint256 __weiReward = weiAmount.mul(_rewards_[i]).div(100);
            address payable __receiver = address(uint160(_referrers_[i]));

            _weiRefRewarded = _weiRefRewarded.add(__weiReward);
            _accountWeiRefRewarded[__receiver] = _accountWeiRefRewarded[__receiver].add(__weiReward);
            __weiRemain = __weiRemain.sub(__weiReward);

            __receiver.transfer(__weiReward);
        }

        if (_pending_ > 0)
            _weiPending = _weiPending.add(weiAmount.mul(_pending_).div(100));
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[{"name":"state","type":"bool"}],"name":"setPaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"status","outputs":[{"name":"auditEtherPrice","type":"uint256"},{"name":"stage","type":"uint16"},{"name":"season","type":"uint16"},{"name":"tokenUsdPrice","type":"uint256"},{"name":"currentTopSalesRatio","type":"uint256"},{"name":"txs","type":"uint256"},{"name":"tokenTxs","type":"uint256"},{"name":"tokenBonusTxs","type":"uint256"},{"name":"tokenWhitelistTxs","type":"uint256"},{"name":"tokenIssued","type":"uint256"},{"name":"tokenBonus","type":"uint256"},{"name":"tokenWhitelist","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"etherPriceAuditor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"state","type":"bool"}],"name":"setEtherPriceAuditor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"setEtherPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"transferPending","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"usdAmount","type":"uint256"},{"name":"stageIndex","type":"uint16"}],"name":"usd2tokenByStage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"stageIndex","type":"uint16"}],"name":"stageStatus","outputs":[{"name":"tokenUsdPrice","type":"uint256"},{"name":"tokenCap","type":"uint256"},{"name":"tokenOnSale","type":"uint256"},{"name":"tokenSold","type":"uint256"},{"name":"usdCap","type":"uint256"},{"name":"usdOnSale","type":"uint256"},{"name":"usdSold","type":"uint256"},{"name":"weiTopSalesRatio","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newReceiver","type":"address"}],"name":"changeReceiver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"transferTeam","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sum","outputs":[{"name":"weiSold","type":"uint256"},{"name":"weiReferralRewarded","type":"uint256"},{"name":"weiTopSales","type":"uint256"},{"name":"weiTeam","type":"uint256"},{"name":"weiPending","type":"uint256"},{"name":"weiPendingTransfered","type":"uint256"},{"name":"weiPendingRemain","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"seasonNumber","type":"uint16"},{"name":"account","type":"address"}],"name":"usdSeasonAccountRef","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"seasonNumber","type":"uint16"},{"name":"account","type":"address"}],"name":"usdSeasonAccountPurchased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"seasonNumber","type":"uint16"},{"name":"to","type":"address"}],"name":"transferTopSales","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"receiver","type":"address"},{"name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"seasonNumber","type":"uint16"}],"name":"seasonTopSalesRewards","outputs":[{"name":"weiSold","type":"uint256"},{"name":"weiTopSales","type":"uint256"},{"name":"weiTopSalesTransfered","type":"uint256"},{"name":"weiTopSalesRemain","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"timestamp","type":"uint32"}],"name":"setStartTimestamp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startTimestamp","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"accountQuery","outputs":[{"name":"tokenIssued","type":"uint256"},{"name":"tokenBonus","type":"uint256"},{"name":"tokenWhitelisted","type":"uint256"},{"name":"weiPurchased","type":"uint256"},{"name":"weiReferralRewarded","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"seasonNumber","type":"uint16"}],"name":"seasonRefAccounts","outputs":[{"name":"accounts","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"value","type":"uint256"},{"indexed":true,"name":"account","type":"address"}],"name":"AuditEtherPriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"},{"indexed":false,"name":"state","type":"bool"}],"name":"AuditEtherPriceAuditorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenBonusTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenWhitelistTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"stageIndex","type":"uint16"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"auditEtherPrice","type":"uint256"},{"indexed":false,"name":"weiUsed","type":"uint256"}],"name":"TokenIssuedTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_stageNumber","type":"uint256"},{"indexed":true,"name":"account","type":"address"}],"name":"StageClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_seasonNumber","type":"uint16"},{"indexed":true,"name":"account","type":"address"}],"name":"SeasonClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"seasonNumber","type":"uint16"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"SeasonTopSalesWeiTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TeamWeiTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"PendingWeiTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousReceiver","type":"address"},{"indexed":true,"name":"newReceiver","type":"address"}],"name":"ReceiverChanged","type":"event"}]

600280546001600160a01b0319167313bb73376c18fab89dd5143d50bef64d9d8652001781556004805461ffff191660231781556102606040526006608081815260a091909152600560c081905260e0929092526003610100526101209290925260016101408190526101608190526101808190526101a08190526101c08190526101e081905261020081905261022081905261024052620000a391600f62000232565b506006805467016345785d8a00006001600160481b031990911617600160481b600160901b031916708ac7230489e8000000000000000000000017600160901b600160d81b031916798ac7230489e8000000000000000000000000000000000000000017600160d81b62ffffff0219167d2dc6c0000000000000000000000000000000000000000000000000000000179055600780546216e36062ffffff199091161790556103e86008819055600a60098190556305f5e1009055620f4240600b5564038407b700600c55600d55600e805461ea6061ffff199091161763ffff00001916626400001765ffff0000000019166502580000000017905562e4e1c0601c8190556302faf080601d55601e5560045461ffff16602055348015620001ca57600080fd5b5060008054336001600160a01b031991821681178355600180549092168117600160a01b60ff0219168255825260236020526040909120805460ff19169091179055600e80546801000000000000000069ffffffff00000000000019909116179055620002f3565b600183019183908215620002bc5791602002820160005b838211156200028a57835183826101000a81548161ffff021916908360ff160217905550926020019260020160208160010104928301926001030262000249565b8015620002ba5782816101000a81549061ffff02191690556002016020816001010492830192600103026200028a565b505b50620002ca929150620002ce565b5090565b620002f091905b80821115620002ca57805461ffff19168155600101620002d5565b90565b6128d180620003036000396000f3fe6080604052600436106101665760003560e01c806382bfefc8116100d1578063cea9d26f1161008a578063e6fd48bc11610064578063e6fd48bc14610b13578063f2e2934114610b41578063f2fde38b14610b9f578063f5f56b7a14610bd257610166565b8063cea9d26f14610a4c578063d4eeb6ad14610a8f578063de8f246c14610ae357610166565b806382bfefc814610902578063853255cc146109335780638da5cb5b14610980578063ac5cf93414610995578063b7352bee146109d2578063c225135d14610a0f57610166565b8063375dbc3311610123578063375dbc331461079957806348d3297c146107df578063522f68151461084e578063547e3f06146108875780635c975abb146108ba57806363b26e76146108cf57610166565b806316c38b3c14610611578063200d2ed21461063f578063223e8eff146106ba57806322c8c2cc14610701578063271879911461073c578063294b2ed014610766575b600654600160d81b900462ffffff165a1161018057600080fd5b600254600160a01b900463ffffffff16158015906101ac5750600254600160a01b900463ffffffff1642115b6101ea57604051600160e51b62461bcd0281526004018080602001828103825260298152602001806128536029913960400191505060405180910390fd5b60006003541161022e57604051600160e51b62461bcd02815260040180806020018281038252602a81526020018061287c602a913960400191505060405180910390fd5b610236610c50565b1561028b5760408051600160e51b62461bcd02815260206004820152601f60248201527f544d20546f6b656e205075626c69632d53616c65206973207061757365642e00604482015290519081900360640190fd5b600e5461ffff808216600160301b9092041611156102f35760408051600160e51b62461bcd02815260206004820152601c60248201527f544d20546f6b656e205075626c69632d53616c6520436c6f7365642e00000000604482015290519081900360640190fd5b60065468ffffffffffffffffff1634101561030d57600080fd5b6006546901000000000000000000900468ffffffffffffffffff1634111561033457600080fd5b61033c610c61565b600061034734610fe7565b90508060008080805b60075462ffffff165a1180156103665750600085115b80156103825750600e5461ffff808216600160301b9092041611155b156103ae57600061039286611012565b965090506103a6858263ffffffff61114316565b945050610350565b6103be868663ffffffff61115616565b91506103c982611168565b600654909150600160901b900468ffffffffffffffffff163410610409576103f884600a63ffffffff61118a16565b9250610403836111cb565b61040957fe5b601f5460ff16801561041b5750600084115b1561044757610438610433858563ffffffff61114316565b6112f3565b61043e57fe5b6104478161141b565b841561049d57600061045886611168565b905061046a348263ffffffff61115616565b604051909250339082156108fc029083906000818181858888f1935050505015801561049a573d6000803e3d6000fd5b50505b801561050157600f546104b790600163ffffffff61114316565b600f556016546104cd908263ffffffff61114316565b601655336000908152602c60205260409020546104f0908263ffffffff61114316565b336000908152602c60205260409020555b600e5460009061ffff6201000082048116600160401b90920416111561055d5761055660195461054a601a5461054a60185461054a60175460165461115690919063ffffffff16565b9063ffffffff61115616565b90506105b7565b6105b4662386f26fc100006105a8662386f26fc1000061059c60195461054a601a5461054a60185461054a60175460165461115690919063ffffffff16565b9063ffffffff61118a16565b9063ffffffff61158516565b90505b6019546105ca908263ffffffff61114316565b6019556001546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610607573d6000803e3d6000fd5b5050505050505050005b34801561061d57600080fd5b5061063d6004803603602081101561063457600080fd5b503515156115aa565b005b34801561064b57600080fd5b5061065461168e565b604080519c8d5261ffff9b8c1660208e015299909a168b8a015260608b019790975260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083019190915251908190036101800190f35b3480156106c657600080fd5b506106ed600480360360208110156106dd57600080fd5b50356001600160a01b0316611732565b604080519115158252519081900360200190f35b34801561070d57600080fd5b5061063d6004803603604081101561072457600080fd5b506001600160a01b0381351690602001351515611750565b34801561074857600080fd5b5061063d6004803603602081101561075f57600080fd5b50356117c7565b34801561077257600080fd5b5061063d6004803603602081101561078957600080fd5b50356001600160a01b0316611821565b3480156107a557600080fd5b506107cd600480360360408110156107bc57600080fd5b508035906020013561ffff166118e7565b60408051918252519081900360200190f35b3480156107eb57600080fd5b5061080d6004803603602081101561080257600080fd5b503561ffff1661190f565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561085a57600080fd5b5061063d6004803603604081101561087157600080fd5b506001600160a01b0381351690602001356119e2565b34801561089357600080fd5b5061063d600480360360208110156108aa57600080fd5b50356001600160a01b0316611a57565b3480156108c657600080fd5b506106ed610c50565b3480156108db57600080fd5b5061063d600480360360208110156108f257600080fd5b50356001600160a01b0316611ad3565b34801561090e57600080fd5b50610917611bb5565b604080516001600160a01b039092168252519081900360200190f35b34801561093f57600080fd5b50610948611bc4565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b34801561098c57600080fd5b50610917611beb565b3480156109a157600080fd5b506107cd600480360360408110156109b857600080fd5b50803561ffff1690602001356001600160a01b0316611bfa565b3480156109de57600080fd5b506107cd600480360360408110156109f557600080fd5b50803561ffff1690602001356001600160a01b0316611c28565b348015610a1b57600080fd5b5061063d60048036036040811015610a3257600080fd5b50803561ffff1690602001356001600160a01b0316611c56565b348015610a5857600080fd5b5061063d60048036036060811015610a6f57600080fd5b506001600160a01b03813581169160208101359091169060400135611d42565b348015610a9b57600080fd5b50610abd60048036036020811015610ab257600080fd5b503561ffff16611e8e565b604080519485526020850193909352838301919091526060830152519081900360800190f35b348015610aef57600080fd5b5061063d60048036036020811015610b0657600080fd5b503563ffffffff16611eca565b348015610b1f57600080fd5b50610b28611f18565b6040805163ffffffff9092168252519081900360200190f35b348015610b4d57600080fd5b50610b7460048036036020811015610b6457600080fd5b50356001600160a01b0316611f2b565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b348015610bab57600080fd5b5061063d60048036036020811015610bc257600080fd5b50356001600160a01b0316611f6f565b348015610bde57600080fd5b50610c0060048036036020811015610bf557600080fd5b503561ffff16611fe9565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610c3c578181015183820152602001610c24565b505050509050019250505060405180910390f35b600154600160a01b900460ff165b90565b610c6d602260006127f5565b610c7960216000612813565b60025460408051600160e01b63e2aafa2102815233600482015290516001600160a01b039092169163e2aafa2191602480820192602092909190829003018186803b158015610cc757600080fd5b505afa158015610cdb573d6000803e3d6000fd5b505050506040513d6020811015610cf157600080fd5b5051601f805460ff191691151591909117905560045461ffff166020553360005b600f8161ffff161015610fe35760025460408051600160e11b63167801e10281526001600160a01b03858116600483015291516000939290921691632cf003c291602480820192602092909190829003018186803b158015610d7357600080fd5b505afa158015610d87573d6000803e3d6000fd5b505050506040513d6020811015610d9d57600080fd5b505190506001600160a01b038381169082161415610dbb5750610fe3565b60025460408051600160e21b633b23e57f0281526001600160a01b038481166004830152915161ffff861693929092169163ec8f95fc91602480820192602092909190829003018186803b158015610e1257600080fd5b505afa158015610e26573d6000803e3d6000fd5b505050506040513d6020811015610e3c57600080fd5b50511115610fd957600e54600160401b900461ffff166000908152602f602090815260408083206001600160a01b038516845290915290205460ff16610ef457600e805461ffff600160401b9182900481166000908152602e602090815260408083208054600181810183559185528385200180546001600160a01b038a166001600160a01b031990911681179091559654959095049093168252602f815282822094825293909352909120805460ff191690911790555b610f2a60058361ffff16600f8110610f0857fe5b60108104919091015460205491600f166002026101000a900461ffff16611156565b6020556021600561ffff8416600f8110610f4057fe5b60108082049290920154835460018082018655600095865260208620948204909401805461ffff6002600f948516810261010090810a83810219909416959097160290950a9093049093169091021790556022805491820181559091527f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e5100180546001600160a01b0319166001600160a01b0383161790555b9150600101610d12565b5050565b600061100a670de0b6b3a764000061059c6003548561158590919063ffffffff16565b90505b919050565b6000806000611030600e60069054906101000a900461ffff1661205a565b600e54600160301b900461ffff1660009081526024602052604081205491925090829061105d9087611143565b116110c55761106b8561209e565b611074856122df565b905061108081866122fc565b61108657fe5b600e54600160301b900461ffff166000908152602460205260409020548214156110b8576110b261248a565b6110b857fe5b92506000915061113e9050565b600e54600160301b900461ffff166000908152602460205260408120546110ed908490611156565b90506000611101878363ffffffff61115616565b905061110c8261209e565b611115826122df565b925061112183836122fc565b61112757fe5b61112f61248a565b61113557fe5b91945090925050505b915091565b8181018281101561115057fe5b92915050565b60008282111561116257fe5b50900390565b60035460009061100a9061059c84670de0b6b3a764000063ffffffff61158516565b600080821161119557fe5b60008284816111a057fe5b0490508284816111ac57fe5b068184020184146111b957fe5b8284816111c257fe5b04949350505050565b6011546000906111e290600163ffffffff61114316565b6011556014546111f8908363ffffffff61114316565b601455336000908152602a602052604090205461121b908363ffffffff61114316565b336000818152602a60209081526040808320949094556002548451600160e01b63a9059cbb02815260048101949094526024840187905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b15801561128357600080fd5b505af1158015611297573d6000803e3d6000fd5b505050506040513d60208110156112ad57600080fd5b50516112b557fe5b60408051838152905133917f5dfa1980f175124f0d540c55a7649bbc5b6de5019cd545cca0d0c99854102395919081900360200190a2506001919050565b60125460009061130a90600163ffffffff61114316565b601255601554611320908363ffffffff61114316565b601555336000908152602b6020526040902054611343908363ffffffff61114316565b336000818152602b60209081526040808320949094556002548451600160e01b63a9059cbb02815260048101949094526024840187905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b1580156113ab57600080fd5b505af11580156113bf573d6000803e3d6000fd5b505050506040513d60208110156113d557600080fd5b50516113dd57fe5b60408051838152905133917fdde286fe85c10131d335aaf69d1cab3231636a8636b2a143a91ea821eebc08e8919081900360200190a2506001919050565b8060005b60215461ffff8216101561154957600061146f606461059c60218561ffff168154811061144857fe5b600091825260209091206010820401548891600f166002026101000a900461ffff16611585565b9050600060228361ffff168154811061148457fe5b6000918252602090912001546017546001600160a01b0390911691506114b0908363ffffffff61114316565b6017556001600160a01b0381166000908152602d60205260409020546114dc908363ffffffff61114316565b6001600160a01b0382166000908152602d6020526040902055611505848363ffffffff61115616565b6040519094506001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561153e573d6000803e3d6000fd5b50505060010161141f565b5060205415610fe35761157e61156f606461059c6020548661158590919063ffffffff16565b601a549063ffffffff61114316565b601a555050565b60008261159457506000611150565b50818102818382816115a257fe5b041461115057fe5b6000546001600160a01b031633146115c157600080fd5b600154600160a01b900460ff1680156115d8575080155b156116255760018054600160a01b60ff02191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a161168b565b600154600160a01b900460ff1615801561163c5750805b1561168b5760018054600160a01b60ff021916600160a01b1790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a15b50565b600354600e54600090819081908190819081908190819081908190819061ffff808216600160301b9092041611156116da57600e5461ffff8082169c50620100009091041699506116f7565b600e5461ffff600160301b820481169c50600160401b9091041699505b600d549850601e549750600f549650601054955060115494506012549350601354925060145491506015549050909192939495969798999a9b565b6001600160a01b031660009081526023602052604090205460ff1690565b6000546001600160a01b0316331461176757600080fd5b6001600160a01b038216600081815260236020908152604091829020805460ff1916851515908117909155825190815291517f7309a1bee0ae3b528b2e9f11ab2abd82b54426646b40c5bef678f09554bd7c8f9281900390910190a25050565b3360009081526023602052604090205460ff166117e357600080fd5b600381905560408051828152905133917f4c93251017d1829354b31aa6cb37ab6ec1b2af6a073553f6073a7a3420cf7393919081900360200190a250565b6000546001600160a01b0316331461183857600080fd5b60006118426125d9565b90506001600160a01b03821661185757600080fd5b601b5461186a908263ffffffff61114316565b601b556040805182815290516001600160a01b038416917ffcd200d7cba84a55eb61ba9209300062477f6f08297653f398fa5489b65a1704919081900360200190a26040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156118e2573d6000803e3d6000fd5b505050565b60006119086118f5836125f7565b61059c85620f424063ffffffff61158516565b9392505050565b600080600080600080600080600e60009054906101000a900461ffff1661ffff168961ffff161115611958575060009650869550859450849350839250829150819050806119d7565b611961896125f7565b61ffff8a16600090815260256020526040902054909850945061198389612624565b9650611995878663ffffffff61115616565b61ffff8a1660009081526024602052604090205490965091506119b78961205a565b93506119c9848363ffffffff61115616565b92506119d489612638565b90505b919395975091939597565b6000546001600160a01b031633146119f957600080fd5b6001600160a01b038216611a0c57600080fd5b303181811015611a1b57600080fd5b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015611a51573d6000803e3d6000fd5b50505050565b6000546001600160a01b03163314611a6e57600080fd5b6001600160a01b038116611a8157600080fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fd36aafedb017e43b79d3cf6aa1987d3fbb9fff33e1738c71dbf6b2abaadbded090600090a35050565b6000546001600160a01b03163314611aea57600080fd5b6000611b1560195461054a601a5461054a60185461054a60175460165461115690919063ffffffff16565b90506001600160a01b038216611b2a57600080fd5b601954611b3d908263ffffffff61114316565b6019556040805182815290516001600160a01b038416917fe4de4c8dc6ab2404c805abf5db58633d76fc08b6c8b2c0a34d3a47bfb73663bf919081900360200190a26040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156118e2573d6000803e3d6000fd5b6002546001600160a01b031681565b601654601754601854601954601a54601b546000611be06125d9565b905090919293949596565b6000546001600160a01b031690565b61ffff821660009081526031602090815260408083206001600160a01b038516845290915290205492915050565b61ffff821660009081526030602090815260408083206001600160a01b038516845290915290205492915050565b6000546001600160a01b03163314611c6d57600080fd5b6000611c7883612670565b90506001600160a01b038216611c8d57600080fd5b61ffff8316600090815260286020526040902054611cb1908263ffffffff61114316565b61ffff841660008181526028602090815260409182902093909355805191825291810183905281516001600160a01b038516927f69ccd39c099e91512b4f9c8d1664c05f38430681d4d594a1deec4ace4e7a6e0d928290030190a26040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611a51573d6000803e3d6000fd5b6000546001600160a01b03163314611d5957600080fd5b826001600160a01b038316611d6d57600080fd5b60408051600160e01b6370a0823102815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015611dba57600080fd5b505afa158015611dce573d6000803e3d6000fd5b505050506040513d6020811015611de457600080fd5b5051905082811015611df557600080fd5b816001600160a01b031663a9059cbb85856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e5557600080fd5b505af1158015611e69573d6000803e3d6000fd5b505050506040513d6020811015611e7f57600080fd5b5051611e8757fe5b5050505050565b61ffff811660009081526026602090815260408083205460278352818420546028909352908320549092611ec185612670565b90509193509193565b6000546001600160a01b03163314611ee157600080fd5b6002805463ffffffff909216600160a01b0277ffffffff000000000000000000000000000000000000000019909216919091179055565b600254600160a01b900463ffffffff1690565b6001600160a01b0316600090815260296020908152604080832054602a835281842054602b845282852054602c855283862054602d90955292909420549094919291565b6000546001600160a01b03163314611f8657600080fd5b6001600160a01b038116611f9957600080fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61ffff81166000908152602e602090815260409182902080548351818402810184019094528084526060939283018282801561204e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612030575b50505050509050919050565b6000806120886120798461ffff16600b5461158590919063ffffffff16565b600a549063ffffffff61114316565b9050600c5481111561100a575050600c5461100d565b60006120a982611168565b905060006120b68361269e565b600e54600160401b900461ffff1660009081526030602090815260408083203384529091529020549091506120eb9084611143565b600e805461ffff600160401b909104811660009081526030602090815260408083203384528252808320959095559254600160301b900490911681526024909152205461213e908463ffffffff61114316565b600e805461ffff600160301b90910481166000908152602460209081526040808320959095559254600160401b9004909116815260269091522054612189908363ffffffff61114316565b600e805461ffff600160401b918290048116600090815260266020908152604080832096909655935492909204168152602790915220546121d0908263ffffffff61114316565b600e54600160401b900461ffff166000908152602760205260409020556018546121fa9082611143565b601855601f5460ff16156118e25760005b60215461ffff82161015611a5157600e5461ffff600160401b9091048116600090815260316020526040812060228054612280948994929190871690811061224f57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549063ffffffff61114316565b600e5461ffff600160401b9091048116600090815260316020526040812060228054919390919086169081106122b257fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205560010161220b565b600d5460009061100a9061059c84620f424063ffffffff61158516565b60105460009061231390600163ffffffff61114316565b601055601354612329908463ffffffff61114316565b601355600e54600160301b900461ffff166000908152602560205260409020546123539084611143565b600e54600160301b900461ffff166000908152602560209081526040808320939093553382526029905220546123899084611143565b336000818152602960209081526040808320949094556002548451600160e01b63a9059cbb02815260048101949094526024840188905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b1580156123f157600080fd5b505af1158015612405573d6000803e3d6000fd5b505050506040513d602081101561241b57600080fd5b505161242357fe5b600e546003546040805161ffff600160301b9094049390931683526020830186905282810191909152606082018490525133917f75bc57f66d6542278661715410996538a3764cf993ca52af6e89fbeeb3c3857c919081900360800190a250600192915050565b600e5460408051600160301b90920461ffff1682525160009133917feb233b5b7ba017d2651d779b7619d1a70758bcd13049019e0dd121077a1e1a2f916020908290030190a2600e546124e990600160301b900461ffff1660016126c5565b600e805467ffff0000000000001916600160301b61ffff93841681029190911791829055612519929104166125f7565b600d55600e5461253390600160301b900461ffff16612638565b601e55600e5460009061255090600160301b900461ffff166126d9565b600e5490915061ffff808316600160401b9092041610156125d157600e546040805161ffff600160401b9093049290921682525133917f7d2797fdf1b9f35ccf52e7b904a608332c1db1d8c7f2ff7f28ea7f2d6f87996c919081900360200190a2600e805469ffff00000000000000001916600160401b61ffff8416021790555b600191505090565b60006125f2601b54601a5461115690919063ffffffff16565b905090565b600061100a6126158361ffff1660095461158590919063ffffffff16565b6008549063ffffffff61114316565b600061100a6126328361205a565b836118e7565b600e54601d5460009161100a916126619161ffff9081169161059c91871663ffffffff61158516565b601c549063ffffffff61114316565b61ffff8116600090815260286020908152604080832054602790925282205461100a9163ffffffff61115616565b600061100a6126c06305f5e10061059c601e548661158590919063ffffffff16565b611168565b81810161ffff808416908216101561115057fe5b600061ffff82161561276057600e5460009061270a9061ffff8581169164010000000090041663ffffffff61276816565b600e549091506000906127329061ffff8681169164010000000090041663ffffffff6127cc16565b61ffff1611156127595761275161ffff8216600163ffffffff6126c516565b91505061100d565b905061100d565b506001919050565b6000808261ffff161161277757fe5b60008261ffff168461ffff168161278a57fe5b0461ffff1690508261ffff168461ffff16816127a257fe5b0661ffff16818461ffff1602018461ffff16146127bb57fe5b8261ffff168461ffff16816111c257fe5b600061ffff82166127dc57600080fd5b8161ffff168361ffff16816127ed57fe5b069392505050565b508054600082559060005260206000209081019061168b9190612834565b50805460008255600f01601090049060005260206000209081019061168b91905b610c5e91905b8082111561284e576000815560010161283a565b509056fe544d20546f6b656e205075626c69632d53616c6520686173206e6f742073746172746564207965742e417564697420455448207072696365206d7573742062652067726561746572207468616e207a65726f2ea165627a7a7230582067626dee79659542416a23e3cb312505873473930b24bb76ff18cb2ddc500d4c0029

Deployed Bytecode

0x6080604052600436106101665760003560e01c806382bfefc8116100d1578063cea9d26f1161008a578063e6fd48bc11610064578063e6fd48bc14610b13578063f2e2934114610b41578063f2fde38b14610b9f578063f5f56b7a14610bd257610166565b8063cea9d26f14610a4c578063d4eeb6ad14610a8f578063de8f246c14610ae357610166565b806382bfefc814610902578063853255cc146109335780638da5cb5b14610980578063ac5cf93414610995578063b7352bee146109d2578063c225135d14610a0f57610166565b8063375dbc3311610123578063375dbc331461079957806348d3297c146107df578063522f68151461084e578063547e3f06146108875780635c975abb146108ba57806363b26e76146108cf57610166565b806316c38b3c14610611578063200d2ed21461063f578063223e8eff146106ba57806322c8c2cc14610701578063271879911461073c578063294b2ed014610766575b600654600160d81b900462ffffff165a1161018057600080fd5b600254600160a01b900463ffffffff16158015906101ac5750600254600160a01b900463ffffffff1642115b6101ea57604051600160e51b62461bcd0281526004018080602001828103825260298152602001806128536029913960400191505060405180910390fd5b60006003541161022e57604051600160e51b62461bcd02815260040180806020018281038252602a81526020018061287c602a913960400191505060405180910390fd5b610236610c50565b1561028b5760408051600160e51b62461bcd02815260206004820152601f60248201527f544d20546f6b656e205075626c69632d53616c65206973207061757365642e00604482015290519081900360640190fd5b600e5461ffff808216600160301b9092041611156102f35760408051600160e51b62461bcd02815260206004820152601c60248201527f544d20546f6b656e205075626c69632d53616c6520436c6f7365642e00000000604482015290519081900360640190fd5b60065468ffffffffffffffffff1634101561030d57600080fd5b6006546901000000000000000000900468ffffffffffffffffff1634111561033457600080fd5b61033c610c61565b600061034734610fe7565b90508060008080805b60075462ffffff165a1180156103665750600085115b80156103825750600e5461ffff808216600160301b9092041611155b156103ae57600061039286611012565b965090506103a6858263ffffffff61114316565b945050610350565b6103be868663ffffffff61115616565b91506103c982611168565b600654909150600160901b900468ffffffffffffffffff163410610409576103f884600a63ffffffff61118a16565b9250610403836111cb565b61040957fe5b601f5460ff16801561041b5750600084115b1561044757610438610433858563ffffffff61114316565b6112f3565b61043e57fe5b6104478161141b565b841561049d57600061045886611168565b905061046a348263ffffffff61115616565b604051909250339082156108fc029083906000818181858888f1935050505015801561049a573d6000803e3d6000fd5b50505b801561050157600f546104b790600163ffffffff61114316565b600f556016546104cd908263ffffffff61114316565b601655336000908152602c60205260409020546104f0908263ffffffff61114316565b336000908152602c60205260409020555b600e5460009061ffff6201000082048116600160401b90920416111561055d5761055660195461054a601a5461054a60185461054a60175460165461115690919063ffffffff16565b9063ffffffff61115616565b90506105b7565b6105b4662386f26fc100006105a8662386f26fc1000061059c60195461054a601a5461054a60185461054a60175460165461115690919063ffffffff16565b9063ffffffff61118a16565b9063ffffffff61158516565b90505b6019546105ca908263ffffffff61114316565b6019556001546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610607573d6000803e3d6000fd5b5050505050505050005b34801561061d57600080fd5b5061063d6004803603602081101561063457600080fd5b503515156115aa565b005b34801561064b57600080fd5b5061065461168e565b604080519c8d5261ffff9b8c1660208e015299909a168b8a015260608b019790975260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083019190915251908190036101800190f35b3480156106c657600080fd5b506106ed600480360360208110156106dd57600080fd5b50356001600160a01b0316611732565b604080519115158252519081900360200190f35b34801561070d57600080fd5b5061063d6004803603604081101561072457600080fd5b506001600160a01b0381351690602001351515611750565b34801561074857600080fd5b5061063d6004803603602081101561075f57600080fd5b50356117c7565b34801561077257600080fd5b5061063d6004803603602081101561078957600080fd5b50356001600160a01b0316611821565b3480156107a557600080fd5b506107cd600480360360408110156107bc57600080fd5b508035906020013561ffff166118e7565b60408051918252519081900360200190f35b3480156107eb57600080fd5b5061080d6004803603602081101561080257600080fd5b503561ffff1661190f565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561085a57600080fd5b5061063d6004803603604081101561087157600080fd5b506001600160a01b0381351690602001356119e2565b34801561089357600080fd5b5061063d600480360360208110156108aa57600080fd5b50356001600160a01b0316611a57565b3480156108c657600080fd5b506106ed610c50565b3480156108db57600080fd5b5061063d600480360360208110156108f257600080fd5b50356001600160a01b0316611ad3565b34801561090e57600080fd5b50610917611bb5565b604080516001600160a01b039092168252519081900360200190f35b34801561093f57600080fd5b50610948611bc4565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b34801561098c57600080fd5b50610917611beb565b3480156109a157600080fd5b506107cd600480360360408110156109b857600080fd5b50803561ffff1690602001356001600160a01b0316611bfa565b3480156109de57600080fd5b506107cd600480360360408110156109f557600080fd5b50803561ffff1690602001356001600160a01b0316611c28565b348015610a1b57600080fd5b5061063d60048036036040811015610a3257600080fd5b50803561ffff1690602001356001600160a01b0316611c56565b348015610a5857600080fd5b5061063d60048036036060811015610a6f57600080fd5b506001600160a01b03813581169160208101359091169060400135611d42565b348015610a9b57600080fd5b50610abd60048036036020811015610ab257600080fd5b503561ffff16611e8e565b604080519485526020850193909352838301919091526060830152519081900360800190f35b348015610aef57600080fd5b5061063d60048036036020811015610b0657600080fd5b503563ffffffff16611eca565b348015610b1f57600080fd5b50610b28611f18565b6040805163ffffffff9092168252519081900360200190f35b348015610b4d57600080fd5b50610b7460048036036020811015610b6457600080fd5b50356001600160a01b0316611f2b565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b348015610bab57600080fd5b5061063d60048036036020811015610bc257600080fd5b50356001600160a01b0316611f6f565b348015610bde57600080fd5b50610c0060048036036020811015610bf557600080fd5b503561ffff16611fe9565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610c3c578181015183820152602001610c24565b505050509050019250505060405180910390f35b600154600160a01b900460ff165b90565b610c6d602260006127f5565b610c7960216000612813565b60025460408051600160e01b63e2aafa2102815233600482015290516001600160a01b039092169163e2aafa2191602480820192602092909190829003018186803b158015610cc757600080fd5b505afa158015610cdb573d6000803e3d6000fd5b505050506040513d6020811015610cf157600080fd5b5051601f805460ff191691151591909117905560045461ffff166020553360005b600f8161ffff161015610fe35760025460408051600160e11b63167801e10281526001600160a01b03858116600483015291516000939290921691632cf003c291602480820192602092909190829003018186803b158015610d7357600080fd5b505afa158015610d87573d6000803e3d6000fd5b505050506040513d6020811015610d9d57600080fd5b505190506001600160a01b038381169082161415610dbb5750610fe3565b60025460408051600160e21b633b23e57f0281526001600160a01b038481166004830152915161ffff861693929092169163ec8f95fc91602480820192602092909190829003018186803b158015610e1257600080fd5b505afa158015610e26573d6000803e3d6000fd5b505050506040513d6020811015610e3c57600080fd5b50511115610fd957600e54600160401b900461ffff166000908152602f602090815260408083206001600160a01b038516845290915290205460ff16610ef457600e805461ffff600160401b9182900481166000908152602e602090815260408083208054600181810183559185528385200180546001600160a01b038a166001600160a01b031990911681179091559654959095049093168252602f815282822094825293909352909120805460ff191690911790555b610f2a60058361ffff16600f8110610f0857fe5b60108104919091015460205491600f166002026101000a900461ffff16611156565b6020556021600561ffff8416600f8110610f4057fe5b60108082049290920154835460018082018655600095865260208620948204909401805461ffff6002600f948516810261010090810a83810219909416959097160290950a9093049093169091021790556022805491820181559091527f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e5100180546001600160a01b0319166001600160a01b0383161790555b9150600101610d12565b5050565b600061100a670de0b6b3a764000061059c6003548561158590919063ffffffff16565b90505b919050565b6000806000611030600e60069054906101000a900461ffff1661205a565b600e54600160301b900461ffff1660009081526024602052604081205491925090829061105d9087611143565b116110c55761106b8561209e565b611074856122df565b905061108081866122fc565b61108657fe5b600e54600160301b900461ffff166000908152602460205260409020548214156110b8576110b261248a565b6110b857fe5b92506000915061113e9050565b600e54600160301b900461ffff166000908152602460205260408120546110ed908490611156565b90506000611101878363ffffffff61115616565b905061110c8261209e565b611115826122df565b925061112183836122fc565b61112757fe5b61112f61248a565b61113557fe5b91945090925050505b915091565b8181018281101561115057fe5b92915050565b60008282111561116257fe5b50900390565b60035460009061100a9061059c84670de0b6b3a764000063ffffffff61158516565b600080821161119557fe5b60008284816111a057fe5b0490508284816111ac57fe5b068184020184146111b957fe5b8284816111c257fe5b04949350505050565b6011546000906111e290600163ffffffff61114316565b6011556014546111f8908363ffffffff61114316565b601455336000908152602a602052604090205461121b908363ffffffff61114316565b336000818152602a60209081526040808320949094556002548451600160e01b63a9059cbb02815260048101949094526024840187905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b15801561128357600080fd5b505af1158015611297573d6000803e3d6000fd5b505050506040513d60208110156112ad57600080fd5b50516112b557fe5b60408051838152905133917f5dfa1980f175124f0d540c55a7649bbc5b6de5019cd545cca0d0c99854102395919081900360200190a2506001919050565b60125460009061130a90600163ffffffff61114316565b601255601554611320908363ffffffff61114316565b601555336000908152602b6020526040902054611343908363ffffffff61114316565b336000818152602b60209081526040808320949094556002548451600160e01b63a9059cbb02815260048101949094526024840187905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b1580156113ab57600080fd5b505af11580156113bf573d6000803e3d6000fd5b505050506040513d60208110156113d557600080fd5b50516113dd57fe5b60408051838152905133917fdde286fe85c10131d335aaf69d1cab3231636a8636b2a143a91ea821eebc08e8919081900360200190a2506001919050565b8060005b60215461ffff8216101561154957600061146f606461059c60218561ffff168154811061144857fe5b600091825260209091206010820401548891600f166002026101000a900461ffff16611585565b9050600060228361ffff168154811061148457fe5b6000918252602090912001546017546001600160a01b0390911691506114b0908363ffffffff61114316565b6017556001600160a01b0381166000908152602d60205260409020546114dc908363ffffffff61114316565b6001600160a01b0382166000908152602d6020526040902055611505848363ffffffff61115616565b6040519094506001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561153e573d6000803e3d6000fd5b50505060010161141f565b5060205415610fe35761157e61156f606461059c6020548661158590919063ffffffff16565b601a549063ffffffff61114316565b601a555050565b60008261159457506000611150565b50818102818382816115a257fe5b041461115057fe5b6000546001600160a01b031633146115c157600080fd5b600154600160a01b900460ff1680156115d8575080155b156116255760018054600160a01b60ff02191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a161168b565b600154600160a01b900460ff1615801561163c5750805b1561168b5760018054600160a01b60ff021916600160a01b1790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a15b50565b600354600e54600090819081908190819081908190819081908190819061ffff808216600160301b9092041611156116da57600e5461ffff8082169c50620100009091041699506116f7565b600e5461ffff600160301b820481169c50600160401b9091041699505b600d549850601e549750600f549650601054955060115494506012549350601354925060145491506015549050909192939495969798999a9b565b6001600160a01b031660009081526023602052604090205460ff1690565b6000546001600160a01b0316331461176757600080fd5b6001600160a01b038216600081815260236020908152604091829020805460ff1916851515908117909155825190815291517f7309a1bee0ae3b528b2e9f11ab2abd82b54426646b40c5bef678f09554bd7c8f9281900390910190a25050565b3360009081526023602052604090205460ff166117e357600080fd5b600381905560408051828152905133917f4c93251017d1829354b31aa6cb37ab6ec1b2af6a073553f6073a7a3420cf7393919081900360200190a250565b6000546001600160a01b0316331461183857600080fd5b60006118426125d9565b90506001600160a01b03821661185757600080fd5b601b5461186a908263ffffffff61114316565b601b556040805182815290516001600160a01b038416917ffcd200d7cba84a55eb61ba9209300062477f6f08297653f398fa5489b65a1704919081900360200190a26040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156118e2573d6000803e3d6000fd5b505050565b60006119086118f5836125f7565b61059c85620f424063ffffffff61158516565b9392505050565b600080600080600080600080600e60009054906101000a900461ffff1661ffff168961ffff161115611958575060009650869550859450849350839250829150819050806119d7565b611961896125f7565b61ffff8a16600090815260256020526040902054909850945061198389612624565b9650611995878663ffffffff61115616565b61ffff8a1660009081526024602052604090205490965091506119b78961205a565b93506119c9848363ffffffff61115616565b92506119d489612638565b90505b919395975091939597565b6000546001600160a01b031633146119f957600080fd5b6001600160a01b038216611a0c57600080fd5b303181811015611a1b57600080fd5b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015611a51573d6000803e3d6000fd5b50505050565b6000546001600160a01b03163314611a6e57600080fd5b6001600160a01b038116611a8157600080fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fd36aafedb017e43b79d3cf6aa1987d3fbb9fff33e1738c71dbf6b2abaadbded090600090a35050565b6000546001600160a01b03163314611aea57600080fd5b6000611b1560195461054a601a5461054a60185461054a60175460165461115690919063ffffffff16565b90506001600160a01b038216611b2a57600080fd5b601954611b3d908263ffffffff61114316565b6019556040805182815290516001600160a01b038416917fe4de4c8dc6ab2404c805abf5db58633d76fc08b6c8b2c0a34d3a47bfb73663bf919081900360200190a26040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156118e2573d6000803e3d6000fd5b6002546001600160a01b031681565b601654601754601854601954601a54601b546000611be06125d9565b905090919293949596565b6000546001600160a01b031690565b61ffff821660009081526031602090815260408083206001600160a01b038516845290915290205492915050565b61ffff821660009081526030602090815260408083206001600160a01b038516845290915290205492915050565b6000546001600160a01b03163314611c6d57600080fd5b6000611c7883612670565b90506001600160a01b038216611c8d57600080fd5b61ffff8316600090815260286020526040902054611cb1908263ffffffff61114316565b61ffff841660008181526028602090815260409182902093909355805191825291810183905281516001600160a01b038516927f69ccd39c099e91512b4f9c8d1664c05f38430681d4d594a1deec4ace4e7a6e0d928290030190a26040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611a51573d6000803e3d6000fd5b6000546001600160a01b03163314611d5957600080fd5b826001600160a01b038316611d6d57600080fd5b60408051600160e01b6370a0823102815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015611dba57600080fd5b505afa158015611dce573d6000803e3d6000fd5b505050506040513d6020811015611de457600080fd5b5051905082811015611df557600080fd5b816001600160a01b031663a9059cbb85856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e5557600080fd5b505af1158015611e69573d6000803e3d6000fd5b505050506040513d6020811015611e7f57600080fd5b5051611e8757fe5b5050505050565b61ffff811660009081526026602090815260408083205460278352818420546028909352908320549092611ec185612670565b90509193509193565b6000546001600160a01b03163314611ee157600080fd5b6002805463ffffffff909216600160a01b0277ffffffff000000000000000000000000000000000000000019909216919091179055565b600254600160a01b900463ffffffff1690565b6001600160a01b0316600090815260296020908152604080832054602a835281842054602b845282852054602c855283862054602d90955292909420549094919291565b6000546001600160a01b03163314611f8657600080fd5b6001600160a01b038116611f9957600080fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61ffff81166000908152602e602090815260409182902080548351818402810184019094528084526060939283018282801561204e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612030575b50505050509050919050565b6000806120886120798461ffff16600b5461158590919063ffffffff16565b600a549063ffffffff61114316565b9050600c5481111561100a575050600c5461100d565b60006120a982611168565b905060006120b68361269e565b600e54600160401b900461ffff1660009081526030602090815260408083203384529091529020549091506120eb9084611143565b600e805461ffff600160401b909104811660009081526030602090815260408083203384528252808320959095559254600160301b900490911681526024909152205461213e908463ffffffff61114316565b600e805461ffff600160301b90910481166000908152602460209081526040808320959095559254600160401b9004909116815260269091522054612189908363ffffffff61114316565b600e805461ffff600160401b918290048116600090815260266020908152604080832096909655935492909204168152602790915220546121d0908263ffffffff61114316565b600e54600160401b900461ffff166000908152602760205260409020556018546121fa9082611143565b601855601f5460ff16156118e25760005b60215461ffff82161015611a5157600e5461ffff600160401b9091048116600090815260316020526040812060228054612280948994929190871690811061224f57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549063ffffffff61114316565b600e5461ffff600160401b9091048116600090815260316020526040812060228054919390919086169081106122b257fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205560010161220b565b600d5460009061100a9061059c84620f424063ffffffff61158516565b60105460009061231390600163ffffffff61114316565b601055601354612329908463ffffffff61114316565b601355600e54600160301b900461ffff166000908152602560205260409020546123539084611143565b600e54600160301b900461ffff166000908152602560209081526040808320939093553382526029905220546123899084611143565b336000818152602960209081526040808320949094556002548451600160e01b63a9059cbb02815260048101949094526024840188905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b1580156123f157600080fd5b505af1158015612405573d6000803e3d6000fd5b505050506040513d602081101561241b57600080fd5b505161242357fe5b600e546003546040805161ffff600160301b9094049390931683526020830186905282810191909152606082018490525133917f75bc57f66d6542278661715410996538a3764cf993ca52af6e89fbeeb3c3857c919081900360800190a250600192915050565b600e5460408051600160301b90920461ffff1682525160009133917feb233b5b7ba017d2651d779b7619d1a70758bcd13049019e0dd121077a1e1a2f916020908290030190a2600e546124e990600160301b900461ffff1660016126c5565b600e805467ffff0000000000001916600160301b61ffff93841681029190911791829055612519929104166125f7565b600d55600e5461253390600160301b900461ffff16612638565b601e55600e5460009061255090600160301b900461ffff166126d9565b600e5490915061ffff808316600160401b9092041610156125d157600e546040805161ffff600160401b9093049290921682525133917f7d2797fdf1b9f35ccf52e7b904a608332c1db1d8c7f2ff7f28ea7f2d6f87996c919081900360200190a2600e805469ffff00000000000000001916600160401b61ffff8416021790555b600191505090565b60006125f2601b54601a5461115690919063ffffffff16565b905090565b600061100a6126158361ffff1660095461158590919063ffffffff16565b6008549063ffffffff61114316565b600061100a6126328361205a565b836118e7565b600e54601d5460009161100a916126619161ffff9081169161059c91871663ffffffff61158516565b601c549063ffffffff61114316565b61ffff8116600090815260286020908152604080832054602790925282205461100a9163ffffffff61115616565b600061100a6126c06305f5e10061059c601e548661158590919063ffffffff16565b611168565b81810161ffff808416908216101561115057fe5b600061ffff82161561276057600e5460009061270a9061ffff8581169164010000000090041663ffffffff61276816565b600e549091506000906127329061ffff8681169164010000000090041663ffffffff6127cc16565b61ffff1611156127595761275161ffff8216600163ffffffff6126c516565b91505061100d565b905061100d565b506001919050565b6000808261ffff161161277757fe5b60008261ffff168461ffff168161278a57fe5b0461ffff1690508261ffff168461ffff16816127a257fe5b0661ffff16818461ffff1602018461ffff16146127bb57fe5b8261ffff168461ffff16816111c257fe5b600061ffff82166127dc57600080fd5b8161ffff168361ffff16816127ed57fe5b069392505050565b508054600082559060005260206000209081019061168b9190612834565b50805460008255600f01601090049060005260206000209081019061168b91905b610c5e91905b8082111561284e576000815560010161283a565b509056fe544d20546f6b656e205075626c69632d53616c6520686173206e6f742073746172746564207965742e417564697420455448207072696365206d7573742062652067726561746572207468616e207a65726f2ea165627a7a7230582067626dee79659542416a23e3cb312505873473930b24bb76ff18cb2ddc500d4c0029

Deployed Bytecode Sourcemap

4690:21738:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14476:7;;-1:-1:-1;;;14476:7:0;;;;14464:9;:19;14456:28;;;;;;14553:15;;-1:-1:-1;;;14553:15:0;;;;:19;;;;:44;;-1:-1:-1;14582:15:0;;-1:-1:-1;;;14582:15:0;;;;14576:3;:21;14553:44;14545:98;;;;-1:-1:-1;;;;;14545:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14676:1;14662:11;;:15;14654:77;;;;-1:-1:-1;;;;;14654:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14751:8;:6;:8::i;:::-;14750:9;14742:66;;;;;-1:-1:-1;;;;;14742:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14837:9;;;;;;-1:-1:-1;;;14827:6:0;;;;:19;;14819:63;;;;;-1:-1:-1;;;;;14819:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18433:7;;;;18420:9;:20;;18412:29;;;;;;18473:7;;;;;;;18460:9;:20;;18452:29;;;;;;18531:23;:21;:23::i;:::-;18565:19;18587:18;18595:9;18587:7;:18::i;:::-;18565:40;-1:-1:-1;18565:40:0;18616:19;;;;18809:247;18828:6;;;;18816:9;:18;:37;;;;;18852:1;18838:11;:15;18816:37;:60;;;;-1:-1:-1;18867:9:0;;;;;;-1:-1:-1;;;18857:6:0;;;;:19;;18816:60;18809:247;;;18893:23;18964:15;18967:11;18964:2;:15::i;:::-;18931:48;-1:-1:-1;18931:48:0;-1:-1:-1;19010:34:0;:13;18931:48;19010:34;:17;:34;:::i;:::-;18994:50;;18809:247;;;;19097:28;:11;19113;19097:28;:15;:28;:::i;:::-;19085:40;;19148:18;19156:9;19148:7;:18::i;:::-;19218:9;;19136:30;;-1:-1:-1;;;;19218:9:0;;;;19205;:22;19201:146;;19259:21;:13;19277:2;19259:21;:17;:21;:::i;:::-;19244:36;;19302:32;19321:12;19302:18;:32::i;:::-;19295:40;;;;19429:13;;;;:34;;;;;19462:1;19446:13;:17;19429:34;19425:260;;;19525:57;19550:31;:13;19568:12;19550:31;:17;:31;:::i;:::-;19525:24;:57::i;:::-;19518:65;;;;19634:39;19663:9;19634:28;:39::i;:::-;19737:15;;19733:226;;19769:19;19791:20;19799:11;19791:7;:20::i;:::-;19769:42;-1:-1:-1;19840:26:0;:9;19769:42;19840:26;:13;:26;:::i;:::-;19915:32;;19828:38;;-1:-1:-1;19915:10:0;;:32;;;;;19935:11;;19915:32;;;;19935:11;19915:10;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19915:32:0;19733:226;;19995:13;;19991:210;;20032:4;;:11;;20041:1;20032:11;:8;:11;:::i;:::-;20025:4;:18;20069:8;;:23;;20082:9;20069:23;:12;:23;:::i;:::-;20058:8;:34;20163:10;20142:32;;;;:20;:32;;;;;;:47;;20179:9;20142:47;:36;:47;:::i;:::-;20128:10;20107:32;;;;:20;:32;;;;;:82;19991:210;20276:10;;20234:17;;20276:10;;;;;;-1:-1:-1;;;20266:7:0;;;;:20;20262:280;;;20313:78;20382:8;;20313:64;20365:11;;20313:47;20347:12;;20313:29;20326:15;;20313:8;;:12;;:29;;;;:::i;:::-;:33;:47;:33;:47;:::i;:78::-;20301:90;;20262:280;;;20432:110;20531:10;20432:94;20515:10;20432:78;20501:8;;20432:64;20484:11;;20432:47;20466:12;;20432:29;20445:15;;20432:8;;:12;;:29;;;;:::i;:78::-;:82;:94;:82;:94;:::i;:::-;:98;:110;:98;:110;:::i;:::-;20420:122;;20262:280;20566:8;;:23;;20579:9;20566:23;:12;:23;:::i;:::-;20555:8;:34;20600:9;;:29;;-1:-1:-1;;;;;20600:9:0;;;;:29;;;;;20619:9;;20600;:29;:9;:29;20619:9;20600;:29;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;14893:1:0;;;;;;;4690:21738;3833:281;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3833:281:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3833:281:0;;;;:::i;:::-;;12892:981;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12892:981:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10161:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10161:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10161:125:0;-1:-1:-1;;;;;10161:125:0;;:::i;:::-;;;;;;;;;;;;;;;;;;10294:194;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10294:194:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10294:194:0;;;;;;;;;;:::i;9989:164::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9989:164:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9989:164:0;;:::i;12205:319::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12205:319:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12205:319:0;-1:-1:-1;;;;;12205:319:0;;:::i;11084:178::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11084:178:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11084:178:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15730:785;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15730:785:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15730:785:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3196:241;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3196:241:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3196:241:0;;;;;;;;:::i;2561:272::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2561:272:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2561:272:0;-1:-1:-1;;;;;2561:272:0;;:::i;3655:78::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3655:78:0;;;:::i;12532:350::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12532:350:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12532:350:0;-1:-1:-1;;;;;12532:350:0;;:::i;4814:72::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4814:72:0;;;:::i;:::-;;;;-1:-1:-1;;;;;4814:72:0;;;;;;;;;;;;;;13881:535;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13881:535:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2125:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2125:79:0;;;:::i;18047:166::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18047:166:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18047:166:0;;;;;;;;-1:-1:-1;;;;;18047:166:0;;:::i;17861:178::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17861:178:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17861:178:0;;;;;;;;-1:-1:-1;;;;;17861:178:0;;:::i;11644:423::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11644:423:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11644:423:0;;;;;;;;-1:-1:-1;;;;;11644:423:0;;:::i;2841:345::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2841:345:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2841:345:0;;;;;;;;;;;;;;;;;:::i;16719:452::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16719:452:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16719:452:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9759:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9759:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9759:110:0;;;;:::i;9655:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9655:96:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17179:508;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17179:508:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17179:508:0;-1:-1:-1;;;;;17179:508:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2305:248;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2305:248:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2305:248:0;-1:-1:-1;;;;;2305:248:0;;:::i;17695:158::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17695:158:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17695:158:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17695:158:0;;;;;;;;;;;;;;;;;3655:78;3718:7;;-1:-1:-1;;;3718:7:0;;;;3655:78;;:::o;20698:1001::-;20750:18;20757:11;;20750:18;:::i;:::-;20779:16;20786:9;;20779:16;:::i;:::-;20824:5;;:29;;;-1:-1:-1;;;;;20824:29:0;;20842:10;20824:29;;;;;;-1:-1:-1;;;;;20824:5:0;;;;:17;;:29;;;;;;;;;;;;;;;:5;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;20824:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20824:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20824:29:0;20808:13;:45;;-1:-1:-1;;20808:45:0;;;;;;;;;;20876:29;;;;20824;20864:41;20937:10;-1:-1:-1;20958:734:0;20980:32;20976:1;:36;;;20958:734;;;21057:5;;:24;;;-1:-1:-1;;;;;21057:24:0;;-1:-1:-1;;;;;21057:24:0;;;;;;;;;21034:20;;21057:5;;;;;:14;;:24;;;;;;;;;;;;;;;:5;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;21057:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21057:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21057:24:0;;-1:-1:-1;;;;;;21102:24:0;;;;;;;21098:54;;;21147:5;;;21098:54;21173:5;;:28;;;-1:-1:-1;;;;;21173:28:0;;-1:-1:-1;;;;;21173:28:0;;;;;;;;;:32;;;;:5;;;;;:14;;:28;;;;;;;;;;;;;;;:5;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;21173:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21173:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21173:28:0;:32;21169:472;;;21252:7;;-1:-1:-1;;;21252:7:0;;;;21231:29;;;;:20;:29;;;;;;;;-1:-1:-1;;;;;21231:43:0;;;;;;;;;;;;21226:212;;21318:7;;;;-1:-1:-1;;;21318:7:0;;;;;;21299:27;;;;:18;:27;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;21299:46:0;;;;;;;;;-1:-1:-1;;;;;21299:46:0;;-1:-1:-1;;;;;;21299:46:0;;;;;;;;21389:7;;;;;;;;;21368:29;;:20;:29;;;;;:43;;;;;;;;;;:50;;-1:-1:-1;;21368:50:0;;;;;;21226:212;21470:43;21484:25;21510:1;21484:28;;;;;;;;;;;;;;;;;21470:9;;;21484:28;;;;;;;;;;21470:13;:43::i;:::-;21458:9;:55;21532:9;21547:25;:28;;;;;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;21532:44:0;;;;;;;;;;;;;;21547:28;;;21532:44;;;;;21547:28;21532:44;;;;;;;;;;21547:28;;;;;;;;;;;;;;21532:44;;;;;;21595:11;27:10:-1;;23:18;;;45:23;;21595:30:0;;;;;;;-1:-1:-1;;;;;;21595:30:0;-1:-1:-1;;;;;21595:30:0;;;;;21169:472;21668:12;-1:-1:-1;21014:3:0;;20958:734;;;;20698:1001;:::o;10671:126::-;10726:7;10753:36;10781:7;10753:23;10764:11;;10753:6;:10;;:23;;;;:::i;:36::-;10746:43;;10671:126;;;;:::o;21750:1009::-;21798:7;21807;21827:21;21851:19;21863:6;;;;;;;;;;;21851:11;:19::i;:::-;21954:6;;-1:-1:-1;;;21954:6:0;;;;21881:21;21940;;;:13;:21;;;;;;21827:43;;-1:-1:-1;21881:21:0;21827:43;;21940:36;;21966:9;21940:25;:36::i;:::-;:53;21936:439;;22010:18;22018:9;22010:7;:18::i;:::-;22061:20;22071:9;22061;:20::i;:::-;22045:36;;22103:45;22123:13;22138:9;22103:19;:45::i;:::-;22096:53;;;;22258:6;;-1:-1:-1;;;22258:6:0;;;;22244:21;;;;:13;:21;;;;;;22227:38;;22223:99;;;22293:12;:10;:12::i;:::-;22286:20;;;;22346:13;-1:-1:-1;22361:1:0;;-1:-1:-1;22338:25:0;;-1:-1:-1;22338:25:0;21936:439;22463:6;;-1:-1:-1;;;22463:6:0;;;;22411:17;22449:21;;;:13;:21;;;;;;22431:40;;:13;;:17;:40::i;:::-;22411:60;-1:-1:-1;22482:19:0;22504:24;:9;22411:60;22504:24;:13;:24;:::i;:::-;22482:46;;22541:18;22549:9;22541:7;:18::i;:::-;22588:20;22598:9;22588;:20::i;:::-;22572:36;;22626:45;22646:13;22661:9;22626:19;:45::i;:::-;22619:53;;;;22690:12;:10;:12::i;:::-;22683:20;;;;22724:13;;-1:-1:-1;22739:11:0;;-1:-1:-1;;;21750:1009:0;;;;:::o;82:141::-;166:5;;;189:6;;;;182:14;;;;82:141;;;;:::o;233:123::-;291:7;323:1;318;:6;;311:14;;;;-1:-1:-1;343:5:0;;;233:123::o;10805:126::-;10911:11;;10860:7;;10887:36;;:19;:6;10898:7;10887:19;:10;:19;:::i;578:187::-;636:7;667:1;663;:5;656:13;;;;680:9;696:1;692;:5;;;;;;680:17;;732:1;728;:5;;;;;;724:1;720;:5;:13;715:1;:18;708:26;;;;756:1;752;:5;;;;;;;578:187;-1:-1:-1;;;;578:187:0:o;24368:393::-;24463:14;;24429:4;;24463:21;;24482:1;24463:21;:18;:21;:::i;:::-;24446:14;:38;24511:11;;:23;;24527:6;24511:23;:15;:23;:::i;:::-;24497:11;:37;24597:10;24578:30;;;;:18;:30;;;;;;:42;;24613:6;24578:42;:34;:42;:::i;:::-;24564:10;24545:30;;;;:18;:30;;;;;;;;:75;;;;24640:5;;:34;;-1:-1:-1;;;;;24640:34:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24640:5:0;;;;:14;;:34;;;;;;;;;;;;;:5;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;24640:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24640:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24640:34:0;24633:42;;;;24691:40;;;;;;;;24712:10;;24691:40;;;;;;;;;;-1:-1:-1;24749:4:0;24368:393;;;:::o;24769:431::-;24874:18;;24836:4;;24874:25;;24897:1;24874:25;:22;:25;:::i;:::-;24853:18;:46;24930:15;;:27;;24950:6;24930:27;:19;:27;:::i;:::-;24912:15;:45;25032:10;25007:36;;;;:24;:36;;;;;;:48;;25048:6;25007:48;:40;:48;:::i;:::-;24993:10;24968:36;;;;:24;:36;;;;;;;;:87;;;;25075:5;;:34;;-1:-1:-1;;;;;25075:34:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25075:5:0;;;;:14;;:34;;;;;;;;;;;;;:5;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;25075:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25075:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25075:34:0;25068:42;;;;25126:44;;;;;;;;25151:10;;25126:44;;;;;;;;;;-1:-1:-1;25188:4:0;24769:431;;;:::o;25708:717::-;25806:9;25784:19;25826:483;25849:9;:16;25845:20;;;;25826:483;;;25887:19;25909:36;25941:3;25909:27;25923:9;25933:1;25923:12;;;;;;;;;;;;;;;;;;;;;;;25909:9;;25923:12;;;;;;;;;;25909:13;:27::i;:36::-;25887:58;;25960:26;26005:11;26017:1;26005:14;;;;;;;;;;;;;;;;;;;;26056:15;;-1:-1:-1;;;;;26005:14:0;;;;-1:-1:-1;26056:32:0;;26076:11;26056:32;:19;:32;:::i;:::-;26038:15;:50;-1:-1:-1;;;;;26140:34:0;;;;;;:22;:34;;;;;;:51;;26179:11;26140:51;:38;:51;:::i;:::-;-1:-1:-1;;;;;26103:34:0;;;;;;:22;:34;;;;;:88;26220:28;:11;26236;26220:28;:15;:28;:::i;:::-;26265:32;;26206:42;;-1:-1:-1;;;;;;26265:19:0;;;:32;;;;;26285:11;;26265:32;;;;26285:11;26265:19;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;25867:3:0;;25826:483;;;-1:-1:-1;26325:9:0;;:13;26321:96;;26367:50;26383:33;26412:3;26383:24;26397:9;;26383;:13;;:24;;;;:::i;:33::-;26367:11;;;:50;:15;:50;:::i;:::-;26353:11;:64;25708:717;;:::o;366:202::-;424:9;450:6;446:47;;-1:-1:-1;480:1:0;473:8;;446:47;-1:-1:-1;507:5:0;;;511:1;507;:5;:1;530:5;;;;;:10;523:18;;;3833:281;2268:6;;-1:-1:-1;;;;;2268:6:0;2254:10;:20;2246:29;;;;;;3898:7;;-1:-1:-1;;;3898:7:0;;;;:17;;;;;3910:5;3909:6;3898:17;3894:213;;;3932:7;:15;;-1:-1:-1;;;;;;3932:15:0;;;3967:20;;;3976:10;3967:20;;;;;;;;;;;;;3894:213;;;4010:7;;-1:-1:-1;;;4010:7:0;;;;4009:8;:17;;;;;4021:5;4009:17;4005:102;;;4053:4;4043:14;;-1:-1:-1;;;;;;4043:14:0;-1:-1:-1;;;4043:14:0;;;4077:18;;;4084:10;4077:18;;;;;;;;;;;;;4005:102;3833:281;:::o;12892:981::-;13312:11;;13349:9;;12931:23;;;;;;;;;;;;;;;;;;;;;;13349:9;;;;-1:-1:-1;;;13340:6:0;;;;:18;13336:180;;;13383:9;;;;;;;-1:-1:-1;13416:10:0;;;;;;-1:-1:-1;13336:180:0;;;13467:6;;;-1:-1:-1;;;13467:6:0;;;;;-1:-1:-1;;;;13497:7:0;;;;;-1:-1:-1;13336:180:0;13544:14;;13528:30;;13592:14;;13569:37;;13625:4;;13619:10;;13651:9;;13640:20;;13687:14;;13671:30;;13732:18;;13712:38;;13775:12;;13761:26;;13811:11;;13798:24;;13850:15;;13833:32;;12892:981;;;;;;;;;;;;:::o;10161:125::-;-1:-1:-1;;;;;10250:28:0;10226:4;10250:28;;;:19;:28;;;;;;;;;10161:125::o;10294:194::-;2268:6;;-1:-1:-1;;;;;2268:6:0;2254:10;:20;2246:29;;;;;;-1:-1:-1;;;;;10383:28:0;;;;;;:19;:28;;;;;;;;;:36;;-1:-1:-1;;10383:36:0;;;;;;;;;;10435:45;;;;;;;;;;;;;;;;;10294:194;;:::o;9989:164::-;9949:10;9929:31;;;;:19;:31;;;;;;;;9921:40;;;;;;10069:11;:19;;;10104:41;;;;;;;;10134:10;;10104:41;;;;;;;;;;9989:164;:::o;12205:319::-;2268:6;;-1:-1:-1;;;;;2268:6:0;2254:10;:20;2246:29;;;;;;12280:19;12302:15;:13;:15::i;:::-;12280:37;-1:-1:-1;;;;;;12336:16:0;;12328:25;;;;;;12390:21;;:38;;12416:11;12390:38;:25;:38;:::i;:::-;12366:21;:62;12444:37;;;;;;;;-1:-1:-1;;;;;12444:37:0;;;;;;;;;;;;;12492:24;;-1:-1:-1;;;;;12492:11:0;;;:24;;;;;12504:11;;12492:24;;;;12504:11;12492;:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12492:24:0;2286:1;12205:319;:::o;11084:178::-;11169:7;11196:58;11223:30;11242:10;11223:18;:30::i;:::-;11196:22;:9;11210:7;11196:22;:13;:22;:::i;:58::-;11189:65;11084:178;-1:-1:-1;;;11084:178:0:o;15730:785::-;15791:21;15823:16;15850:19;15880:17;15908:14;15933:17;15961:15;15987:24;16041:9;;;;;;;;;;;16028:22;;:10;:22;;;16024:86;;;-1:-1:-1;16075:1:0;;-1:-1:-1;16075:1:0;;-1:-1:-1;16075:1:0;;-1:-1:-1;16075:1:0;;-1:-1:-1;16075:1:0;;-1:-1:-1;16075:1:0;;-1:-1:-1;16075:1:0;;-1:-1:-1;16075:1:0;16067:31;;16024:86;16138:30;16157:10;16138:18;:30::i;:::-;16193:29;;;;;;;:17;:29;;;;;;16122:46;;-1:-1:-1;16193:29:0;-1:-1:-1;16244:25:0;16211:10;16244:13;:25::i;:::-;16233:36;-1:-1:-1;16294:23:0;16233:36;16307:9;16294:23;:12;:23;:::i;:::-;16340:25;;;;;;;:13;:25;;;;;;16280:37;;-1:-1:-1;16340:25:0;-1:-1:-1;16385:23:0;16354:10;16385:11;:23::i;:::-;16376:32;-1:-1:-1;16431:19:0;16376:32;16442:7;16431:19;:10;:19;:::i;:::-;16419:31;;16482:25;16496:10;16482:13;:25::i;:::-;16463:44;;15730:785;;;;;;;;;;:::o;3196:241::-;2268:6;;-1:-1:-1;;;;;2268:6:0;2254:10;:20;2246:29;;;;;;-1:-1:-1;;;;;3293:16:0;;3285:25;;;;;;3347:4;3339:21;3379:17;;;;3371:26;;;;;;3410:19;;-1:-1:-1;;;;;3410:11:0;;;:19;;;;;3422:6;;3410:19;;;;3422:6;3410:11;:19;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3410:19:0;2286:1;3196:241;;:::o;2561:272::-;2268:6;;-1:-1:-1;;;;;2268:6:0;2254:10;:20;2246:29;;;;;;-1:-1:-1;;;;;2652:25:0;;2644:34;;;;;;2718:9;;;-1:-1:-1;;;;;2738:23:0;;;-1:-1:-1;;;;;;2738:23:0;;;;;;;2777:48;;2718:9;;;2738:23;2718:9;;2777:48;;2689:26;;2777:48;2286:1;2561:272;:::o;12532:350::-;2268:6;;-1:-1:-1;;;;;2268:6:0;2254:10;:20;2246:29;;;;;;12604:19;12626:78;12695:8;;12626:64;12678:11;;12626:47;12660:12;;12626:29;12639:15;;12626:8;;:12;;:29;;;;:::i;:78::-;12604:100;-1:-1:-1;;;;;;12723:16:0;;12715:25;;;;;;12764:8;;:25;;12777:11;12764:25;:12;:25;:::i;:::-;12753:8;:36;12805:34;;;;;;;;-1:-1:-1;;;;;12805:34:0;;;;;;;;;;;;;12850:24;;-1:-1:-1;;;;;12850:11:0;;;:24;;;;;12862:11;;12850:24;;;;12862:11;12850;:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;4814:72:0;;;-1:-1:-1;;;;;4814:72:0;;:::o;13881:535::-;14151:8;;14192:15;;14232:12;;14265:8;;14297:11;;14342:21;;13916:15;14393;:13;:15::i;:::-;14374:34;;13881:535;;;;;;;:::o;2125:79::-;2163:7;2190:6;-1:-1:-1;;;;;2190:6:0;2125:79;:::o;18047:166::-;18162:34;;;18135:7;18162:34;;;:20;:34;;;;;;;;-1:-1:-1;;;;;18162:43:0;;;;;;;;;;18047:166;;;;:::o;17861:178::-;17982:40;;;17955:7;17982:40;;;:26;:40;;;;;;;;-1:-1:-1;;;;;17982:49:0;;;;;;;;;;17861:178;;;;:::o;11644:423::-;2268:6;;-1:-1:-1;;;;;2268:6:0;2254:10;:20;2246:29;;;;;;11741:19;11763:34;11784:12;11763:20;:34::i;:::-;11741:56;-1:-1:-1;;;;;;11816:16:0;;11808:25;;;;;;11891:42;;;;;;;:28;:42;;;;;;:59;;11938:11;11891:59;:46;:59;:::i;:::-;11846:42;;;;;;;:28;:42;;;;;;;;;:104;;;;11966:58;;;;;;;;;;;;;-1:-1:-1;;;;;11966:58:0;;;;;;;;;;;12035:24;;-1:-1:-1;;;;;12035:11:0;;;:24;;;;;12047:11;;12035:24;;;;12047:11;12035;:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;2841:345:0;2268:6;;-1:-1:-1;;;;;2268:6:0;2254:10;:20;2246:29;;;;;;2972:12;-1:-1:-1;;;;;3004:22:0;;2996:31;;;;;;3056;;;-1:-1:-1;;;;;3056:31:0;;3081:4;3056:31;;;;;;3038:15;;-1:-1:-1;;;;;3056:16:0;;;;;:31;;;;;;;;;;;;;;;:16;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;3056:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3056:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3056:31:0;;-1:-1:-1;3106:17:0;;;;3098:26;;;;;;3144:6;-1:-1:-1;;;;;3144:15:0;;3160:8;3170:6;3144:33;;;;;;;;;;;;;-1:-1:-1;;;;;3144:33:0;-1:-1:-1;;;;;3144:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3144:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3144:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3144:33:0;3137:41;;;;2286:1;;2841:345;;;:::o;16719:452::-;16936:28;;;16792:15;16936:28;;;:14;:28;;;;;;;;;16989:18;:32;;;;;;17056:28;:42;;;;;;;16936:28;;17129:34;16951:12;17129:20;:34::i;:::-;17109:54;;16719:452;;;;;:::o;9759:110::-;2268:6;;-1:-1:-1;;;;;2268:6:0;2254:10;:20;2246:29;;;;;;9834:15;:27;;;;;;-1:-1:-1;;;9834:27:0;-1:-1:-1;;9834:27:0;;;;;;;;;9759:110::o;9655:96::-;9728:15;;-1:-1:-1;;;9728:15:0;;;;;9655:96::o;17179:508::-;-1:-1:-1;;;;;17418:28:0;17239:19;17418:28;;;:19;:28;;;;;;;;;17470:18;:27;;;;;;17527:24;:33;;;;;;17586:20;:29;;;;;;17648:22;:31;;;;;;;;17418:28;;17527:33;;17586:29;17179:508::o;2305:248::-;2268:6;;-1:-1:-1;;;;;2268:6:0;2254:10;:20;2246:29;;;;;;-1:-1:-1;;;;;2388:22:0;;2380:31;;;;;;2422:23;2448:6;;-1:-1:-1;;;;;2465:17:0;;;-1:-1:-1;;;;;;2465:17:0;;;;;;2498:47;;2448:6;;;;;;;2498:47;;2422:23;2498:47;2286:1;2305:248;:::o;17695:158::-;17813:32;;;;;;;:18;:32;;;;;;;;;17802:43;;;;;;;;;;;;;;;;;17764:25;;17802:43;;;17813:32;17802:43;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17802:43:0;;;;;;;;;;;;;;;;;;;;;;;17695:158;;;:::o;15265:293::-;15327:7;15347:16;15366:59;15390:34;15413:10;15390:34;;:18;;:22;;:34;;;;:::i;:::-;15366:19;;;:59;:23;:59;:::i;:::-;15347:78;;15453:17;;15442:8;:28;15438:85;;;-1:-1:-1;;15494:17:0;;15487:24;;22767:1069;22822:17;22842:18;22850:9;22842:7;:18::i;:::-;22822:38;;22871:21;22895:26;22911:9;22895:15;:26::i;:::-;23011:7;;-1:-1:-1;;;23011:7:0;;;;22984:35;;;;:26;:35;;;;;;;;23020:10;22984:47;;;;;;;;22871:50;;-1:-1:-1;22984:62:0;;23036:9;22984:51;:62::i;:::-;22961:7;;;;-1:-1:-1;;;22961:7:0;;;;;22934:35;;;;:26;:35;;;;;;;;22970:10;22934:47;;;;;;;:112;;;;23141:6;;-1:-1:-1;;;23141:6:0;;;;;23127:21;;:13;:21;;;;;:36;;23153:9;23127:36;:25;:36;:::i;:::-;23117:6;;;;-1:-1:-1;;;23117:6:0;;;;;23103:21;;;;:13;:21;;;;;;;;:60;;;;23255:7;;-1:-1:-1;;;23255:7:0;;;;;23240:23;;:14;:23;;;;;:38;;23268:9;23240:38;:27;:38;:::i;:::-;23229:7;;;;-1:-1:-1;;;23229:7:0;;;;;;23214:23;;;;:14;:23;;;;;;;;:64;;;;23375:7;;;;;;;23356:27;;:18;:27;;;;;:46;;23388:13;23356:46;:31;:46;:::i;:::-;23345:7;;-1:-1:-1;;;23345:7:0;;;;23326:27;;;;:18;:27;;;;;:76;23458:12;;:31;;23475:13;23458:16;:31::i;:::-;23443:12;:46;23599:13;;;;23595:234;;;23634:8;23629:189;23652:9;:16;23648:20;;;;23629:189;;;23763:7;;;-1:-1:-1;;;23763:7:0;;;;;23742:29;;;;:20;:29;;;;;23772:11;:14;;23742:60;;23792:9;;23742:29;23772:11;:14;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23772:14:0;23742:45;;;;;;;;;;;;;;:60;:49;:60;:::i;:::-;23715:7;;;-1:-1:-1;;;23715:7:0;;;;;23694:29;;;;:20;:29;;;;;23724:11;:14;;23694:29;;23724:11;;:14;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23724:14:0;23694:45;;;;;;;;;;;;:108;23724:14;23670:3;23629:189;;10939:137;11053:14;;10999:7;;11026:42;;:22;:9;11040:7;11026:22;:13;:22;:::i;23844:516::-;23954:9;;23925:4;;23954:16;;23968:1;23954:16;:13;:16;:::i;:::-;23942:9;:28;23998:12;;:24;;24015:6;23998:24;:16;:24;:::i;:::-;23983:12;:39;24079:6;;-1:-1:-1;;;24079:6:0;;;;24061:25;;;;:17;:25;;;;;;:37;;24091:6;24061:29;:37::i;:::-;24051:6;;-1:-1:-1;;;24051:6:0;;;;24033:25;;;;:17;:25;;;;;;;;:65;;;;24163:10;24143:31;;:19;:31;;;;:43;;24179:6;24143:35;:43::i;:::-;24129:10;24109:31;;;;:19;:31;;;;;;;;:77;;;;24206:5;;:34;;-1:-1:-1;;;;;24206:34:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24206:5:0;;;;:14;;:34;;;;;;;;;;;;;:5;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;24206:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24206:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24206:34:0;24199:42;;;;24279:6;;24307:11;;24257:73;;;24279:6;-1:-1:-1;;;24279:6:0;;;;;;;24257:73;;;;;;;;;;;;;;;;;;;;;;24287:10;;24257:73;;;;;;;;;;-1:-1:-1;24348:4:0;23844:516;;;;:::o;25208:492::-;25281:6;;25269:31;;;-1:-1:-1;;;25281:6:0;;;;;25269:31;;;25247:4;;25289:10;;25269:31;;;;;;;;;;25320:6;;:13;;-1:-1:-1;;;25320:6:0;;;;25331:1;25320:10;:13::i;:::-;25311:6;:22;;-1:-1:-1;;25311:22:0;-1:-1:-1;;;25311:22:0;;;;;;;;;;;;;;25361:26;;25380:6;;;25361:18;:26::i;:::-;25344:14;:43;25429:6;;25415:21;;-1:-1:-1;;;25429:6:0;;;;25415:13;:21::i;:::-;25398:14;:38;25517:6;;25482:21;;25506:18;;-1:-1:-1;;;25517:6:0;;;;25506:10;:18::i;:::-;25539:7;;25482:42;;-1:-1:-1;25539:24:0;;;;-1:-1:-1;;;25539:7:0;;;;:24;25535:134;;;25598:7;;25585:33;;;25598:7;-1:-1:-1;;;25598:7:0;;;;;;;25585:33;;;25607:10;;25585:33;;;;;;;;;;25633:7;:24;;-1:-1:-1;;25633:24:0;-1:-1:-1;;;25633:24:0;;;;;;;25535:134;25688:4;25681:11;;;25208:492;:::o;12075:120::-;12122:7;12149:38;12165:21;;12149:11;;:15;;:38;;;;:::i;:::-;12142:45;;12075:120;:::o;10496:167::-;10565:7;10592:63;10618:36;10643:10;10618:36;;:20;;:24;;:36;;;;:::i;:::-;10592:21;;;:63;:25;:63;:::i;15568:152::-;15632:7;15659:53;15676:23;15688:10;15676:11;:23::i;:::-;15701:10;15659:16;:53::i;14912:181::-;15074:9;;15029:24;;14976:7;;15003:82;;15029:55;;15074:9;;;;;15029:40;;;;;:28;:40;:::i;:55::-;15003:21;;;:82;:25;:82;:::i;16523:188::-;16660:42;;;16596:7;16660:42;;;:28;:42;;;;;;;;;16623:18;:32;;;;;;:80;;;:36;:80;:::i;15101:154::-;15167:7;15194:53;15202:44;15236:9;15202:29;15216:14;;15202:9;:13;;:29;;;;:::i;:44::-;15194:7;:53::i;936:138::-;1017:5;;;1040:6;;;;;;;;;1033:14;;;11270:364;11331:6;11354:14;;;;11350:256;;11424:13;;11385:21;;11409:29;;11424:13;11409:14;;;;11424:13;;;;11409:29;:14;:29;:::i;:::-;11474:13;;11385:53;;-1:-1:-1;11491:1:0;;11459:29;;11474:13;11459:14;;;;11474:13;;;;11459:29;:14;:29;:::i;:::-;:33;;;11455:102;;;11520:21;:18;;;11539:1;11520:21;:18;:21;:::i;:::-;11513:28;;;;;11455:102;11580:14;-1:-1:-1;11573:21:0;;11350:256;-1:-1:-1;11625:1:0;11270:364;;;:::o;1419:184::-;1475:6;1505:1;1501;:5;;;1494:13;;;;1518:9;1534:1;1530:5;;:1;:5;;;;;;;;1518:17;;;;1570:1;1566:5;;:1;:5;;;;;;;;1558:13;;1562:1;1558;:5;;;:13;1553:1;:18;;;1546:26;;;;1594:1;1590:5;;:1;:5;;;;;;1611:121;1667:6;1694;;;1686:15;;;;;;1723:1;1719:5;;:1;:5;;;;;;;;;1611:121;-1:-1:-1;;;1611:121:0:o;4690:21738::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://67626dee79659542416a23e3cb312505873473930b24bb76ff18cb2ddc500d4c

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.