ETH Price: $3,575.26 (+7.17%)

Contract

0x8963B689f4bB50C4Cf562DB351D8267aFD7B2cB6
 

Overview

ETH Balance

0.000450895499432032 ETH

Eth Value

$1.61 (@ $3,575.26/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x0f069f6d3186a97ae684fc261937e750a6fa78f8d58ee37bd989409cf9fc68a0 Withdraw(pending)2024-11-27 15:07:521 hr ago1732720072IN
0x8963B689...aFD7B2cB6
0 ETH(Pending)(Pending)
Deposit204520382024-08-04 1:56:11115 days ago1722736571IN
0x8963B689...aFD7B2cB6
0.002 ETH0.00011
Collect204088952024-07-29 1:19:59121 days ago1722215999IN
0x8963B689...aFD7B2cB6
0 ETH0.0003421.9
Collect204088952024-07-29 1:19:59121 days ago1722215999IN
0x8963B689...aFD7B2cB6
0 ETH0.000181
Collect203955372024-07-27 4:36:47123 days ago1722055007IN
0x8963B689...aFD7B2cB6
0 ETH0.0078360464.14
Deposit203955362024-07-27 4:36:35123 days ago1722054995IN
0x8963B689...aFD7B2cB6
0.01 ETH0.0193164664.14
Deposit203955352024-07-27 4:36:11123 days ago1722054971IN
0x8963B689...aFD7B2cB6
0.03 ETH0.000301161
Deposit202510752024-07-07 0:32:23143 days ago1720312343IN
0x8963B689...aFD7B2cB6
0.002 ETH0.00053712
Collect201741642024-06-26 6:46:47154 days ago1719384407IN
0x8963B689...aFD7B2cB6
0 ETH0.000543
Deposit153824502022-08-21 6:43:14829 days ago1661064194IN
0x8963B689...aFD7B2cB6
0 ETH0.000492092
Deposit152919282022-08-07 0:17:09843 days ago1659831429IN
0x8963B689...aFD7B2cB6
0.004 ETH0.000617662.3
Withdraw152470912022-07-31 0:44:10850 days ago1659228250IN
0x8963B689...aFD7B2cB6
0 ETH0.001041583
Deposit126259562021-06-13 11:47:171263 days ago1623584837IN
0x8963B689...aFD7B2cB6
0.02 ETH0.000255
Deposit125788822021-06-06 4:54:231270 days ago1622955263IN
0x8963B689...aFD7B2cB6
0 ETH0.0041838610
Deposit125788412021-06-06 4:46:401270 days ago1622954800IN
0x8963B689...aFD7B2cB6
0 ETH0.0035809810
Deposit112361562020-11-11 11:53:291477 days ago1605095609IN
0x8963B689...aFD7B2cB6
0 ETH0.0004325212
Collect112190382020-11-08 20:47:351479 days ago1604868455IN
0x8963B689...aFD7B2cB6
0 ETH0.0014096715
Deposit112190302020-11-08 20:45:591479 days ago1604868359IN
0x8963B689...aFD7B2cB6
0 ETH0.0044649916
Unlock112185702020-11-08 19:09:031479 days ago1604862543IN
0x8963B689...aFD7B2cB6
0 ETH0.0021177715
Buy Bees112149902020-11-08 5:53:131480 days ago1604814793IN
0x8963B689...aFD7B2cB6
0 ETH0.0019343212
Buy Bees112097912020-11-07 10:30:261481 days ago1604745026IN
0x8963B689...aFD7B2cB6
0 ETH0.0039447923
Collect111961222020-11-05 8:34:591483 days ago1604565299IN
0x8963B689...aFD7B2cB6
0 ETH0.0022554724
Collect111789722020-11-02 17:15:071485 days ago1604337307IN
0x8963B689...aFD7B2cB6
0 ETH0.0041350344
Deposit111789582020-11-02 17:12:241485 days ago1604337144IN
0x8963B689...aFD7B2cB6
0 ETH0.0131159147
Collect111758852020-11-02 6:01:061486 days ago1604296866IN
0x8963B689...aFD7B2cB6
0 ETH0.0018542128
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
112185702020-11-08 19:09:031479 days ago1604862543
0x8963B689...aFD7B2cB6
0.00000226 ETH
112097912020-11-07 10:30:261481 days ago1604745026
0x8963B689...aFD7B2cB6
0.00004432 ETH
110772592020-10-18 2:37:591501 days ago1602988679
0x8963B689...aFD7B2cB6
0.00024983 ETH
110344892020-10-11 13:28:501508 days ago1602422930
0x8963B689...aFD7B2cB6
0.09828 ETH
110285382020-10-10 15:41:191509 days ago1602344479
0x8963B689...aFD7B2cB6
0.011 ETH
105993412020-08-05 10:57:141575 days ago1596625034
0x8963B689...aFD7B2cB6
0.0056 ETH
105823372020-08-02 19:46:561577 days ago1596397616
0x8963B689...aFD7B2cB6
0.00087595 ETH
105560222020-07-29 18:02:561581 days ago1596045776
0x8963B689...aFD7B2cB6
0.00015123 ETH
105538372020-07-29 10:08:041582 days ago1596017284
0x8963B689...aFD7B2cB6
0.000001 ETH
105520642020-07-29 3:31:341582 days ago1595993494
0x8963B689...aFD7B2cB6
0.0007 ETH
105216642020-07-24 10:32:291587 days ago1595586749
0x8963B689...aFD7B2cB6
0.00054 ETH
105216642020-07-24 10:32:291587 days ago1595586749
0x8963B689...aFD7B2cB6
0.0004429 ETH
105141102020-07-23 6:27:121588 days ago1595485632
0x8963B689...aFD7B2cB6
0.032 ETH
105140392020-07-23 6:10:401588 days ago1595484640
0x8963B689...aFD7B2cB6
0.0035 ETH
105134652020-07-23 4:04:241588 days ago1595477064
0x8963B689...aFD7B2cB6
0.00004158 ETH
105133282020-07-23 3:31:591588 days ago1595475119
0x8963B689...aFD7B2cB6
0.00173413 ETH
105132502020-07-23 3:15:471588 days ago1595474147
0x8963B689...aFD7B2cB6
0.0004 ETH
105114812020-07-22 20:58:141588 days ago1595451494
0x8963B689...aFD7B2cB6
0.00019029 ETH
105083682020-07-22 9:22:391589 days ago1595409759
0x8963B689...aFD7B2cB6
0.00000404 ETH
105066072020-07-22 2:49:031589 days ago1595386143
0x8963B689...aFD7B2cB6
0.0035978 ETH
105062902020-07-22 1:35:421589 days ago1595381742
0x8963B689...aFD7B2cB6
0.00050769 ETH
105057312020-07-21 23:29:151589 days ago1595374155
0x8963B689...aFD7B2cB6
0.00064011 ETH
105037692020-07-21 16:15:381590 days ago1595348138
0x8963B689...aFD7B2cB6
0.0005 ETH
105035592020-07-21 15:31:271590 days ago1595345487
0x8963B689...aFD7B2cB6
0.01 ETH
105034712020-07-21 15:12:001590 days ago1595344320
0x8963B689...aFD7B2cB6
0.108 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EtherHives

Compiler Version
v0.6.10+commit.00c0fcaf

Optimization Enabled:
Yes with 200 runs

Other Settings:
istanbul EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-07-06
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;


library Math {
    
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}

contract Context {
    
    
    constructor () internal { }

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; 
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

library SafeMath {
    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

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

        return c;
    }

    
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        
        require(b > 0, errorMessage);
        uint256 c = a / b;
        

        return c;
    }

    
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

contract UserBonus {

    using SafeMath for uint256;

    uint256 public constant BONUS_PERCENTS_PER_WEEK = 1;
    uint256 public constant BONUS_TIME = 1 weeks;

    struct UserBonusData {
        uint256 threadPaid;
        uint256 lastPaidTime;
        uint256 numberOfUsers;
        mapping(address => bool) userRegistered;
        mapping(address => uint256) userPaid;
    }

    UserBonusData public bonus;

    event BonusPaid(uint256 users, uint256 amount);
    event UserAddedToBonus(address indexed user);

    modifier payRepBonusIfNeeded {
        payRepresentativeBonus();
        _;
    }

    constructor() public {
        bonus.lastPaidTime = block.timestamp;
    }

    function payRepresentativeBonus() public {
        while (bonus.numberOfUsers > 0 && bonus.lastPaidTime.add(BONUS_TIME) <= block.timestamp) {
            uint256 reward = address(this).balance.mul(BONUS_PERCENTS_PER_WEEK).div(100);
            bonus.threadPaid = bonus.threadPaid.add(reward.div(bonus.numberOfUsers));
            bonus.lastPaidTime = bonus.lastPaidTime.add(BONUS_TIME);
            emit BonusPaid(bonus.numberOfUsers, reward);
        }
    }

    function userRegisteredForBonus(address user) public view returns(bool) {
        return bonus.userRegistered[user];
    }

    function userBonusPaid(address user) public view returns(uint256) {
        return bonus.userPaid[user];
    }

    function userBonusEarned(address user) public view returns(uint256) {
        return bonus.userRegistered[user] ? bonus.threadPaid.sub(bonus.userPaid[user]) : 0;
    }

    function retrieveBonus() public virtual payRepBonusIfNeeded {
        require(bonus.userRegistered[msg.sender], "User not registered for bonus");

        uint256 amount = Math.min(address(this).balance, userBonusEarned(msg.sender));
        bonus.userPaid[msg.sender] = bonus.userPaid[msg.sender].add(amount);
        msg.sender.transfer(amount);
    }

    function _addUserToBonus(address user) internal payRepBonusIfNeeded {
        require(!bonus.userRegistered[user], "User already registered for bonus");

        bonus.userRegistered[user] = true;
        bonus.userPaid[user] = bonus.threadPaid;
        bonus.numberOfUsers = bonus.numberOfUsers.add(1);
        emit UserAddedToBonus(user);
    }
}

contract Claimable is Ownable {

    address public pendingOwner;

    modifier onlyPendingOwner() {
        require(msg.sender == pendingOwner);
        _;
    }

    function renounceOwnership() public override(Ownable) onlyOwner {
        revert();
    }

    function transferOwnership(address newOwner) public override(Ownable) onlyOwner {
        pendingOwner = newOwner;
    }

    function claimOwnership() public virtual onlyPendingOwner {
        transferOwnership(pendingOwner);
        delete pendingOwner;
    }
}

contract EtherHives is Claimable, UserBonus {

    struct Player {
        uint256 registeredDate;
        bool airdropCollected;
        address referrer;
        uint256 balanceHoney;
        uint256 balanceWax;
        uint256 points;
        uint256 medals;
        uint256 qualityLevel;
        uint256 lastTimeCollected;
        uint256 unlockedBee;
        uint256[BEES_COUNT] bees;

        uint256 totalDeposited;
        uint256 totalWithdrawed;
        uint256 referralsTotalDeposited;
        uint256 subreferralsCount;
        address[] referrals;
    }

    uint256 public constant BEES_COUNT = 8;
    uint256 public constant SUPER_BEE_INDEX = BEES_COUNT - 1;
    uint256 public constant TRON_BEE_INDEX = BEES_COUNT - 2;
    uint256 public constant MEDALS_COUNT = 10;
    uint256 public constant QUALITIES_COUNT = 6;
    uint256[BEES_COUNT] public BEES_PRICES = [0e18, 1500e18, 7500e18, 30000e18, 75000e18, 250000e18, 750000e18, 100000e18];
    uint256[BEES_COUNT] public BEES_LEVELS_PRICES = [0e18, 0e18, 11250e18, 45000e18, 112500e18, 375000e18, 1125000e18, 0];
    uint256[BEES_COUNT] public BEES_MONTHLY_PERCENTS = [0, 220, 223, 226, 229, 232, 235, 333];
    uint256[MEDALS_COUNT] public MEDALS_POINTS = [0e18, 50000e18, 190000e18, 510000e18, 1350000e18, 3225000e18, 5725000e18, 8850000e18, 12725000e18, 23500000e18];
    uint256[MEDALS_COUNT] public MEDALS_REWARDS = [0e18, 3500e18, 10500e18, 24000e18, 65000e18, 140000e18, 185000e18, 235000e18, 290000e18, 800000e18];
    uint256[QUALITIES_COUNT] public QUALITY_HONEY_PERCENT = [80, 82, 84, 86, 88, 90];
    uint256[QUALITIES_COUNT] public QUALITY_PRICE = [0e18, 15000e18, 50000e18, 120000e18, 250000e18, 400000e18];

    uint256 public constant COINS_PER_ETH = 250000;
    uint256 public constant MAX_BEES_PER_TARIFF = 32;
    uint256 public constant FIRST_BEE_AIRDROP_AMOUNT = 500e18;
    uint256 public constant ADMIN_PERCENT = 10;
    uint256 public constant HONEY_DISCOUNT_PERCENT = 10;
    uint256 public constant SUPERBEE_PERCENT_UNLOCK = 30;
    uint256 public constant SUPER_BEE_BUYER_PERIOD = 7 days;
    uint256[] public REFERRAL_PERCENT_PER_LEVEL = [10, 5, 3];
    uint256[] public REFERRAL_POINT_PERCENT = [50, 25, 0];

    uint256 public maxBalance;
    uint256 public totalPlayers;
    uint256 public totalDeposited;
    uint256 public totalWithdrawed;
    uint256 public totalBeesBought;
    mapping(address => Player) public players;

    event Registered(address indexed user, address indexed referrer);
    event Deposited(address indexed user, uint256 amount);
    event Withdrawed(address indexed user, uint256 amount);
    event ReferrerPaid(address indexed user, address indexed referrer, uint256 indexed level, uint256 amount);
    event MedalAwarded(address indexed user, uint256 indexed medal);
    event QualityUpdated(address indexed user, uint256 indexed quality);
    event RewardCollected(address indexed user, uint256 honeyReward, uint256 waxReward);
    event BeeUnlocked(address indexed user, uint256 bee);
    event BeesBought(address indexed user, uint256 bee, uint256 count);

    constructor() public {
        _register(owner(), address(0));
    }

    receive() external payable {
        if (msg.value == 0) {
            if (players[msg.sender].registeredDate > 0) {
                collect();
            }
        } else {
            deposit(address(0));
        }
    }

    function playerBees(address who) public view returns(uint256[BEES_COUNT] memory) {
        return players[who].bees;
    }

    function superBeeUnlocked() public view returns(bool) {
        return address(this).balance <= maxBalance.mul(100 - SUPERBEE_PERCENT_UNLOCK).div(100);
    }

    function referrals(address user) public view returns(address[] memory) {
        return players[user].referrals;
    }

    function referrerOf(address user, address ref) internal view returns(address) {
        if (players[user].registeredDate == 0 && ref != user) {
            return ref;
        }
        return players[user].referrer;
    }

    function transfer(address account, uint256 amount) public returns(bool) {
        require(msg.sender == owner());

        collect();

        _payWithWaxAndHoney(msg.sender, amount);
        players[account].balanceWax = players[account].balanceWax.add(amount);
        return true;
    }

    function deposit(address ref) public payable payRepBonusIfNeeded {
        Player storage player = players[msg.sender];
        address refAddress = referrerOf(msg.sender, ref);

        require((msg.value == 0) != player.registeredDate > 0, "Send 0 for registration");

        
        if (player.registeredDate == 0) {
            _register(msg.sender, refAddress);
        }

        collect();

        
        uint256 wax = msg.value.mul(COINS_PER_ETH);
        player.balanceWax = player.balanceWax.add(wax);
        player.totalDeposited = player.totalDeposited.add(msg.value);
        totalDeposited = totalDeposited.add(msg.value);
        player.points = player.points.add(wax);
        emit Deposited(msg.sender, msg.value);

        

        _distributeFees(msg.sender, wax, msg.value, refAddress);

        _addToBonusIfNeeded(msg.sender);

        uint256 adminWithdrawed = players[owner()].totalWithdrawed;
        maxBalance = Math.max(maxBalance, address(this).balance.add(adminWithdrawed));
    }

    function withdraw(uint256 amount) public {
        Player storage player = players[msg.sender];

        collect();

        uint256 value = amount.div(COINS_PER_ETH);
        require(value > 0, "Trying to withdraw too small");
        player.balanceHoney = player.balanceHoney.sub(amount);
        player.totalWithdrawed = player.totalWithdrawed.add(value);
        totalWithdrawed = totalWithdrawed.add(value);
        msg.sender.transfer(value);
        emit Withdrawed(msg.sender, value);
    }

    function collect() public payRepBonusIfNeeded {
        Player storage player = players[msg.sender];
        require(player.registeredDate > 0, "Not registered yet");

        if (userBonusEarned(msg.sender) > 0) {
            retrieveBonus();
        }

        (uint256 balanceHoney, uint256 balanceWax) = instantBalance(msg.sender);
        emit RewardCollected(
            msg.sender,
            balanceHoney.sub(player.balanceHoney),
            balanceWax.sub(player.balanceWax)
        );

        if (!player.airdropCollected && player.registeredDate < now) {
            player.airdropCollected = true;
        }

        player.balanceHoney = balanceHoney;
        player.balanceWax = balanceWax;
        player.lastTimeCollected = block.timestamp;
    }

    function instantBalance(address account)
        public
        view
        returns(
            uint256 balanceHoney,
            uint256 balanceWax
        )
    {
        Player storage player = players[account];
        if (player.registeredDate == 0) {
            return (0, 0);
        }

        balanceHoney = player.balanceHoney;
        balanceWax = player.balanceWax;

        uint256 collected = earned(account);
        if (!player.airdropCollected && player.registeredDate < now) {
            collected = collected.sub(FIRST_BEE_AIRDROP_AMOUNT);
            balanceWax = balanceWax.add(FIRST_BEE_AIRDROP_AMOUNT);
        }

        uint256 honeyReward = collected.mul(QUALITY_HONEY_PERCENT[player.qualityLevel]).div(100);
        uint256 waxReward = collected.sub(honeyReward);

        balanceHoney = balanceHoney.add(honeyReward);
        balanceWax = balanceWax.add(waxReward);
    }

    function unlock(uint256 bee) public payable payRepBonusIfNeeded {
        Player storage player = players[msg.sender];

        if (msg.value > 0) {
            deposit(address(0));
        }

        collect();

        require(bee < SUPER_BEE_INDEX, "No more levels to unlock"); 
        require(player.bees[bee - 1] == MAX_BEES_PER_TARIFF, "Prev level must be filled");
        require(bee == player.unlockedBee + 1, "Trying to unlock wrong bee type");

        if (bee == TRON_BEE_INDEX) {
            require(player.medals >= 9);
        }
        _payWithWaxAndHoney(msg.sender, BEES_LEVELS_PRICES[bee]);
        player.unlockedBee = bee;
        player.bees[bee] = 1;
        emit BeeUnlocked(msg.sender, bee);
    }

    function buyBees(uint256 bee, uint256 count) public payable payRepBonusIfNeeded {
        Player storage player = players[msg.sender];

        if (msg.value > 0) {
            deposit(address(0));
        }

        collect();

        require(bee > 0 && bee < BEES_COUNT, "Don't try to buy bees of type 0");
        if (bee == SUPER_BEE_INDEX) {
            require(superBeeUnlocked(), "SuperBee is not unlocked yet");
            require(block.timestamp.sub(player.registeredDate) < SUPER_BEE_BUYER_PERIOD, "You should be registered less than 7 days ago");
        } else {
            require(bee <= player.unlockedBee, "This bee type not unlocked yet");
        }

        require(player.bees[bee].add(count) <= MAX_BEES_PER_TARIFF);
        player.bees[bee] = player.bees[bee].add(count);
        totalBeesBought = totalBeesBought.add(count);
        uint256 honeySpent = _payWithWaxAndHoney(msg.sender, BEES_PRICES[bee].mul(count));

        _distributeFees(msg.sender, honeySpent, 0, referrerOf(msg.sender, address(0)));

        emit BeesBought(msg.sender, bee, count);
    }

    function updateQualityLevel() public payRepBonusIfNeeded {
        Player storage player = players[msg.sender];

        collect();

        require(player.qualityLevel < QUALITIES_COUNT - 1);
        _payWithHoneyOnly(msg.sender, QUALITY_PRICE[player.qualityLevel + 1]);
        player.qualityLevel++;
        emit QualityUpdated(msg.sender, player.qualityLevel);
    }

    function earned(address user) public view returns(uint256) {
        Player storage player = players[user];
        if (player.registeredDate == 0) {
            return 0;
        }

        uint256 total = 0;
        for (uint i = 1; i < BEES_COUNT; i++) {
            total = total.add(
                player.bees[i].mul(BEES_PRICES[i]).mul(BEES_MONTHLY_PERCENTS[i]).div(100)
            );
        }

        return total
            .mul(block.timestamp.sub(player.lastTimeCollected))
            .div(30 days)
            .add(player.airdropCollected || player.registeredDate == now ? 0 : FIRST_BEE_AIRDROP_AMOUNT);
    }

    function collectMedals(address user) public payRepBonusIfNeeded {
        Player storage player = players[user];

        collect();

        for (uint i = player.medals; i < MEDALS_COUNT; i++) {
            if (player.points >= MEDALS_POINTS[i]) {
                player.balanceWax = player.balanceWax.add(MEDALS_REWARDS[i]);
                player.medals = i + 1;
                emit MedalAwarded(user, i + 1);
            }
        }
    }

    function retrieveBonus() public override(UserBonus) {
        totalWithdrawed = totalWithdrawed.add(userBonusEarned(msg.sender));
        super.retrieveBonus();
    }

    function claimOwnership() public override(Claimable) {
        super.claimOwnership();
        _register(owner(), address(0));
    }

    function _distributeFees(address user, uint256 wax, uint256 deposited, address refAddress) internal {
        
        address(uint160(owner())).transfer(wax * ADMIN_PERCENT / 100 / COINS_PER_ETH);

        
        if (refAddress != address(0)) {
            Player storage referrer = players[refAddress];
            referrer.referralsTotalDeposited = referrer.referralsTotalDeposited.add(deposited);
            _addToBonusIfNeeded(refAddress);

            
            address to = refAddress;
            for (uint i = 0; to != address(0) && i < REFERRAL_PERCENT_PER_LEVEL.length; i++) {
                uint256 reward = wax.mul(REFERRAL_PERCENT_PER_LEVEL[i]).div(100);
                players[to].balanceHoney = players[to].balanceHoney.add(reward);
                players[to].points = players[to].points.add(wax.mul(REFERRAL_POINT_PERCENT[i]).div(100));
                emit ReferrerPaid(user, to, i + 1, reward);
                

                to = players[to].referrer;
            }
        }
    }

    function _register(address user, address refAddress) internal {
        Player storage player = players[user];

        player.registeredDate = block.timestamp;
        player.bees[0] = MAX_BEES_PER_TARIFF;
        player.unlockedBee = 1;
        player.lastTimeCollected = block.timestamp;
        totalBeesBought = totalBeesBought.add(MAX_BEES_PER_TARIFF);
        totalPlayers++;

        if (refAddress != address(0)) {
            player.referrer = refAddress;
            players[refAddress].referrals.push(user);

            if (players[refAddress].referrer != address(0)) {
                players[players[refAddress].referrer].subreferralsCount++;
            }

            _addToBonusIfNeeded(refAddress);
        }
        emit Registered(user, refAddress);
    }

    function _payWithHoneyOnly(address user, uint256 amount) internal {
        Player storage player = players[user];
        player.balanceHoney = player.balanceHoney.sub(amount);
    }

    function _payWithWaxOnly(address user, uint256 amount) internal {
        Player storage player = players[user];
        player.balanceWax = player.balanceWax.sub(amount);
    }

    function _payWithWaxAndHoney(address user, uint256 amount) internal returns(uint256) {
        Player storage player = players[user];

        uint256 wax = Math.min(amount, player.balanceWax);
        uint256 honey = amount.sub(wax).mul(100 - HONEY_DISCOUNT_PERCENT).div(100);

        player.balanceWax = player.balanceWax.sub(wax);
        _payWithHoneyOnly(user, honey);

        return honey;
    }

    function _addToBonusIfNeeded(address user) internal {
        if (user != address(0) && !bonus.userRegistered[user]) {
            Player storage player = players[user];

            if (player.totalDeposited >= 5 ether &&
                player.referrals.length >= 10 &&
                player.referralsTotalDeposited >= 50 ether)
            {
                _addUserToBonus(user);
            }
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"bee","type":"uint256"}],"name":"BeeUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"bee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"BeesBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"users","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BonusPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"medal","type":"uint256"}],"name":"MedalAwarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"quality","type":"uint256"}],"name":"QualityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":true,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReferrerPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"}],"name":"Registered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"honeyReward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"waxReward","type":"uint256"}],"name":"RewardCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"UserAddedToBonus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawed","type":"event"},{"inputs":[],"name":"ADMIN_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BEES_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"BEES_LEVELS_PRICES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"BEES_MONTHLY_PERCENTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"BEES_PRICES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BONUS_PERCENTS_PER_WEEK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BONUS_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COINS_PER_ETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FIRST_BEE_AIRDROP_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HONEY_DISCOUNT_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BEES_PER_TARIFF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MEDALS_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"MEDALS_POINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"MEDALS_REWARDS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"QUALITIES_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"QUALITY_HONEY_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"QUALITY_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"REFERRAL_PERCENT_PER_LEVEL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"REFERRAL_POINT_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPERBEE_PERCENT_UNLOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPER_BEE_BUYER_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPER_BEE_INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRON_BEE_INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonus","outputs":[{"internalType":"uint256","name":"threadPaid","type":"uint256"},{"internalType":"uint256","name":"lastPaidTime","type":"uint256"},{"internalType":"uint256","name":"numberOfUsers","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"bee","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"buyBees","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"collectMedals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ref","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"instantBalance","outputs":[{"internalType":"uint256","name":"balanceHoney","type":"uint256"},{"internalType":"uint256","name":"balanceWax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payRepresentativeBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"playerBees","outputs":[{"internalType":"uint256[8]","name":"","type":"uint256[8]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"players","outputs":[{"internalType":"uint256","name":"registeredDate","type":"uint256"},{"internalType":"bool","name":"airdropCollected","type":"bool"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"balanceHoney","type":"uint256"},{"internalType":"uint256","name":"balanceWax","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"medals","type":"uint256"},{"internalType":"uint256","name":"qualityLevel","type":"uint256"},{"internalType":"uint256","name":"lastTimeCollected","type":"uint256"},{"internalType":"uint256","name":"unlockedBee","type":"uint256"},{"internalType":"uint256","name":"totalDeposited","type":"uint256"},{"internalType":"uint256","name":"totalWithdrawed","type":"uint256"},{"internalType":"uint256","name":"referralsTotalDeposited","type":"uint256"},{"internalType":"uint256","name":"subreferralsCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"referrals","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"retrieveBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"superBeeUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBeesBought","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDeposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPlayers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWithdrawed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bee","type":"uint256"}],"name":"unlock","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"updateQualityLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"userBonusEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"userBonusPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"userRegisteredForBonus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

61018060405260006080908152685150ae84a8cdf0000060a0526901969368974c05b0000060c05269065a4da25d3016c0000060e052690fe1c215e8f838e00000610100526934f086f3b33b6840000061012052699ed194db19b238c000006101405269152d02c7e14af6800000610160526200008190600790600862000a56565b506040805161010081018252600080825260208201819052690261dd1ce2f2088800009282019290925269098774738bc82220000060608201526917d2a320dd74555000006080820152694f68ca6d8cd91c60000060a082015269ee3a5f48a68b5520000060c082015260e08101919091526200010390600f90600862000a56565b5060408051610100810182526000815260dc602082015260df9181019190915260e2606082015260e5608082015260e860a082015260eb60c082015261014d60e08201526200015790601790600862000aa4565b50604080516101408101825260008152690a968163f0a57b400000602082015269283bebaef8db3ac0000091810191909152696bff27c8303182c0000060608201526a011ddfa58a6173ffc0000060808201526a02aaeb99ae21b18da0000060a08201526a04bc50df332203a020000060c08201526a07520f7619626a3740000060e08201526a0a869fa1dabc83072000006101008201526a1370518d7bcfd0478000006101208201526200021190601f90600a62000adb565b5060408051610140810182526000815268bdbc41e0348b300000602082015269023934c5a09da1900000918101919091526905150ae84a8cdf0000006060820152690dc3a8351f3d86a000006080820152691da56a4b0835bf80000060a082015269272cdebe93fde1a0000060c08201526931c3602284a35ce0000060e0820152693d68ee76da263140000061010082015269a968163f0a57b4000000610120820152620002c490602990600a62000b17565b506040805160c08101825260508152605260208201526054918101919091526056606082015260586080820152605a60a08201526200030890603390600662000b52565b506040805160c0810182526000815269032d26d12e980b6000006020820152690a968163f0a57b40000091810191909152691969368974c05b00000060608201526934f086f3b33b6840000060808201526954b40b1f852bda00000060a08201526200037990603990600662000b88565b5060408051606081018252600a8152600560208201526003918101829052620003a691603f919062000bc3565b50604080516060810182526032815260196020820152600081830152620003d09190600362000bc3565b50348015620003de57600080fd5b506000620003f46001600160e01b036200047016565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350426003556200046a620004596001600160e01b036200047516565b60006001600160e01b036200048416565b62000c22565b335b90565b6000546001600160a01b031690565b6001600160a01b038216600090815260466020908152604082204281559160098301015560016008820155426007820155604554620004ce90602062001c9e620005eb821b17811c565b6045556042805460010190556001600160a01b03821615620005a65760018181018054610100600160a81b0319166101006001600160a01b038681168281029390931790935560008281526046602090815260408220601581018054808901825590845291832090910180546001600160a01b0319168a871617905592905292015491909104161562000592576001600160a01b03808316600090815260466020526040808220600190810154610100900490931682529020601401805490910190555b620005a6826001600160e01b036200064f16565b816001600160a01b0316836001600160a01b03167f0a31ee9d46a828884b81003c8498156ea6aa15b9b54bdd0ef0b533d9eba57e5560405160405180910390a3505050565b60008282018381101562000646576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6001600160a01b038116158015906200068157506001600160a01b03811660009081526005602052604090205460ff16155b15620006f7576001600160a01b03811660009081526046602052604090206011810154674563918244f4000011801590620006c157506015810154600a11155b8015620006db57506802b5e3af16b1880000816013015410155b15620006f557620006f5826001600160e01b03620006fa16565b505b50565b6200070d6001600160e01b03620007ef16565b6001600160a01b03811660009081526005602052604090205460ff1615620007675760405162461bcd60e51b8152600401808060200182810382526021815260200180620033366021913960400191505060405180910390fd5b6001600160a01b0381166000908152600560209081526040808320805460ff19166001908117909155600254600684529190932055600454620007b592909162001c9e620005eb821b17901c565b6004556040516001600160a01b038216907fffe88a5f59af245d336238ae39a54e562c15024f255db787524f9abd61c8765a90600090a250565b60045415801590620008225750426200081f62093a80600260010154620005eb60201b62001c9e1790919060201c565b11155b15620009055760006200085f60646200084b6001476200090760201b62001cff1790919060201c565b6200096560201b62001d581790919060201c565b90506200089d620008836002800154836200096560201b62001d581790919060201c565b600260000154620005eb60201b62001c9e1790919060201c565b600255600354620008be9062093a80620005eb602090811b62001c9e17901c565b600355600454604080519182526020820183905280517f51e794b4ff7ffc1b303e757fa6fc3d0b3e162556cc78d07914238fe3c3f96d8f9281900390910190a150620007ef565b565b600082620009185750600062000649565b828202828482816200092657fe5b0414620006465760405162461bcd60e51b8152600401808060200182810382526021815260200180620033576021913960400191505060405180910390fd5b60006200064683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620009af60201b60201c565b6000818362000a3f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000a03578181015183820152602001620009e9565b50505050905090810190601f16801562000a315780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000a4c57fe5b0495945050505050565b826008810192821562000a92579160200282015b8281111562000a9257825182906001600160501b031690559160200191906001019062000a6a565b5062000aa092915062000c05565b5090565b826008810192821562000a92579160200282015b8281111562000a92578251829061ffff1690559160200191906001019062000ab8565b82600a810192821562000a92579160200282015b8281111562000a9257825182906001600160581b031690559160200191906001019062000aef565b82600a810192821562000a92579160200282018281111562000a9257825182906001600160501b031690559160200191906001019062000a6a565b826006810192821562000a92579160200282015b8281111562000a92578251829060ff1690559160200191906001019062000b66565b826006810192821562000a92579160200282018281111562000a9257825182906001600160501b031690559160200191906001019062000a6a565b82805482825590600052602060002090810192821562000a92579160200282018281111562000a92578251829060ff1690559160200191906001019062000b66565b6200047291905b8082111562000aa0576000815560010162000c0c565b6127048062000c326000396000f3fe60806040526004361061031d5760003560e01c80639ca423b3116101ab578063cfbeb83e116100f7578063e5d6c33a11610095578063f340fa011161006f578063f340fa0114610aa6578063f60cdcf614610acc578063f7620b1614610ae1578063ff50abdc14610b0b57610355565b8063e5d6c33a14610a49578063eeb851a214610a5e578063f2fde38b14610a7357610355565b8063dec107d1116100d1578063dec107d1146105f0578063e2eb41ff14610976578063e30c397814610a1f578063e522538114610a3457610355565b8063cfbeb83e14610919578063d9c282f01461092e578063dacfbd791461096157610355565b8063b5affb0511610164578063be6c588a1161013e578063be6c588a1461085b578063bfaed58a14610870578063bfd3dc93146108a3578063c7d88b05146108cd57610355565b8063b5affb05146107f2578063b74126cc1461081c578063b913ee4f1461083157610355565b80639ca423b31461070c5780639e95452b1461078f578063a155b1d41461053a578063a35bc9af1461054f578063a9059cbb146107a4578063b2da61b4146107dd57610355565b806347ee29921161026a578063715018a61161022357806375b4d78c116101fd57806375b4d78c146106615780637e9907721461054f578063894af783146106945780638da5cb5b146106db57610355565b8063715018a614610622578063723928901461063757806373ad468a1461064c57610355565b806347ee2992146105875780634ab0cac91461059c5780634e71e0c8146105c65780635b373092146105db5780635ec1ddfc146105f05780636198e3391461060557610355565b806321f45653116102d75780633128aa86116102b15780633128aa861461050757806336fe15e61461053a578063435f220c1461054f57806346a837851461056457610355565b806321f45653146104475780632ab291c1146104b35780632e1a7d4d146104dd57610355565b80628cc2621461035a5780630486916d1461039f5780630542061e146103b457806310f230dc146103c9578063127fcac7146103f357806321d378f51461041d57610355565b36610355573461034957336000908152604660205260409020541561034457610344610b20565b610353565b6103536000610c59565b005b600080fd5b34801561036657600080fd5b5061038d6004803603602081101561037d57600080fd5b50356001600160a01b0316610e0a565b60408051918252519081900360200190f35b3480156103ab57600080fd5b5061038d610f2a565b3480156103c057600080fd5b50610353610f2f565b3480156103d557600080fd5b5061038d600480360360208110156103ec57600080fd5b5035610fb9565b3480156103ff57600080fd5b5061038d6004803603602081101561041657600080fd5b5035610fcd565b34801561042957600080fd5b5061038d6004803603602081101561044057600080fd5b5035610fda565b34801561045357600080fd5b5061047a6004803603602081101561046a57600080fd5b50356001600160a01b0316610fe7565b604051808261010080838360005b838110156104a0578181015183820152602001610488565b5050505090500191505060405180910390f35b3480156104bf57600080fd5b5061038d600480360360208110156104d657600080fd5b5035611042565b3480156104e957600080fd5b506103536004803603602081101561050057600080fd5b503561104f565b34801561051357600080fd5b5061038d6004803603602081101561052a57600080fd5b50356001600160a01b0316611185565b34801561054657600080fd5b5061038d6111dd565b34801561055b57600080fd5b5061038d6111e2565b6103536004803603604081101561057a57600080fd5b50803590602001356111e7565b34801561059357600080fd5b5061038d611468565b3480156105a857600080fd5b5061038d600480360360208110156105bf57600080fd5b503561146f565b3480156105d257600080fd5b5061035361147c565b3480156105e757600080fd5b50610353611498565b3480156105fc57600080fd5b5061038d6114be565b6103536004803603602081101561061b57600080fd5b50356114c5565b34801561062e57600080fd5b50610353611696565b34801561064357600080fd5b5061038d611700565b34801561065857600080fd5b5061038d611705565b34801561066d57600080fd5b5061067661170b565b60408051938452602084019290925282820152519081900360600190f35b3480156106a057600080fd5b506106c7600480360360208110156106b757600080fd5b50356001600160a01b0316611717565b604080519115158252519081900360200190f35b3480156106e757600080fd5b506106f0611735565b604080516001600160a01b039092168252519081900360200190f35b34801561071857600080fd5b5061073f6004803603602081101561072f57600080fd5b50356001600160a01b0316611744565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561077b578181015183820152602001610763565b505050509050019250505060405180910390f35b34801561079b57600080fd5b506103536117bc565b3480156107b057600080fd5b506106c7600480360360408110156107c757600080fd5b506001600160a01b038135169060200135611889565b3480156107e957600080fd5b5061038d611914565b3480156107fe57600080fd5b5061038d6004803603602081101561081557600080fd5b5035611919565b34801561082857600080fd5b5061038d611926565b34801561083d57600080fd5b5061038d6004803603602081101561085457600080fd5b503561192c565b34801561086757600080fd5b5061038d61194a565b34801561087c57600080fd5b506103536004803603602081101561089357600080fd5b50356001600160a01b031661194f565b3480156108af57600080fd5b5061038d600480360360208110156108c657600080fd5b5035611a14565b3480156108d957600080fd5b50610900600480360360208110156108f057600080fd5b50356001600160a01b0316611a21565b6040805192835260208301919091528051918290030190f35b34801561092557600080fd5b5061038d611b2a565b34801561093a57600080fd5b5061038d6004803603602081101561095157600080fd5b50356001600160a01b0316611b37565b34801561096d57600080fd5b5061038d611b52565b34801561098257600080fd5b506109a96004803603602081101561099957600080fd5b50356001600160a01b0316611b57565b604080519e8f529c151560208f01526001600160a01b03909b168d8d015260608d019990995260808c019790975260a08b019590955260c08a019390935260e08901919091526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b348015610a2b57600080fd5b506106f0611bbe565b348015610a4057600080fd5b50610353610b20565b348015610a5557600080fd5b506106c7611bcd565b348015610a6a57600080fd5b5061038d611bf3565b348015610a7f57600080fd5b5061035360048036036020811015610a9657600080fd5b50356001600160a01b0316611bf9565b61035360048036036020811015610abc57600080fd5b50356001600160a01b0316610c59565b348015610ad857600080fd5b5061038d611c85565b348015610aed57600080fd5b5061038d60048036036020811015610b0457600080fd5b5035611c8b565b348015610b1757600080fd5b5061038d611c98565b610b286117bc565b3360009081526046602052604090208054610b7f576040805162461bcd60e51b8152602060048201526012602482015271139bdd081c9959da5cdd195c9959081e595d60721b604482015290519081900360640190fd5b6000610b8a33611185565b1115610b9857610b98611498565b600080610ba433611a21565b91509150336001600160a01b03167f175de791cae106394f6c9daa00b9b55b3c2babff16f57c56b89a8c66601ec59e610bea856002015485611d9a90919063ffffffff16565b6003860154610c0090859063ffffffff611d9a16565b6040805192835260208301919091528051918290030190a2600183015460ff16158015610c2d5750825442115b15610c43576001838101805460ff191690911790555b6002830191909155600382015542600790910155565b610c616117bc565b33600081815260466020526040812091610c7b9084611ddc565b8254909150151534151415610cd7576040805162461bcd60e51b815260206004820152601760248201527f53656e64203020666f7220726567697374726174696f6e000000000000000000604482015290519081900360640190fd5b8154610ce757610ce73382611e48565b610cef610b20565b6000610d04346203d09063ffffffff611cff16565b6003840154909150610d1c908263ffffffff611c9e16565b60038401556011830154610d36903463ffffffff611c9e16565b6011840155604354610d4e903463ffffffff611c9e16565b6043556004830154610d66908263ffffffff611c9e16565b600484015560408051348152905133917f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4919081900360200190a2610dad33823485611f9d565b610db6336121d1565b600060466000610dc4611735565b6001600160a01b03168152602081019190915260400160002060120154604154909150610e0090610dfb478463ffffffff611c9e16565b61226c565b6041555050505050565b6001600160a01b03811660009081526046602052604081208054610e32576000915050610f25565b600060015b6008811015610eb857610eae610ea16064610e9560178560088110610e5857fe5b0154610e8960078760088110610e6a57fe5b0154896009018860088110610e7b57fe5b01549063ffffffff611cff16565b9063ffffffff611cff16565b9063ffffffff611d5816565b839063ffffffff611c9e16565b9150600101610e37565b506001820154610f209060ff1680610ed05750825442145b610ee357681b1ae4d6e2ef500000610ee6565b60005b610f1462278d00610e95610f07876007015442611d9a90919063ffffffff16565b869063ffffffff611cff16565b9063ffffffff611c9e16565b925050505b919050565b600881565b610f376117bc565b336000908152604660205260409020610f4e610b20565b6006810154600511610f5f57600080fd5b610f7e336039836006015460010160068110610f7757fe5b0154612283565b6006810180546001019081905560405133907fab7da30456d497e9ccbd16778660ea62630c90e6eacce1f230887620f0449c8990600090a350565b60078160088110610fc657fe5b0154905081565b600f8160088110610fc657fe5b60338160068110610fc657fe5b610fef612640565b6001600160a01b038216600090815260466020526040908190208151610100810190925260090160088282826020028201915b815481526020019060010190808311611022575b50505050509050919050565b601f81600a8110610fc657fe5b336000908152604660205260409020611066610b20565b600061107b836203d09063ffffffff611d5816565b9050600081116110d2576040805162461bcd60e51b815260206004820152601c60248201527f547279696e6720746f20776974686472617720746f6f20736d616c6c00000000604482015290519081900360640190fd5b60028201546110e7908463ffffffff611d9a16565b60028301556012820154611101908263ffffffff611c9e16565b6012830155604454611119908263ffffffff611c9e16565b604455604051339082156108fc029083906000818181858888f19350505050158015611149573d6000803e3d6000fd5b5060408051828152905133917f6cca423c6ffc06e62a0acc433965e074b11c28479b0449250ce3ff65ac9e39fe919081900360200190a2505050565b6001600160a01b03811660009081526005602052604081205460ff166111ac5760006111d7565b6001600160a01b0382166000908152600660205260409020546002546111d79163ffffffff611d9a16565b92915050565b600681565b600a81565b6111ef6117bc565b336000908152604660205260409020341561120e5761120e6000610c59565b611216610b20565b6000831180156112265750600883105b611277576040805162461bcd60e51b815260206004820152601f60248201527f446f6e27742074727920746f206275792062656573206f662074797065203000604482015290519081900360640190fd5b600783141561133257611288611bcd565b6112d9576040805162461bcd60e51b815260206004820152601c60248201527f5375706572426565206973206e6f7420756e6c6f636b65642079657400000000604482015290519081900360640190fd5b805462093a80906112f190429063ffffffff611d9a16565b1061132d5760405162461bcd60e51b815260040180806020018281038252602d815260200180612660602d913960400191505060405180910390fd5b61138b565b806008015483111561138b576040805162461bcd60e51b815260206004820152601e60248201527f54686973206265652074797065206e6f7420756e6c6f636b6564207965740000604482015290519081900360640190fd5b60206113ae838360090186600881106113a057fe5b01549063ffffffff611c9e16565b11156113b957600080fd5b6113cc828260090185600881106113a057fe5b8160090184600881106113db57fe5b01556045546113f0908363ffffffff611c9e16565b604555600061140f3361140a8560078860088110610e7b57fe5b6122ba565b905061142833826000611423336000611ddc565b611f9d565b6040805185815260208101859052815133927f3b8efbf8f2c0dcb58c5082344b6573cf15279f2be6c0415141060f747fd8bab1928290030190a250505050565b6203d09081565b602981600a8110610fc657fe5b611484612332565b61149661148f611735565b6000611e48565b565b6114b36114a433611185565b6044549063ffffffff611c9e16565b604455611496612370565b62093a8081565b6114cd6117bc565b33600090815260466020526040902034156114ec576114ec6000610c59565b6114f4610b20565b60078210611549576040805162461bcd60e51b815260206004820152601860248201527f4e6f206d6f7265206c6576656c7320746f20756e6c6f636b0000000000000000604482015290519081900360640190fd5b602081600901600184036008811061155d57fe5b0154146115b1576040805162461bcd60e51b815260206004820152601960248201527f50726576206c6576656c206d7573742062652066696c6c656400000000000000604482015290519081900360640190fd5b8060080154600101821461160c576040805162461bcd60e51b815260206004820152601f60248201527f547279696e6720746f20756e6c6f636b2077726f6e6720626565207479706500604482015290519081900360640190fd5b60068214156116275760098160050154101561162757600080fd5b61163f33600f846008811061163857fe5b01546122ba565b50818160080181905550600181600901836008811061165a57fe5b015560408051838152905133917f9314809af08e4ddf0214b2248c8ea28466a17bcf8283d48cebe52b0f1386af0f919081900360200190a25050565b61169e612451565b6000546001600160a01b03908116911614610355576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600781565b60415481565b60025460035460045483565b6001600160a01b031660009081526005602052604090205460ff1690565b6000546001600160a01b031690565b6001600160a01b03811660009081526046602090815260409182902060150180548351818402810184019094528084526060939283018282801561103657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117935750505050509050919050565b600454158015906117e3575060035442906117e09062093a8063ffffffff611c9e16565b11155b156114965760006118006064610e9547600163ffffffff611cff16565b60045490915061182a9061181b90839063ffffffff611d5816565b6002549063ffffffff611c9e16565b6002556003546118439062093a8063ffffffff611c9e16565b600355600454604080519182526020820183905280517f51e794b4ff7ffc1b303e757fa6fc3d0b3e162556cc78d07914238fe3c3f96d8f9281900390910190a1506117bc565b6000611893611735565b6001600160a01b0316336001600160a01b0316146118b057600080fd5b6118b8610b20565b6118c233836122ba565b506001600160a01b0383166000908152604660205260409020600301546118ef908363ffffffff611c9e16565b6001600160a01b03841660009081526046602052604090206003015550600192915050565b602081565b60398160068110610fc657fe5b60445481565b6040818154811061193957fe5b600091825260209091200154905081565b601e81565b6119576117bc565b6001600160a01b0381166000908152604660205260409020611977610b20565b60058101545b600a811015611a0f57601f81600a811061199357fe5b0154826004015410611a07576119c2602982600a81106119af57fe5b015460038401549063ffffffff611c9e16565b600383015560018101600583018190556040516001600160a01b038516907f93135b83255eeccdefec3e312591c2743d0dc8bfac656f9773d7a132af4bb81f90600090a35b60010161197d565b505050565b603f818154811061193957fe5b6001600160a01b03811660009081526046602052604081208054829190611a4f575060009150819050611b25565b80600201549250806003015491506000611a6885610e0a565b600183015490915060ff16158015611a805750815442115b15611abc57611a9e81681b1ae4d6e2ef50000063ffffffff611d9a16565b9050611ab983681b1ae4d6e2ef50000063ffffffff611c9e16565b92505b6000611ae66064610e956033866006015460068110611ad757fe5b0154859063ffffffff611cff16565b90506000611afa838363ffffffff611d9a16565b9050611b0c868363ffffffff611c9e16565b9550611b1e858263ffffffff611c9e16565b9450505050505b915091565b681b1ae4d6e2ef50000081565b6001600160a01b031660009081526006602052604090205490565b600181565b604660205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460118a015460128b015460138c01546014909c01549a9b60ff8b169b610100909b046001600160a01b03169a8e565b6001546001600160a01b031681565b604154600090611beb90606490610e9590604663ffffffff611cff16565b471115905090565b60455481565b611c01612451565b6000546001600160a01b03908116911614611c63576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60425481565b60178160088110610fc657fe5b60435481565b600082820183811015611cf8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082611d0e575060006111d7565b82820282848281611d1b57fe5b0414611cf85760405162461bcd60e51b81526004018080602001828103825260218152602001806126ae6021913960400191505060405180910390fd5b6000611cf883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612455565b6000611cf883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124f7565b6001600160a01b038216600090815260466020526040812054158015611e145750826001600160a01b0316826001600160a01b031614155b15611e205750806111d7565b50506001600160a01b0390811660009081526046602052604090206001015461010090041690565b6001600160a01b038216600090815260466020908152604082204281559160098301015560016008820155426007820155604554611e8d90602063ffffffff611c9e16565b6045556042805460010190556001600160a01b03821615611f585760018181018054610100600160a81b0319166101006001600160a01b038681168281029390931790935560008281526046602090815260408220601581018054808901825590845291832090910180546001600160a01b0319168a8716179055929052920154919091041615611f4f576001600160a01b03808316600090815260466020526040808220600190810154610100900490931682529020601401805490910190555b611f58826121d1565b816001600160a01b0316836001600160a01b03167f0a31ee9d46a828884b81003c8498156ea6aa15b9b54bdd0ef0b533d9eba57e5560405160405180910390a3505050565b611fa5611735565b6001600160a01b03166108fc6203d0906064600a870204049081150290604051600060405180830381858888f19350505050158015611fe8573d6000803e3d6000fd5b506001600160a01b038116156121cb576001600160a01b03811660009081526046602052604090206013810154612025908463ffffffff611c9e16565b6013820155612033826121d1565b8160005b6001600160a01b038216158015906120505750603f5481105b156121c75760006120866064610e95603f858154811061206c57fe5b90600052602060002001548a611cff90919063ffffffff16565b6001600160a01b0384166000908152604660205260409020600201549091506120b5908263ffffffff611c9e16565b60466000856001600160a01b03166001600160a01b031681526020019081526020016000206002018190555061213b6121136064610e95604086815481106120f957fe5b90600052602060002001548b611cff90919063ffffffff16565b6001600160a01b0385166000908152604660205260409020600401549063ffffffff611c9e16565b6001600160a01b038085166000818152604660209081526040918290206004019490945580518581529051600187019492938d16927f8fa68a6a8e2fc9ff758a6e64afba8bc2f66fb082999a2c5225c8c49633faded4928290030190a4506001600160a01b03918216600090815260466020526040902060019081015461010090049092169101612037565b5050505b50505050565b6001600160a01b0381161580159061220257506001600160a01b03811660009081526005602052604090205460ff16155b15612269576001600160a01b03811660009081526046602052604090206011810154674563918244f400001180159061224057506015810154600a11155b801561225957506802b5e3af16b1880000816013015410155b156122675761226782612551565b505b50565b60008183101561227c5781611cf8565b5090919050565b6001600160a01b038216600090815260466020526040902060028101546122b0908363ffffffff611d9a16565b6002909101555050565b6001600160a01b0382166000908152604660205260408120600381015482906122e4908590612631565b905060006123026064610e95605a610e89898763ffffffff611d9a16565b600384015490915061231a908363ffffffff611d9a16565b60038401556123298682612283565b95945050505050565b6001546001600160a01b0316331461234957600080fd5b60015461235e906001600160a01b0316611bf9565b600180546001600160a01b0319169055565b6123786117bc565b3360009081526005602052604090205460ff166123dc576040805162461bcd60e51b815260206004820152601d60248201527f55736572206e6f74207265676973746572656420666f7220626f6e7573000000604482015290519081900360640190fd5b60006123f0476123eb33611185565b612631565b33600090815260066020526040902054909150612413908263ffffffff611c9e16565b33600081815260066020526040808220939093559151909183156108fc02918491818181858888f19350505050158015612267573d6000803e3d6000fd5b3390565b600081836124e15760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156124a657818101518382015260200161248e565b50505050905090810190601f1680156124d35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816124ed57fe5b0495945050505050565b600081848411156125495760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156124a657818101518382015260200161248e565b505050900390565b6125596117bc565b6001600160a01b03811660009081526005602052604090205460ff16156125b15760405162461bcd60e51b815260040180806020018281038252602181526020018061268d6021913960400191505060405180910390fd5b6001600160a01b0381166000908152600560209081526040808320805460ff1916600190811790915560025460069093529220556004546125f79163ffffffff611c9e16565b6004556040516001600160a01b038216907fffe88a5f59af245d336238ae39a54e562c15024f255db787524f9abd61c8765a90600090a250565b600081831061227c5781611cf8565b604051806101000160405280600890602082028036833750919291505056fe596f752073686f756c642062652072656769737465726564206c657373207468616e203720646179732061676f5573657220616c7265616479207265676973746572656420666f7220626f6e7573536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122044a6ec0dd14a6d9e33eca1c16e7d98f4e3ecb85ae80fe8d9dbd79e517129536464736f6c634300060a00335573657220616c7265616479207265676973746572656420666f7220626f6e7573536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77

Deployed Bytecode

0x60806040526004361061031d5760003560e01c80639ca423b3116101ab578063cfbeb83e116100f7578063e5d6c33a11610095578063f340fa011161006f578063f340fa0114610aa6578063f60cdcf614610acc578063f7620b1614610ae1578063ff50abdc14610b0b57610355565b8063e5d6c33a14610a49578063eeb851a214610a5e578063f2fde38b14610a7357610355565b8063dec107d1116100d1578063dec107d1146105f0578063e2eb41ff14610976578063e30c397814610a1f578063e522538114610a3457610355565b8063cfbeb83e14610919578063d9c282f01461092e578063dacfbd791461096157610355565b8063b5affb0511610164578063be6c588a1161013e578063be6c588a1461085b578063bfaed58a14610870578063bfd3dc93146108a3578063c7d88b05146108cd57610355565b8063b5affb05146107f2578063b74126cc1461081c578063b913ee4f1461083157610355565b80639ca423b31461070c5780639e95452b1461078f578063a155b1d41461053a578063a35bc9af1461054f578063a9059cbb146107a4578063b2da61b4146107dd57610355565b806347ee29921161026a578063715018a61161022357806375b4d78c116101fd57806375b4d78c146106615780637e9907721461054f578063894af783146106945780638da5cb5b146106db57610355565b8063715018a614610622578063723928901461063757806373ad468a1461064c57610355565b806347ee2992146105875780634ab0cac91461059c5780634e71e0c8146105c65780635b373092146105db5780635ec1ddfc146105f05780636198e3391461060557610355565b806321f45653116102d75780633128aa86116102b15780633128aa861461050757806336fe15e61461053a578063435f220c1461054f57806346a837851461056457610355565b806321f45653146104475780632ab291c1146104b35780632e1a7d4d146104dd57610355565b80628cc2621461035a5780630486916d1461039f5780630542061e146103b457806310f230dc146103c9578063127fcac7146103f357806321d378f51461041d57610355565b36610355573461034957336000908152604660205260409020541561034457610344610b20565b610353565b6103536000610c59565b005b600080fd5b34801561036657600080fd5b5061038d6004803603602081101561037d57600080fd5b50356001600160a01b0316610e0a565b60408051918252519081900360200190f35b3480156103ab57600080fd5b5061038d610f2a565b3480156103c057600080fd5b50610353610f2f565b3480156103d557600080fd5b5061038d600480360360208110156103ec57600080fd5b5035610fb9565b3480156103ff57600080fd5b5061038d6004803603602081101561041657600080fd5b5035610fcd565b34801561042957600080fd5b5061038d6004803603602081101561044057600080fd5b5035610fda565b34801561045357600080fd5b5061047a6004803603602081101561046a57600080fd5b50356001600160a01b0316610fe7565b604051808261010080838360005b838110156104a0578181015183820152602001610488565b5050505090500191505060405180910390f35b3480156104bf57600080fd5b5061038d600480360360208110156104d657600080fd5b5035611042565b3480156104e957600080fd5b506103536004803603602081101561050057600080fd5b503561104f565b34801561051357600080fd5b5061038d6004803603602081101561052a57600080fd5b50356001600160a01b0316611185565b34801561054657600080fd5b5061038d6111dd565b34801561055b57600080fd5b5061038d6111e2565b6103536004803603604081101561057a57600080fd5b50803590602001356111e7565b34801561059357600080fd5b5061038d611468565b3480156105a857600080fd5b5061038d600480360360208110156105bf57600080fd5b503561146f565b3480156105d257600080fd5b5061035361147c565b3480156105e757600080fd5b50610353611498565b3480156105fc57600080fd5b5061038d6114be565b6103536004803603602081101561061b57600080fd5b50356114c5565b34801561062e57600080fd5b50610353611696565b34801561064357600080fd5b5061038d611700565b34801561065857600080fd5b5061038d611705565b34801561066d57600080fd5b5061067661170b565b60408051938452602084019290925282820152519081900360600190f35b3480156106a057600080fd5b506106c7600480360360208110156106b757600080fd5b50356001600160a01b0316611717565b604080519115158252519081900360200190f35b3480156106e757600080fd5b506106f0611735565b604080516001600160a01b039092168252519081900360200190f35b34801561071857600080fd5b5061073f6004803603602081101561072f57600080fd5b50356001600160a01b0316611744565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561077b578181015183820152602001610763565b505050509050019250505060405180910390f35b34801561079b57600080fd5b506103536117bc565b3480156107b057600080fd5b506106c7600480360360408110156107c757600080fd5b506001600160a01b038135169060200135611889565b3480156107e957600080fd5b5061038d611914565b3480156107fe57600080fd5b5061038d6004803603602081101561081557600080fd5b5035611919565b34801561082857600080fd5b5061038d611926565b34801561083d57600080fd5b5061038d6004803603602081101561085457600080fd5b503561192c565b34801561086757600080fd5b5061038d61194a565b34801561087c57600080fd5b506103536004803603602081101561089357600080fd5b50356001600160a01b031661194f565b3480156108af57600080fd5b5061038d600480360360208110156108c657600080fd5b5035611a14565b3480156108d957600080fd5b50610900600480360360208110156108f057600080fd5b50356001600160a01b0316611a21565b6040805192835260208301919091528051918290030190f35b34801561092557600080fd5b5061038d611b2a565b34801561093a57600080fd5b5061038d6004803603602081101561095157600080fd5b50356001600160a01b0316611b37565b34801561096d57600080fd5b5061038d611b52565b34801561098257600080fd5b506109a96004803603602081101561099957600080fd5b50356001600160a01b0316611b57565b604080519e8f529c151560208f01526001600160a01b03909b168d8d015260608d019990995260808c019790975260a08b019590955260c08a019390935260e08901919091526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b348015610a2b57600080fd5b506106f0611bbe565b348015610a4057600080fd5b50610353610b20565b348015610a5557600080fd5b506106c7611bcd565b348015610a6a57600080fd5b5061038d611bf3565b348015610a7f57600080fd5b5061035360048036036020811015610a9657600080fd5b50356001600160a01b0316611bf9565b61035360048036036020811015610abc57600080fd5b50356001600160a01b0316610c59565b348015610ad857600080fd5b5061038d611c85565b348015610aed57600080fd5b5061038d60048036036020811015610b0457600080fd5b5035611c8b565b348015610b1757600080fd5b5061038d611c98565b610b286117bc565b3360009081526046602052604090208054610b7f576040805162461bcd60e51b8152602060048201526012602482015271139bdd081c9959da5cdd195c9959081e595d60721b604482015290519081900360640190fd5b6000610b8a33611185565b1115610b9857610b98611498565b600080610ba433611a21565b91509150336001600160a01b03167f175de791cae106394f6c9daa00b9b55b3c2babff16f57c56b89a8c66601ec59e610bea856002015485611d9a90919063ffffffff16565b6003860154610c0090859063ffffffff611d9a16565b6040805192835260208301919091528051918290030190a2600183015460ff16158015610c2d5750825442115b15610c43576001838101805460ff191690911790555b6002830191909155600382015542600790910155565b610c616117bc565b33600081815260466020526040812091610c7b9084611ddc565b8254909150151534151415610cd7576040805162461bcd60e51b815260206004820152601760248201527f53656e64203020666f7220726567697374726174696f6e000000000000000000604482015290519081900360640190fd5b8154610ce757610ce73382611e48565b610cef610b20565b6000610d04346203d09063ffffffff611cff16565b6003840154909150610d1c908263ffffffff611c9e16565b60038401556011830154610d36903463ffffffff611c9e16565b6011840155604354610d4e903463ffffffff611c9e16565b6043556004830154610d66908263ffffffff611c9e16565b600484015560408051348152905133917f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4919081900360200190a2610dad33823485611f9d565b610db6336121d1565b600060466000610dc4611735565b6001600160a01b03168152602081019190915260400160002060120154604154909150610e0090610dfb478463ffffffff611c9e16565b61226c565b6041555050505050565b6001600160a01b03811660009081526046602052604081208054610e32576000915050610f25565b600060015b6008811015610eb857610eae610ea16064610e9560178560088110610e5857fe5b0154610e8960078760088110610e6a57fe5b0154896009018860088110610e7b57fe5b01549063ffffffff611cff16565b9063ffffffff611cff16565b9063ffffffff611d5816565b839063ffffffff611c9e16565b9150600101610e37565b506001820154610f209060ff1680610ed05750825442145b610ee357681b1ae4d6e2ef500000610ee6565b60005b610f1462278d00610e95610f07876007015442611d9a90919063ffffffff16565b869063ffffffff611cff16565b9063ffffffff611c9e16565b925050505b919050565b600881565b610f376117bc565b336000908152604660205260409020610f4e610b20565b6006810154600511610f5f57600080fd5b610f7e336039836006015460010160068110610f7757fe5b0154612283565b6006810180546001019081905560405133907fab7da30456d497e9ccbd16778660ea62630c90e6eacce1f230887620f0449c8990600090a350565b60078160088110610fc657fe5b0154905081565b600f8160088110610fc657fe5b60338160068110610fc657fe5b610fef612640565b6001600160a01b038216600090815260466020526040908190208151610100810190925260090160088282826020028201915b815481526020019060010190808311611022575b50505050509050919050565b601f81600a8110610fc657fe5b336000908152604660205260409020611066610b20565b600061107b836203d09063ffffffff611d5816565b9050600081116110d2576040805162461bcd60e51b815260206004820152601c60248201527f547279696e6720746f20776974686472617720746f6f20736d616c6c00000000604482015290519081900360640190fd5b60028201546110e7908463ffffffff611d9a16565b60028301556012820154611101908263ffffffff611c9e16565b6012830155604454611119908263ffffffff611c9e16565b604455604051339082156108fc029083906000818181858888f19350505050158015611149573d6000803e3d6000fd5b5060408051828152905133917f6cca423c6ffc06e62a0acc433965e074b11c28479b0449250ce3ff65ac9e39fe919081900360200190a2505050565b6001600160a01b03811660009081526005602052604081205460ff166111ac5760006111d7565b6001600160a01b0382166000908152600660205260409020546002546111d79163ffffffff611d9a16565b92915050565b600681565b600a81565b6111ef6117bc565b336000908152604660205260409020341561120e5761120e6000610c59565b611216610b20565b6000831180156112265750600883105b611277576040805162461bcd60e51b815260206004820152601f60248201527f446f6e27742074727920746f206275792062656573206f662074797065203000604482015290519081900360640190fd5b600783141561133257611288611bcd565b6112d9576040805162461bcd60e51b815260206004820152601c60248201527f5375706572426565206973206e6f7420756e6c6f636b65642079657400000000604482015290519081900360640190fd5b805462093a80906112f190429063ffffffff611d9a16565b1061132d5760405162461bcd60e51b815260040180806020018281038252602d815260200180612660602d913960400191505060405180910390fd5b61138b565b806008015483111561138b576040805162461bcd60e51b815260206004820152601e60248201527f54686973206265652074797065206e6f7420756e6c6f636b6564207965740000604482015290519081900360640190fd5b60206113ae838360090186600881106113a057fe5b01549063ffffffff611c9e16565b11156113b957600080fd5b6113cc828260090185600881106113a057fe5b8160090184600881106113db57fe5b01556045546113f0908363ffffffff611c9e16565b604555600061140f3361140a8560078860088110610e7b57fe5b6122ba565b905061142833826000611423336000611ddc565b611f9d565b6040805185815260208101859052815133927f3b8efbf8f2c0dcb58c5082344b6573cf15279f2be6c0415141060f747fd8bab1928290030190a250505050565b6203d09081565b602981600a8110610fc657fe5b611484612332565b61149661148f611735565b6000611e48565b565b6114b36114a433611185565b6044549063ffffffff611c9e16565b604455611496612370565b62093a8081565b6114cd6117bc565b33600090815260466020526040902034156114ec576114ec6000610c59565b6114f4610b20565b60078210611549576040805162461bcd60e51b815260206004820152601860248201527f4e6f206d6f7265206c6576656c7320746f20756e6c6f636b0000000000000000604482015290519081900360640190fd5b602081600901600184036008811061155d57fe5b0154146115b1576040805162461bcd60e51b815260206004820152601960248201527f50726576206c6576656c206d7573742062652066696c6c656400000000000000604482015290519081900360640190fd5b8060080154600101821461160c576040805162461bcd60e51b815260206004820152601f60248201527f547279696e6720746f20756e6c6f636b2077726f6e6720626565207479706500604482015290519081900360640190fd5b60068214156116275760098160050154101561162757600080fd5b61163f33600f846008811061163857fe5b01546122ba565b50818160080181905550600181600901836008811061165a57fe5b015560408051838152905133917f9314809af08e4ddf0214b2248c8ea28466a17bcf8283d48cebe52b0f1386af0f919081900360200190a25050565b61169e612451565b6000546001600160a01b03908116911614610355576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600781565b60415481565b60025460035460045483565b6001600160a01b031660009081526005602052604090205460ff1690565b6000546001600160a01b031690565b6001600160a01b03811660009081526046602090815260409182902060150180548351818402810184019094528084526060939283018282801561103657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117935750505050509050919050565b600454158015906117e3575060035442906117e09062093a8063ffffffff611c9e16565b11155b156114965760006118006064610e9547600163ffffffff611cff16565b60045490915061182a9061181b90839063ffffffff611d5816565b6002549063ffffffff611c9e16565b6002556003546118439062093a8063ffffffff611c9e16565b600355600454604080519182526020820183905280517f51e794b4ff7ffc1b303e757fa6fc3d0b3e162556cc78d07914238fe3c3f96d8f9281900390910190a1506117bc565b6000611893611735565b6001600160a01b0316336001600160a01b0316146118b057600080fd5b6118b8610b20565b6118c233836122ba565b506001600160a01b0383166000908152604660205260409020600301546118ef908363ffffffff611c9e16565b6001600160a01b03841660009081526046602052604090206003015550600192915050565b602081565b60398160068110610fc657fe5b60445481565b6040818154811061193957fe5b600091825260209091200154905081565b601e81565b6119576117bc565b6001600160a01b0381166000908152604660205260409020611977610b20565b60058101545b600a811015611a0f57601f81600a811061199357fe5b0154826004015410611a07576119c2602982600a81106119af57fe5b015460038401549063ffffffff611c9e16565b600383015560018101600583018190556040516001600160a01b038516907f93135b83255eeccdefec3e312591c2743d0dc8bfac656f9773d7a132af4bb81f90600090a35b60010161197d565b505050565b603f818154811061193957fe5b6001600160a01b03811660009081526046602052604081208054829190611a4f575060009150819050611b25565b80600201549250806003015491506000611a6885610e0a565b600183015490915060ff16158015611a805750815442115b15611abc57611a9e81681b1ae4d6e2ef50000063ffffffff611d9a16565b9050611ab983681b1ae4d6e2ef50000063ffffffff611c9e16565b92505b6000611ae66064610e956033866006015460068110611ad757fe5b0154859063ffffffff611cff16565b90506000611afa838363ffffffff611d9a16565b9050611b0c868363ffffffff611c9e16565b9550611b1e858263ffffffff611c9e16565b9450505050505b915091565b681b1ae4d6e2ef50000081565b6001600160a01b031660009081526006602052604090205490565b600181565b604660205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460118a015460128b015460138c01546014909c01549a9b60ff8b169b610100909b046001600160a01b03169a8e565b6001546001600160a01b031681565b604154600090611beb90606490610e9590604663ffffffff611cff16565b471115905090565b60455481565b611c01612451565b6000546001600160a01b03908116911614611c63576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60425481565b60178160088110610fc657fe5b60435481565b600082820183811015611cf8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082611d0e575060006111d7565b82820282848281611d1b57fe5b0414611cf85760405162461bcd60e51b81526004018080602001828103825260218152602001806126ae6021913960400191505060405180910390fd5b6000611cf883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612455565b6000611cf883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124f7565b6001600160a01b038216600090815260466020526040812054158015611e145750826001600160a01b0316826001600160a01b031614155b15611e205750806111d7565b50506001600160a01b0390811660009081526046602052604090206001015461010090041690565b6001600160a01b038216600090815260466020908152604082204281559160098301015560016008820155426007820155604554611e8d90602063ffffffff611c9e16565b6045556042805460010190556001600160a01b03821615611f585760018181018054610100600160a81b0319166101006001600160a01b038681168281029390931790935560008281526046602090815260408220601581018054808901825590845291832090910180546001600160a01b0319168a8716179055929052920154919091041615611f4f576001600160a01b03808316600090815260466020526040808220600190810154610100900490931682529020601401805490910190555b611f58826121d1565b816001600160a01b0316836001600160a01b03167f0a31ee9d46a828884b81003c8498156ea6aa15b9b54bdd0ef0b533d9eba57e5560405160405180910390a3505050565b611fa5611735565b6001600160a01b03166108fc6203d0906064600a870204049081150290604051600060405180830381858888f19350505050158015611fe8573d6000803e3d6000fd5b506001600160a01b038116156121cb576001600160a01b03811660009081526046602052604090206013810154612025908463ffffffff611c9e16565b6013820155612033826121d1565b8160005b6001600160a01b038216158015906120505750603f5481105b156121c75760006120866064610e95603f858154811061206c57fe5b90600052602060002001548a611cff90919063ffffffff16565b6001600160a01b0384166000908152604660205260409020600201549091506120b5908263ffffffff611c9e16565b60466000856001600160a01b03166001600160a01b031681526020019081526020016000206002018190555061213b6121136064610e95604086815481106120f957fe5b90600052602060002001548b611cff90919063ffffffff16565b6001600160a01b0385166000908152604660205260409020600401549063ffffffff611c9e16565b6001600160a01b038085166000818152604660209081526040918290206004019490945580518581529051600187019492938d16927f8fa68a6a8e2fc9ff758a6e64afba8bc2f66fb082999a2c5225c8c49633faded4928290030190a4506001600160a01b03918216600090815260466020526040902060019081015461010090049092169101612037565b5050505b50505050565b6001600160a01b0381161580159061220257506001600160a01b03811660009081526005602052604090205460ff16155b15612269576001600160a01b03811660009081526046602052604090206011810154674563918244f400001180159061224057506015810154600a11155b801561225957506802b5e3af16b1880000816013015410155b156122675761226782612551565b505b50565b60008183101561227c5781611cf8565b5090919050565b6001600160a01b038216600090815260466020526040902060028101546122b0908363ffffffff611d9a16565b6002909101555050565b6001600160a01b0382166000908152604660205260408120600381015482906122e4908590612631565b905060006123026064610e95605a610e89898763ffffffff611d9a16565b600384015490915061231a908363ffffffff611d9a16565b60038401556123298682612283565b95945050505050565b6001546001600160a01b0316331461234957600080fd5b60015461235e906001600160a01b0316611bf9565b600180546001600160a01b0319169055565b6123786117bc565b3360009081526005602052604090205460ff166123dc576040805162461bcd60e51b815260206004820152601d60248201527f55736572206e6f74207265676973746572656420666f7220626f6e7573000000604482015290519081900360640190fd5b60006123f0476123eb33611185565b612631565b33600090815260066020526040902054909150612413908263ffffffff611c9e16565b33600081815260066020526040808220939093559151909183156108fc02918491818181858888f19350505050158015612267573d6000803e3d6000fd5b3390565b600081836124e15760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156124a657818101518382015260200161248e565b50505050905090810190601f1680156124d35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816124ed57fe5b0495945050505050565b600081848411156125495760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156124a657818101518382015260200161248e565b505050900390565b6125596117bc565b6001600160a01b03811660009081526005602052604090205460ff16156125b15760405162461bcd60e51b815260040180806020018281038252602181526020018061268d6021913960400191505060405180910390fd5b6001600160a01b0381166000908152600560209081526040808320805460ff1916600190811790915560025460069093529220556004546125f79163ffffffff611c9e16565b6004556040516001600160a01b038216907fffe88a5f59af245d336238ae39a54e562c15024f255db787524f9abd61c8765a90600090a250565b600081831061227c5781611cf8565b604051806101000160405280600890602082028036833750919291505056fe596f752073686f756c642062652072656769737465726564206c657373207468616e203720646179732061676f5573657220616c7265616479207265676973746572656420666f7220626f6e7573536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122044a6ec0dd14a6d9e33eca1c16e7d98f4e3ecb85ae80fe8d9dbd79e517129536464736f6c634300060a0033

Deployed Bytecode Sourcemap

6234:14509:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9504:9;9500:186;;9547:10;9576:1;9539:19;;;:7;:19;;;;;:34;:38;9535:88;;9598:9;:7;:9::i;:::-;9500:186;;;9655:19;9671:1;9655:7;:19::i;:::-;6234:14509;;;;;16229:644;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16229:644:0;-1:-1:-1;;;;;16229:644:0;;:::i;:::-;;;;;;;;;;;;;;;;6828:38;;;;;;;;;;;;;:::i;15842:379::-;;;;;;;;;;;;;:::i;7096:118::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7096:118:0;;:::i;7221:117::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7221:117:0;;:::i;7758:80::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7758:80:0;;:::i;9701:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9701:124:0;-1:-1:-1;;;;;9701:124:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7441:157;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7441:157:0;;:::i;11722:510::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11722:510:0;;:::i;4779:169::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4779:169:0;-1:-1:-1;;;;;4779:169:0;;:::i;7046:43::-;;;;;;;;;;;;;:::i;6998:41::-;;;;;;;;;;;;;:::i;14725:1109::-;;;;;;;;;;;;;;;;-1:-1:-1;14725:1109:0;;;;;;;:::i;7961:46::-;;;;;;;;;;;;;:::i;7605:146::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7605:146:0;;:::i;17521:135::-;;;;;;;;;;;;;:::i;17344:169::-;;;;;;;;;;;;;:::i;3457:44::-;;;;;;;;;;;;;:::i;13974:743::-;;;;;;;;;;;;;;;;-1:-1:-1;13974:743:0;;:::i;5860:91::-;;;;;;;;;;;;;:::i;6873:56::-;;;;;;;;;;;;;:::i;8486:25::-;;;;;;;;;;;;;:::i;3736:26::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;4527:124;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4527:124:0;-1:-1:-1;;;;;4527:124:0;;:::i;:::-;;;;;;;;;;;;;;;;;;1134:79;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1134:79:0;;;;;;;;;;;;;;10000:120;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10000:120:0;-1:-1:-1;;;;;10000:120:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4053:466;;;;;;;;;;;;;:::i;10363:297::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10363:297:0;;;;;;;;:::i;8014:48::-;;;;;;;;;;;;;:::i;7845:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7845:107:0;;:::i;8588:30::-;;;;;;;;;;;;;:::i;8424:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8424:53:0;;:::i;8240:52::-;;;;;;;;;;;;;:::i;16881:455::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16881:455:0;-1:-1:-1;;;;;16881:455:0;;:::i;8361:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8361:56:0;;:::i;13036:930::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13036:930:0;-1:-1:-1;;;;;13036:930:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8069:57;;;;;;;;;;;;;:::i;4659:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4659:112:0;-1:-1:-1;;;;;4659:112:0;;:::i;3399:51::-;;;;;;;;;;;;;:::i;8662:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8662:41:0;-1:-1:-1;;;;;8662:41:0;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;8662:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5722:27;;;;;;;;;;;;;:::i;12240:788::-;;;;;;;;;;;;;:::i;9833:159::-;;;;;;;;;;;;;:::i;8625:30::-;;;;;;;;;;;;;:::i;5959:122::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5959:122:0;-1:-1:-1;;;;;5959:122:0;;:::i;10668:1046::-;;;;;;;;;;;;;;;;-1:-1:-1;10668:1046:0;-1:-1:-1;;;;;10668:1046:0;;:::i;8518:27::-;;;;;;;;;;;;;:::i;7345:89::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7345:89:0;;:::i;8552:29::-;;;;;;;;;;;;;:::i;12240:788::-;3917:24;:22;:24::i;:::-;12329:10:::1;12297:21;12321:19:::0;;;:7:::1;:19;::::0;;;;12359:21;;12351:56:::1;;;::::0;;-1:-1:-1;;;12351:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;12351:56:0;;;;;;;;;;;;;::::1;;12454:1;12424:27;12440:10;12424:15;:27::i;:::-;:31;12420:79;;;12472:15;:13;:15::i;:::-;12512:20;12534:18:::0;12556:26:::1;12571:10;12556:14;:26::i;:::-;12511:71;;;;12628:10;-1:-1:-1::0;;;;;12598:151:0::1;;12653:37;12670:6;:19;;;12653:12;:16;;:37;;;;:::i;:::-;12720:17;::::0;::::1;::::0;12705:33:::1;::::0;:10;;:33:::1;:14;:33;:::i;:::-;12598:151;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;12767:23;::::0;::::1;::::0;::::1;;12766:24;:55:::0;::::1;;;-1:-1:-1::0;12794:21:0;;12818:3:::1;-1:-1:-1::0;12766:55:0::1;12762:118;;;12864:4;12838:23:::0;;::::1;:30:::0;;-1:-1:-1;;12838:30:0::1;::::0;;::::1;::::0;;12762:118:::1;12892:19;::::0;::::1;:34:::0;;;;12937:17:::1;::::0;::::1;:30:::0;13005:15:::1;12978:24;::::0;;::::1;:42:::0;12240:788::o;10668:1046::-;3917:24;:22;:24::i;:::-;10776:10:::1;10744:21;10768:19:::0;;;:7:::1;:19;::::0;;;;;10819:27:::1;::::0;10842:3;10819:10:::1;:27::i;:::-;10887:21:::0;;10798:48;;-1:-1:-1;10887:25:0;;10868:9:::1;:14:::0;10867:45:::1;;10859:81;;;::::0;;-1:-1:-1;;;10859:81:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10967:21:::0;;10963:92:::1;;11010:33;11020:10;11032;11010:9;:33::i;:::-;11067:9;:7;:9::i;:::-;11099:11;11113:28;:9;8001:6;11113:28;:13;:28;:::i;:::-;11172:17;::::0;::::1;::::0;11099:42;;-1:-1:-1;11172:26:0::1;::::0;11099:42;11172:26:::1;:21;:26;:::i;:::-;11152:17;::::0;::::1;:46:::0;11233:21:::1;::::0;::::1;::::0;:36:::1;::::0;11259:9:::1;11233:36;:25;:36;:::i;:::-;11209:21;::::0;::::1;:60:::0;11297:14:::1;::::0;:29:::1;::::0;11316:9:::1;11297:29;:18;:29;:::i;:::-;11280:14;:46:::0;11353:13:::1;::::0;::::1;::::0;:22:::1;::::0;11371:3;11353:22:::1;:17;:22;:::i;:::-;11337:13;::::0;::::1;:38:::0;11391:32:::1;::::0;;11413:9:::1;11391:32:::0;;;;11401:10:::1;::::0;11391:32:::1;::::0;;;;;::::1;::::0;;::::1;11448:55;11464:10;11476:3;11481:9;11492:10;11448:15;:55::i;:::-;11516:31;11536:10;11516:19;:31::i;:::-;11560:23;11586:7;:16;11594:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;11586:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11586:16:0;:32:::1;;::::0;11651:10:::1;::::0;11586:32;;-1:-1:-1;11642:64:0::1;::::0;11663:42:::1;:21;11586:32:::0;11663:42:::1;:25;:42;:::i;:::-;11642:8;:64::i;:::-;11629:10;:77:::0;-1:-1:-1;;;;;10668:1046:0:o;16229:644::-;-1:-1:-1;;;;;16323:13:0;;16279:7;16323:13;;;:7;:13;;;;;16351:21;;16347:67;;16401:1;16394:8;;;;;16347:67;16426:13;16468:1;16454:189;6865:1;16471;:14;16454:189;;;16515:116;16543:73;16612:3;16543:64;16582:21;16604:1;16582:24;;;;;;;;;16543:34;16562:11;16574:1;16562:14;;;;;;;;;16543:6;:11;;16555:1;16543:14;;;;;;;;;;:34;:18;:34;:::i;:::-;:38;:64;:38;:64;:::i;:::-;:68;:73;:68;:73;:::i;:::-;16515:5;;:116;:9;:116;:::i;:::-;16507:124;-1:-1:-1;16487:3:0;;16454:189;;;-1:-1:-1;16778:23:0;;;;16662:203;;16778:23;;;:55;;-1:-1:-1;16805:21:0;;16830:3;16805:28;16778:55;:86;;8120:6;16778:86;;;16836:1;16778:86;16662:97;16751:7;16662:70;16686:45;16706:6;:24;;;16686:15;:19;;:45;;;;:::i;:::-;16662:5;;:70;:23;:70;:::i;:97::-;:115;:203;:115;:203;:::i;:::-;16655:210;;;;16229:644;;;;:::o;6828:38::-;6865:1;6828:38;:::o;15842:379::-;3917:24;:22;:24::i;:::-;15942:10:::1;15910:21;15934:19:::0;;;:7:::1;:19;::::0;;;;15966:9:::1;:7;:9::i;:::-;7088:1;15996:19:::0;::::1;::::0;16018;-1:-1:-1;15988:50:0::1;;;::::0;::::1;;16049:69;16067:10;16079:13;16093:6;:19;;;16115:1;16093:23;16079:38;;;;;;;;;16049:17;:69::i;:::-;16129:19;::::0;::::1;:21:::0;;::::1;;::::0;;;;16166:47:::1;::::0;16181:10:::1;::::0;16166:47:::1;::::0;16129:19:::1;::::0;16166:47:::1;3952:1;15842:379::o:0;7096:118::-;;;;;;;;;;;;;-1:-1:-1;7096:118:0;:::o;7221:117::-;;;;;;;;;7758:80;;;;;;;;;9701:124;9754:26;;:::i;:::-;-1:-1:-1;;;;;9800:12:0;;;;;;:7;:12;;;;;;;9793:24;;;;;;;;9800:17;;9793:24;;9800:17;9793:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9701:124;;;:::o;7441:157::-;;;;;;;;;11722:510;11806:10;11774:21;11798:19;;;:7;:19;;;;;11830:9;:7;:9::i;:::-;11852:13;11868:25;:6;8001;11868:25;:10;:25;:::i;:::-;11852:41;;11920:1;11912:5;:9;11904:50;;;;;-1:-1:-1;;;11904:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11987:19;;;;:31;;12011:6;11987:31;:23;:31;:::i;:::-;11965:19;;;:53;12054:22;;;;:33;;12081:5;12054:33;:26;:33;:::i;:::-;12029:22;;;:58;12116:15;;:26;;12136:5;12116:26;:19;:26;:::i;:::-;12098:15;:44;12153:26;;:10;;:26;;;;;12173:5;;12153:26;;;;12173:5;12153:10;:26;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12195:29:0;;;;;;;;12206:10;;12195:29;;;;;;;;;;11722:510;;;:::o;4779:169::-;-1:-1:-1;;;;;4865:26:0;;4838:7;4865:26;;;:20;:26;;;;;;;;:75;;4939:1;4865:75;;;-1:-1:-1;;;;;4915:20:0;;;;;;:14;:20;;;;;;:5;4894:16;:42;;;:20;:42;:::i;:::-;4858:82;4779:169;-1:-1:-1;;4779:169:0:o;7046:43::-;7088:1;7046:43;:::o;6998:41::-;7037:2;6998:41;:::o;14725:1109::-;3917:24;:22;:24::i;:::-;14848:10:::1;14816:21;14840:19:::0;;;:7:::1;:19;::::0;;;;14876:9:::1;:13:::0;14872:65:::1;;14906:19;14922:1;14906:7;:19::i;:::-;14949:9;:7;:9::i;:::-;14985:1;14979:3;:7;:27;;;;;6865:1;14990:3;:16;14979:27;14971:71;;;::::0;;-1:-1:-1;;;14971:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6915:14:::0;15057:22;::::1;15053:355;;;15104:18;:16;:18::i;:::-;15096:59;;;::::0;;-1:-1:-1;;;15096:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15198:21:::0;;8348:6:::1;::::0;15178:42:::1;::::0;:15:::1;::::0;:42:::1;:19;:42;:::i;:::-;:67;15170:125;;;;-1:-1:-1::0;;;15170:125:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15053:355;;;15343:6;:18;;;15336:3;:25;;15328:68;;;::::0;;-1:-1:-1;;;15328:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;8060:2;15428:27;15449:5;15428:6;:11;;15440:3;15428:16;;;;;;;;::::0;;:27:::1;:20;:27;:::i;:::-;:50;;15420:59;;;::::0;::::1;;15509:27;15530:5;15509:6;:11;;15521:3;15509:16;;;;;;:27;15490:6;:11;;15502:3;15490:16;;;;;;;;:46:::0;15565:15:::1;::::0;:26:::1;::::0;15585:5;15565:26:::1;:19;:26;:::i;:::-;15547:15;:44:::0;15602:18:::1;15623:60;15643:10;15655:27;15676:5:::0;15655:11:::1;15667:3:::0;15655:16:::1;::::0;::::1;;;;:27;15623:19;:60::i;:::-;15602:81;;15696:78;15712:10;15724;15736:1;15739:34;15750:10;15770:1;15739:10;:34::i;:::-;15696:15;:78::i;:::-;15792:34;::::0;;;;;::::1;::::0;::::1;::::0;;;;;15803:10:::1;::::0;15792:34:::1;::::0;;;;;;::::1;3952:1;;14725:1109:::0;;:::o;7961:46::-;8001:6;7961:46;:::o;7605:146::-;;;;;;;;;17521:135;17585:22;:20;:22::i;:::-;17618:30;17628:7;:5;:7::i;:::-;17645:1;17618:9;:30::i;:::-;17521:135::o;17344:169::-;17425:48;17445:27;17461:10;17445:15;:27::i;:::-;17425:15;;;:48;:19;:48;:::i;:::-;17407:15;:66;17484:21;:19;:21::i;3457:44::-;3494:7;3457:44;:::o;13974:743::-;3917:24;:22;:24::i;:::-;14081:10:::1;14049:21;14073:19:::0;;;:7:::1;:19;::::0;;;;14109:9:::1;:13:::0;14105:65:::1;;14139:19;14155:1;14139:7;:19::i;:::-;14182:9;:7;:9::i;:::-;6915:14:::0;14212:21;::::1;14204:58;;;::::0;;-1:-1:-1;;;14204:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;8060:2;14282:6;:11;;14300:1;14294:3;:7;14282:20;;;;;;;;;:43;14274:81;;;::::0;;-1:-1:-1;;;14274:81:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;14381:6;:18;;;14402:1;14381:22;14374:3;:29;14366:73;;;::::0;;-1:-1:-1;;;14366:73:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6977:14:::0;14456:21;::::1;14452:81;;;14519:1;14502:6;:13;;;:18;;14494:27;;;::::0;::::1;;14543:56;14563:10;14575:18;14594:3;14575:23;;;;;;;;;14543:19;:56::i;:::-;;14631:3;14610:6;:18;;:24;;;;14664:1;14645:6;:11;;14657:3;14645:16;;;;;;;;:20:::0;14681:28:::1;::::0;;;;;;;14693:10:::1;::::0;14681:28:::1;::::0;;;;;::::1;::::0;;::::1;3952:1;13974:743:::0;:::o;5860:91::-;1277:12;:10;:12::i;:::-;1267:6;;-1:-1:-1;;;;;1267:6:0;;;:22;;;1259:67;;;;;-1:-1:-1;;;1259:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6873:56;6915:14;6873:56;:::o;8486:25::-;;;;:::o;3736:26::-;;;;;;;;:::o;4527:124::-;-1:-1:-1;;;;;4617:26:0;4593:4;4617:26;;;:20;:26;;;;;;;;;4527:124::o;1134:79::-;1172:7;1199:6;-1:-1:-1;;;;;1199:6:0;1134:79;:::o;10000:120::-;-1:-1:-1;;;;;10089:13:0;;;;;;:7;:13;;;;;;;;;:23;;10082:30;;;;;;;;;;;;;;;;;10053:16;;10082:30;;;10089:23;10082:30;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10082:30:0;;;;;;;;;;;;;;;;;;;;;;10000:120;;;:::o;4053:466::-;4112:19;;:23;;;;:80;;-1:-1:-1;4139:18:0;;4177:15;;4139:34;;3494:7;4139:34;:22;:34;:::i;:::-;:53;;4112:80;4105:407;;;4209:14;4226:59;4281:3;4226:50;:21;3449:1;4226:50;:25;:50;:::i;:59::-;4351:19;;4209:76;;-1:-1:-1;4319:53:0;;4340:31;;4209:76;;4340:31;:10;:31;:::i;:::-;4319:5;:16;;:53;:20;:53;:::i;:::-;4300:5;:72;4408:18;;:34;;3494:7;4408:34;:22;:34;:::i;:::-;4387:18;:55;4472:19;;4462:38;;;;;;;;;;;;;;;;;;;;;;;;4105:407;;;10363:297;10429:4;10468:7;:5;:7::i;:::-;-1:-1:-1;;;;;10454:21:0;:10;-1:-1:-1;;;;;10454:21:0;;10446:30;;;;;;10489:9;:7;:9::i;:::-;10511:39;10531:10;10543:6;10511:19;:39::i;:::-;-1:-1:-1;;;;;;10591:16:0;;;;;;:7;:16;;;;;:27;;;:39;;10623:6;10591:39;:31;:39;:::i;:::-;-1:-1:-1;;;;;10561:16:0;;;;;;:7;:16;;;;;:27;;:69;-1:-1:-1;10648:4:0;10363:297;;;;:::o;8014:48::-;8060:2;8014:48;:::o;7845:107::-;;;;;;;;;8588:30;;;;:::o;8424:53::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8424:53:0;:::o;8240:52::-;8290:2;8240:52;:::o;16881:455::-;3917:24;:22;:24::i;:::-;-1:-1:-1;;;;;16980:13:0;::::1;16956:21;16980:13:::0;;;:7:::1;:13;::::0;;;;17006:9:::1;:7;:9::i;:::-;17042:13;::::0;::::1;::::0;17028:301:::1;7037:2;17057:1;:16;17028:301;;;17116:13;17130:1;17116:16;;;;;;;;;17099:6;:13;;;:33;17095:223;;17173:40;17195:14;17210:1;17195:17;;;;;;;;::::0;17173::::1;::::0;::::1;::::0;;:40:::1;:21;:40;:::i;:::-;17153:17;::::0;::::1;:60:::0;17252:1:::1;17248:5:::0;::::1;17232:13;::::0;::::1;:21:::0;;;17277:25:::1;::::0;-1:-1:-1;;;;;17277:25:0;::::1;::::0;::::1;::::0;-1:-1:-1;;17277:25:0::1;17095:223;17075:3;;17028:301;;;;3952:1;16881:455:::0;:::o;8361:56::-;;;;;;;;;;13036:930;-1:-1:-1;;;;;13243:16:0;;13138:20;13243:16;;;:7;:16;;;;;13274:21;;13138:20;;13243:16;13270:72;;-1:-1:-1;13325:1:0;;-1:-1:-1;13325:1:0;;-1:-1:-1;13317:13:0;;13270:72;13369:6;:19;;;13354:34;;13412:6;:17;;;13399:30;;13442:17;13462:15;13469:7;13462:6;:15::i;:::-;13493:23;;;;13442:35;;-1:-1:-1;13493:23:0;;13492:24;:55;;;;-1:-1:-1;13520:21:0;;13544:3;-1:-1:-1;13492:55:0;13488:207;;;13576:39;:9;8120:6;13576:39;:13;:39;:::i;:::-;13564:51;-1:-1:-1;13643:40:0;:10;8120:6;13643:40;:14;:40;:::i;:::-;13630:53;;13488:207;13707:19;13729:66;13791:3;13729:57;13743:21;13765:6;:19;;;13743:42;;;;;;;;;13729:9;;:57;:13;:57;:::i;:66::-;13707:88;-1:-1:-1;13806:17:0;13826:26;:9;13707:88;13826:26;:13;:26;:::i;:::-;13806:46;-1:-1:-1;13880:29:0;:12;13897:11;13880:29;:16;:29;:::i;:::-;13865:44;-1:-1:-1;13933:25:0;:10;13948:9;13933:25;:14;:25;:::i;:::-;13920:38;;13036:930;;;;;;;;:::o;8069:57::-;8120:6;8069:57;:::o;4659:112::-;-1:-1:-1;;;;;4743:20:0;4716:7;4743:20;;;:14;:20;;;;;;;4659:112::o;3399:51::-;3449:1;3399:51;:::o;8662:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8662:41:0;;;:::o;5722:27::-;;;-1:-1:-1;;;;;5722:27:0;;:::o;9833:159::-;9930:10;;9881:4;;9930:54;;9980:3;;9930:45;;9945:29;9930:45;:14;:45;:::i;:54::-;9905:21;:79;;9898:86;;9833:159;:::o;8625:30::-;;;;:::o;5959:122::-;1277:12;:10;:12::i;:::-;1267:6;;-1:-1:-1;;;;;1267:6:0;;;:22;;;1259:67;;;;;-1:-1:-1;;;1259:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6050:12:::1;:23:::0;;-1:-1:-1;;;;;;6050:23:0::1;-1:-1:-1::0;;;;;6050:23:0;;;::::1;::::0;;;::::1;::::0;;5959:122::o;8518:27::-;;;;:::o;7345:89::-;;;;;;;;;8552:29;;;;:::o;1803:181::-;1861:7;1893:5;;;1917:6;;;;1909:46;;;;;-1:-1:-1;;;1909:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1975:1;1803:181;-1:-1:-1;;;1803:181:0:o;2354:280::-;2412:7;2466:6;2462:47;;-1:-1:-1;2496:1:0;2489:8;;2462:47;2533:5;;;2537:1;2533;:5;:1;2557:5;;;;;:10;2549:56;;;;-1:-1:-1;;;2549:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2648:132;2706:7;2733:39;2737:1;2740;2733:39;;;;;;;;;;;;;;;;;:3;:39::i;1998:136::-;2056:7;2083:43;2087:1;2090;2083:43;;;;;;;;;;;;;;;;;:3;:43::i;10128:227::-;-1:-1:-1;;;;;10221:13:0;;10197:7;10221:13;;;:7;:13;;;;;:28;:33;:48;;;;;10265:4;-1:-1:-1;;;;;10258:11:0;:3;-1:-1:-1;;;;;10258:11:0;;;10221:48;10217:91;;;-1:-1:-1;10293:3:0;10286:10;;10217:91;-1:-1:-1;;;;;;;10325:13:0;;;;;;;:7;:13;;;;;:22;;;;;;;;10128:227::o;18707:797::-;-1:-1:-1;;;;;18804:13:0;;18780:21;18804:13;;;:7;:13;;;;;;;18854:15;18830:39;;18804:13;18880:11;;;:14;:36;18948:1;18927:18;;;:22;18987:15;18960:24;;;:42;19031:15;;:40;;8060:2;19031:40;:19;:40;:::i;:::-;19013:15;:58;19082:12;:14;;;;;;-1:-1:-1;;;;;19113:24:0;;;19109:344;;19154:15;;;;:28;;-1:-1:-1;;;;;;19154:28:0;;-1:-1:-1;;;;;19154:28:0;;;;;;;;;;;;;-1:-1:-1;19197:19:0;;;:7;:19;;;;;;;:29;;;:40;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19197:40:0;;;;;;;19258:19;;;:28;;;;;;;;:42;19254:140;;-1:-1:-1;;;;;19329:19:0;;;19321:37;19329:19;;;19321:7;19329:19;;;;;;:28;;;;;;;;;;;19321:37;;;;:55;;:57;;;;;;;19254:140;19410:31;19430:10;19410:19;:31::i;:::-;19485:10;-1:-1:-1;;;;;19468:28:0;19479:4;-1:-1:-1;;;;;19468:28:0;;;;;;;;;;;18707:797;;;:::o;17664:1035::-;17801:7;:5;:7::i;:::-;-1:-1:-1;;;;;17785:34:0;:77;8001:6;17842:3;8173:2;17820:19;;:25;:41;17785:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17889:24:0;;;17885:807;;-1:-1:-1;;;;;17956:19:0;;17930:23;17956:19;;;:7;:19;;;;;18025:32;;;;:47;;18062:9;18025:47;:36;:47;:::i;:::-;17990:32;;;:82;18087:31;18107:10;18087:19;:31::i;:::-;18162:10;18149;18187:494;-1:-1:-1;;;;;18204:16:0;;;;;;:57;;-1:-1:-1;18228:26:0;:33;18224:37;;18204:57;18187:494;;;18287:14;18304:47;18347:3;18304:38;18312:26;18339:1;18312:29;;;;;;;;;;;;;;;;18304:3;:7;;:38;;;;:::i;:47::-;-1:-1:-1;;;;;18397:11:0;;;;;;:7;:11;;;;;:24;;;18287:64;;-1:-1:-1;18397:36:0;;18287:64;18397:36;:28;:36;:::i;:::-;18370:7;:11;18378:2;-1:-1:-1;;;;;18370:11:0;-1:-1:-1;;;;;18370:11:0;;;;;;;;;;;;:24;;:63;;;;18473:67;18496:43;18535:3;18496:34;18504:22;18527:1;18504:25;;;;;;;;;;;;;;;;18496:3;:7;;:34;;;;:::i;:43::-;-1:-1:-1;;;;;18473:11:0;;;;;;:7;:11;;;;;:18;;;;:67;:22;:67;:::i;:::-;-1:-1:-1;;;;;18452:11:0;;;;;;;:7;:11;;;;;;;;;:18;;:88;;;;18564:37;;;;;;;18591:1;18587:5;;;18452:11;;18564:37;;;;;;;;;;;-1:-1:-1;;;;;;18645:11:0;;;;;;;:7;:11;;;;;:20;;;;;;;;;;;;18263:3;18187:494;;;;17885:807;;;17664:1035;;;;:::o;20315:425::-;-1:-1:-1;;;;;20382:18:0;;;;;;:49;;-1:-1:-1;;;;;;20405:26:0;;;;;;:20;:26;;;;;;;;20404:27;20382:49;20378:355;;;-1:-1:-1;;;;;20472:13:0;;20448:21;20472:13;;;:7;:13;;;;;20506:21;;;;20531:7;-1:-1:-1;20506:32:0;;;:82;;-1:-1:-1;20559:16:0;;;:23;20586:2;-1:-1:-1;20559:29:0;20506:82;:145;;;;;20643:8;20609:6;:30;;;:42;;20506:145;20502:220;;;20685:21;20701:4;20685:15;:21::i;:::-;20378:355;;20315:425;:::o;90:107::-;148:7;180:1;175;:6;;:14;;188:1;175:14;;;-1:-1:-1;184:1:0;;90:107;-1:-1:-1;90:107:0:o;19512:186::-;-1:-1:-1;;;;;19613:13:0;;19589:21;19613:13;;;:7;:13;;;;;19659:19;;;;:31;;19683:6;19659:31;:23;:31;:::i;:::-;19637:19;;;;:53;-1:-1:-1;;19512:186:0:o;19894:413::-;-1:-1:-1;;;;;20014:13:0;;19970:7;20014:13;;;:7;:13;;;;;20071:17;;;;19970:7;;20054:35;;20063:6;;20054:8;:35::i;:::-;20040:49;-1:-1:-1;20100:13:0;20116:58;20170:3;20116:49;20136:28;20116:15;:6;20040:49;20116:15;:10;:15;:::i;:58::-;20207:17;;;;20100:74;;-1:-1:-1;20207:26:0;;20229:3;20207:26;:21;:26;:::i;:::-;20187:17;;;:46;20244:30;20262:4;20268:5;20244:17;:30::i;:::-;20294:5;19894:413;-1:-1:-1;;;;;19894:413:0:o;6089:138::-;5819:12;;-1:-1:-1;;;;;5819:12:0;5805:10;:26;5797:35;;;;;;6176:12:::1;::::0;6158:31:::1;::::0;-1:-1:-1;;;;;6176:12:0::1;6158:17;:31::i;:::-;6207:12;6200:19:::0;;-1:-1:-1;;;;;;6200:19:0::1;::::0;;6089:138::o;4956:359::-;3917:24;:22;:24::i;:::-;5056:10:::1;5035:32;::::0;;;:20;:32:::1;::::0;;;;;::::1;;5027:74;;;::::0;;-1:-1:-1;;;5027:74:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;5114:14;5131:60;5140:21;5163:27;5179:10;5163:15;:27::i;:::-;5131:8;:60::i;:::-;5246:10;5231:26;::::0;;;:14;:26:::1;::::0;;;;;5114:77;;-1:-1:-1;5231:38:0::1;::::0;5114:77;5231:38:::1;:30;:38;:::i;:::-;5217:10;5202:26;::::0;;;:14;:26:::1;::::0;;;;;:67;;;;5280:27;;5217:10;;5280:27;::::1;;;::::0;5300:6;;5280:27;5202:26;5280:27;5300:6;5217:10;5280:27;::::1;;;;;;;;;;;;;::::0;::::1;;;;557:106:::0;645:10;557:106;:::o;2794:211::-;2880:7;2925:12;2918:5;2910:28;;;;-1:-1:-1;;;2910:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2949:9;2965:1;2961;:5;;;;;;;2794:211;-1:-1:-1;;;;;2794:211:0:o;2148:192::-;2234:7;2270:12;2262:6;;;;2254:29;;;;-1:-1:-1;;;2254:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2306:5:0;;;2148:192::o;5323:353::-;3917:24;:22;:24::i;:::-;-1:-1:-1;;;;;5411:26:0;::::1;;::::0;;;:20;:26:::1;::::0;;;;;::::1;;5410:27;5402:73;;;;-1:-1:-1::0;;;5402:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;5488:26:0;::::1;;::::0;;;:20;:26:::1;::::0;;;;;;;:33;;-1:-1:-1;;5488:33:0::1;5517:4;5488:33:::0;;::::1;::::0;;;:5:::1;5555:16:::0;5532:14;:20;;;;;:39;:14:::1;5604:19:::0;:26:::1;::::0;::::1;:23;:26;:::i;:::-;5582:19:::0;:48;5646:22:::1;::::0;-1:-1:-1;;;;;5646:22:0;::::1;::::0;::::1;::::0;;;::::1;5323:353:::0;:::o;211:106::-;269:7;300:1;296;:5;:13;;308:1;296:13;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://44a6ec0dd14a6d9e33eca1c16e7d98f4e3ecb85ae80fe8d9dbd79e5171295364

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.