ETH Price: $3,014.66 (+4.64%)
Gas: 2 Gwei

Contract

0x6d2f9cF8dAcf084aC35821BDB573832d3518d35b
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Send Back Balanc...99359042020-04-24 15:04:091533 days ago1587740649IN
0x6d2f9cF8...d3518d35b
0 ETH0.0003628211.5
Bulk Transfer Se...99358682020-04-24 14:55:191533 days ago1587740119IN
0x6d2f9cF8...d3518d35b
0 ETH0.0045294220
Insert Bulk Tier...99358652020-04-24 14:53:571533 days ago1587740037IN
0x6d2f9cF8...d3518d35b
0 ETH0.0066567820
Update Period99358612020-04-24 14:53:311533 days ago1587740011IN
0x6d2f9cF8...d3518d35b
0 ETH0.0004976220
Bulk Transfer Se...99358572020-04-24 14:52:261533 days ago1587739946IN
0x6d2f9cF8...d3518d35b
0 ETH0.0028996820
Insert Bulk Tier...99358542020-04-24 14:51:591533 days ago1587739919IN
0x6d2f9cF8...d3518d35b
0 ETH0.0042570420
Update Period99358512020-04-24 14:50:451533 days ago1587739845IN
0x6d2f9cF8...d3518d35b
0 ETH0.0004976220
Bulk Transfer Se...99358502020-04-24 14:49:471533 days ago1587739787IN
0x6d2f9cF8...d3518d35b
0 ETH0.0094144420
Insert Bulk Tier...99358492020-04-24 14:49:141533 days ago1587739754IN
0x6d2f9cF8...d3518d35b
0 ETH0.013850620
Update Period99358422020-04-24 14:48:261533 days ago1587739706IN
0x6d2f9cF8...d3518d35b
0 ETH0.0005816220
Change End Perio...99357822020-04-24 14:35:061533 days ago1587738906IN
0x6d2f9cF8...d3518d35b
0 ETH0.00035612
Transfer99357742020-04-24 14:33:301533 days ago1587738810IN
0x6d2f9cF8...d3518d35b
24.5 ETH0.0002194510
Register99339662020-04-24 7:45:451533 days ago1587714345IN
0x6d2f9cF8...d3518d35b
0 ETH0.00053986
Register99339662020-04-24 7:45:451533 days ago1587714345IN
0x6d2f9cF8...d3518d35b
0 ETH0.000539886
Register99339662020-04-24 7:45:451533 days ago1587714345IN
0x6d2f9cF8...d3518d35b
0 ETH0.000539886
Register99339652020-04-24 7:45:391533 days ago1587714339IN
0x6d2f9cF8...d3518d35b
0 ETH0.000539886
Register99339652020-04-24 7:45:391533 days ago1587714339IN
0x6d2f9cF8...d3518d35b
0 ETH0.00044995
Register99339652020-04-24 7:45:391533 days ago1587714339IN
0x6d2f9cF8...d3518d35b
0 ETH0.00044995
Register99339652020-04-24 7:45:391533 days ago1587714339IN
0x6d2f9cF8...d3518d35b
0 ETH0.000359924
Register99339602020-04-24 7:44:301533 days ago1587714270IN
0x6d2f9cF8...d3518d35b
0 ETH0.000359924
Register99339602020-04-24 7:44:301533 days ago1587714270IN
0x6d2f9cF8...d3518d35b
0 ETH0.000359924
Register99339482020-04-24 7:42:361533 days ago1587714156IN
0x6d2f9cF8...d3518d35b
0 ETH0.00044995
Register99339462020-04-24 7:42:231533 days ago1587714143IN
0x6d2f9cF8...d3518d35b
0 ETH0.00044995
Register99338702020-04-24 7:24:591534 days ago1587713099IN
0x6d2f9cF8...d3518d35b
0 ETH0.000439965
Register99338702020-04-24 7:24:591534 days ago1587713099IN
0x6d2f9cF8...d3518d35b
0 ETH0.00043995
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
99359042020-04-24 15:04:091533 days ago1587740649
0x6d2f9cF8...d3518d35b
0.3 ETH
99358682020-04-24 14:55:191533 days ago1587740119
0x6d2f9cF8...d3518d35b
1.5 ETH
99358682020-04-24 14:55:191533 days ago1587740119
0x6d2f9cF8...d3518d35b
1.5 ETH
99358682020-04-24 14:55:191533 days ago1587740119
0x6d2f9cF8...d3518d35b
1.5 ETH
99358682020-04-24 14:55:191533 days ago1587740119
0x6d2f9cF8...d3518d35b
1.5 ETH
99358682020-04-24 14:55:191533 days ago1587740119
0x6d2f9cF8...d3518d35b
1.5 ETH
99358682020-04-24 14:55:191533 days ago1587740119
0x6d2f9cF8...d3518d35b
1.5 ETH
99358682020-04-24 14:55:191533 days ago1587740119
0x6d2f9cF8...d3518d35b
1.5 ETH
99358682020-04-24 14:55:191533 days ago1587740119
0x6d2f9cF8...d3518d35b
1.5 ETH
99358682020-04-24 14:55:191533 days ago1587740119
0x6d2f9cF8...d3518d35b
1.5 ETH
99358682020-04-24 14:55:191533 days ago1587740119
0x6d2f9cF8...d3518d35b
1.5 ETH
99358682020-04-24 14:55:191533 days ago1587740119
0x6d2f9cF8...d3518d35b
1.5 ETH
99358682020-04-24 14:55:191533 days ago1587740119
0x6d2f9cF8...d3518d35b
1.5 ETH
99358572020-04-24 14:52:261533 days ago1587739946
0x6d2f9cF8...d3518d35b
0.5 ETH
99358572020-04-24 14:52:261533 days ago1587739946
0x6d2f9cF8...d3518d35b
0.5 ETH
99358572020-04-24 14:52:261533 days ago1587739946
0x6d2f9cF8...d3518d35b
0.5 ETH
99358572020-04-24 14:52:261533 days ago1587739946
0x6d2f9cF8...d3518d35b
0.5 ETH
99358572020-04-24 14:52:261533 days ago1587739946
0x6d2f9cF8...d3518d35b
0.5 ETH
99358572020-04-24 14:52:261533 days ago1587739946
0x6d2f9cF8...d3518d35b
0.5 ETH
99358572020-04-24 14:52:261533 days ago1587739946
0x6d2f9cF8...d3518d35b
0.5 ETH
99358502020-04-24 14:49:471533 days ago1587739787
0x6d2f9cF8...d3518d35b
0.1 ETH
99358502020-04-24 14:49:471533 days ago1587739787
0x6d2f9cF8...d3518d35b
0.1 ETH
99358502020-04-24 14:49:471533 days ago1587739787
0x6d2f9cF8...d3518d35b
0.1 ETH
99358502020-04-24 14:49:471533 days ago1587739787
0x6d2f9cF8...d3518d35b
0.1 ETH
99358502020-04-24 14:49:471533 days ago1587739787
0x6d2f9cF8...d3518d35b
0.1 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LotteryCampaign

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 4: LotteryCampaign.sol
pragma solidity >= 0.5.3 < 0.6.0;

import "./SafeMath.sol";
import "./TimestampMonthConv.sol";
import "./ERC20Interface.sol";

contract Ownership {
    address private _owner;
    
    event OwnerOwnershipTransferred(address indexed prevOwner, address indexed newOwner);
    
    // Returns contract owner address
    function owner() public view returns (address){
        return _owner;
    }
    
    // Check if caller is owner account
    function isOwner() public view returns (bool){
        return (msg.sender == _owner);
    }
    
    // Modifier for function restricted to owner only
    modifier onlyOwner() {
        require(isOwner(), "Ownership: the caller is not the owner address");
        _;
    }
    
    // Transfer owner's ownership to new address
    // # param newOwner: address of new owner to be transferred
    function transferOwnerOwnership(address newOwner) public onlyOwner {
        _transferOwnerOwnership(newOwner);
    }
    
    // ==== internal functions ====

    function _transferOwnerOwnership(address newOwner) internal {
        require (newOwner != address(0), "Ownable: new owner is zero address");
        emit OwnerOwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
    function _setupOwnership(address own) internal {
        require (own != address(0), "Ownable: owner is zero address");
        _owner = own;
        
        emit OwnerOwnershipTransferred(address(0), own);
    }
}

interface LockupInterface {
    function isRegisteredParticipant(address userAddress) external view returns (bool);
    function getParticipantLockAmount(address userAddress) external view returns (uint256);
}

contract LotteryCampaign is Ownership {
    using TimestampMonthConv for uint256;
    using SafeMath for uint256;

    enum Tiers {TIER1, TIER2, TIER3, TIER4}
    enum LotteryStatus {NULL, JOINED, SELECTED, CLAIMED}
    enum LotteryAvailability {CLOSED, OPEN}
    LotteryAvailability lottOpen;
    
    struct Participants {
        Tiers tier;
        LotteryStatus status;
    }
    
    uint8 decimal;
    uint256 nonce;
    uint256 public endTime;
    bool internal t1_transfer = false;
    bool internal t2_transfer = false;
    bool internal t3_transfer = false;
    bool internal t4_transfer = false;
    address internal lockupContract;
    
    address[] participantsTier1;
    address[] participantsTier2;
    address[] participantsTier3;
    address[] participantsTier4;

    address[] selectedTier1;
    address[] selectedTier2;
    address[] selectedTier3;
    address[] selectedTier4;
    
    mapping (address => Participants) participantList;

    event Active(uint256 timestamp);
    event Inactive(uint256 timestamp);
    event Supply(uint256 indexed owner, uint256 amount);
    event Return(uint256 indexed owner, uint256 amount);
    event RegisterLottery(address indexed user, Tiers tier, uint256 timestamp);
    event SelectedLottery(address indexed user, Tiers tier);
    event RewardLottery(address indexed user, uint256 amountEth, uint256 timestamp);
    event EndTimeShifted(uint256 oldTime, uint256 newTime);
    
    constructor(address owner, uint8 WWB_decimals, address lockupCampaign) public {
        _setupOwnership(owner);
        decimal = WWB_decimals;
        lockupContract = lockupCampaign;
    }

    // --------------- Main lottery function ---------------

    // Change the lottery contract's active state to `open` and adds 1 month for closing
    function startLotteryPeriod() public onlyOwner {
        lottOpen = LotteryAvailability.OPEN;
        endTime = now.addMonths(1);
        emit Active(now);
    }
    
    // Change the end time **Note: should not input time later than current timestamp
    function changeEndPeriod(uint256 timestamp) public onlyOwner {
        require(timestamp > now, "LotteryCampaign: Input time invalid, time should be greater than current time");
        emit EndTimeShifted(endTime, timestamp);
        endTime = timestamp;
    }

    // Terminates the contract
    function killContract() public onlyOwner {
        selfdestruct(address(uint160(owner())));
    }
    
    // Checks whether the lottery is active
    function isOpen() public view returns (bool) {
        return(lottOpen == LotteryAvailability.OPEN);
    }

    // Updates the period of lottery activeness
    function updatePeriod() public {
        if(now > endTime) {
            lottOpen = LotteryAvailability.CLOSED;
            emit Inactive(now);
        }
    }
    
    // Fallback for supplying ETH
    function () external payable{
        require(msg.sender == owner(), "LotteryCampaign: only owner can send ETH in this contract");
    }
    
    // Checks ETH balance in this contract
    function balance() public view onlyOwner returns (uint256){
        return address(this).balance;
    }
    
    // Send back remaining ETH balance to owner
    function sendBackBalance() public onlyOwner returns (uint256){
        address payable own = address(uint160(owner()));
        own.transfer(balance());
    }

    // Registers users for lottery selection. Only applies for users who registers for WWB lockup campaign
    // # params user: address of the user participated on WWB lockup campaign
    function register(address user) public returns (bool stat){
        updatePeriod();
        require(isOpen(), "LotteryCampaign: lottery is closed");
        require(participantList[user].status == LotteryStatus.NULL, "LotteryCampaign: user already registered");
        _verify(user);
        stat = _checkTier(user);
    }

    // Retrieve information of successfully registered user
    // # params user: address of the user participated on WWB lockup campaign
    // * returns (Tiers): enum of which Tiers is registered
    // * returns (LotteryStatus): enum of the user status
    function getInfo(address user) public view returns(Tiers, LotteryStatus) {
        return(participantList[user].tier, participantList[user].status);
    }

    // Retrieve all participating users for Tier 1
    function getTier1List() public view returns (address[] memory){
        return participantsTier1;
    }

    // Retrieve all participating users for Tier 2
    function getTier2List() public view returns (address[] memory){
        return participantsTier2;
    }

    // Retrieve all participating users for Tier 3
    function getTier3List() public view returns (address[] memory){
        return participantsTier3;
    }

    // Retrieve all participating users for Tier 4
    function getTier4List() public view returns (address[] memory){
        return participantsTier4;
    }

    // Insert the selected users for Tier 1 to selected list. **lottery is handled on other location due to security reason
    // # params user: address of the selected user participated on WWB lockup campaign
    function insertSelectionTier1(address user) public onlyOwner{
        require(!isOpen(), "LotteryCampaign: lottery is still open");
        require(participantList[user].status != LotteryStatus.NULL, "LotteryCampaign: user does not exists in lottey");
        
        _insertSelection(user, selectedTier1, 50);
    }

    // Insert the selected users for Tier 1 to selected list by bulk. **lottery is handled on other location due to security reason
    // # params users: array of addresses of selected user participated on WWB lockup campaign in Tier 1
    function insertBulkTier1(address[] memory users) public onlyOwner {
        require(!isOpen(), "LotteryCampaign: lottery is still open");
        selectedTier1 = users;

        _bulkChecks(users, Tiers.TIER1);
    }

    // Insert the selected users for Tier 2 to selected list. **lottery is handled on other location due to security reason
    // # params user: address of the selected user participated on WWB lockup campaign
    function insertSelectionTier2(address user) public {
        require(!isOpen(), "LotteryCampaign: lottery is still open");
        require(participantList[user].status != LotteryStatus.NULL, "LotteryCampaign: user does not exists in lottey");
        
        _insertSelection(user, selectedTier2, 30);
    }

    // Insert the selected users for Tier 2 to selected list by bulk. **lottery is handled on other location due to security reason
    // # params users: array of addresses of selected user participated on WWB lockup campaign in Tier 2
    function insertBulkTier2(address[] memory users) public onlyOwner {
        require(lottOpen == LotteryAvailability.CLOSED, "LotteryCampaign: lottery is still open");
        selectedTier2 = users;

        _bulkChecks(users, Tiers.TIER2);
    }

    // Insert the selected users for Tier 3 to selected list. **lottery is handled on other location due to security reason
    // # params user: address of the selected user participated on WWB lockup campaign
    function insertSelectionTier3(address user) public {
        require(!isOpen(), "LotteryCampaign: lottery is still open");
        require(participantList[user].status != LotteryStatus.NULL, "LotteryCampaign: user does not exists in lottey");
        
        _insertSelection(user, selectedTier3, 20);
    }

    // Insert the selected users for Tier 3 to selected list by bulk. **lottery is handled on other location due to security reason
    // # params users: array of addresses of selected user participated on WWB lockup campaign in Tier 3
    function insertBulkTier3(address[] memory users) public onlyOwner {
        require(!isOpen(), "LotteryCampaign: lottery is still open");
        selectedTier3 = users;

        _bulkChecks(users, Tiers.TIER3);
    }

    // Insert the selected users for Tier 4 to selected list. **lottery is handled on other location due to security reason
    // # params user: address of the selected user participated on WWB lockup campaign
    function insertSelectionTier4(address user) public {
        require(!isOpen(), "LotteryCampaign: lottery is still open");
        require(participantList[user].status != LotteryStatus.NULL, "LotteryCampaign: user does not exists in lottey");
        
        _insertSelection(user, selectedTier4, 10);
    }

    // Insert the selected users for Tier 4 to selected list by bulk. **lottery is handled on other location due to security reason
    // # params users: array of addresses of selected user participated on WWB lockup campaign in Tier 4
    function insertBulkTier4(address[] memory users) public onlyOwner {
        require(!isOpen(), "LotteryCampaign: lottery is still open");
        selectedTier4 = users;

        _bulkChecks(users, Tiers.TIER4);
    }

    // Transfer the ETH to the user address that have been selected for respective Tier.
    // # params user: address of the selected user participated on WWB lockup campaign
    function transferSelectedUsers(address user) public {
        updatePeriod();
        require(!isOpen(), "LotteryCampaign: lottery is still open");
        require(participantList[user].status == LotteryStatus.SELECTED, "LotteryCampaign: user is not selected in lottey");

        _transferOut(user);
    }

    // Send out ETH to selected users by bulk for Tier 1
    function bulkTransferSelectionTier1() public onlyOwner{
        require(!isOpen(), "LotteryCampaign: lottery is still open");
        require(t1_transfer != true, "LotteryCampaign: ETH have been given out for Tier 1");
        
        _bulkTransferOut(selectedTier1, 100000000000000000);
        t1_transfer = true;
    }

    // Send out ETH to selected users by bulk for Tier 2
    function bulkTransferSelectionTier2() public onlyOwner{
        require(!isOpen(), "LotteryCampaign: lottery is still open");
        require(t2_transfer != true, "LotteryCampaign: ETH have been given out for Tier 2");
        
        _bulkTransferOut(selectedTier2, 500000000000000000);
        t2_transfer = true;
    }

    // Send out ETH to selected users by bulk for Tier 3
    function bulkTransferSelectionTier3() public onlyOwner{
        require(!isOpen(), "LotteryCampaign: lottery is still open");
        require(t3_transfer != true, "LotteryCampaign: ETH have been given out for Tier 3");
        
        _bulkTransferOut(selectedTier3, 1500000000000000000);
        t3_transfer = true;
    }

    // Send out ETH to selected users by bulk for Tier 4
    function bulkTransferSelectionTier4() public onlyOwner{
        require(!isOpen(), "LotteryCampaign: lottery is still open");
        require(t4_transfer != true, "LotteryCampaign: ETH have been given out for Tier 4");
        
        _bulkTransferOut(selectedTier3, 10000000000000000000);
        t4_transfer = true;
    }
    
    // --------------- internal functions ---------------

    function _verify(address user) internal view {
        bool result = LockupInterface(lockupContract).isRegisteredParticipant(user);
        require(result, "LotteryCampaign: user does not participate in LockupCampaing yet");
    }

    function _checkTier(address user) internal returns (bool stat){
        uint256 amt = LockupInterface(lockupContract).getParticipantLockAmount(user);
        Participants memory userP;

        // test: re-edit the amt values
        if(amt >= 100000 * 10**uint256(decimal) && amt < 500000 * 10**uint256(decimal)){
            participantsTier1.push(user);
            userP = Participants(Tiers.TIER1, LotteryStatus.JOINED);
            participantList[user] = userP;
            emit RegisterLottery(user, Tiers.TIER1, now);
            stat = true;
        } else if(amt >= 500000 * 10**uint256(decimal) && amt < 1000000 * 10**uint256(decimal)){
            participantsTier2.push(user);
            userP = Participants(Tiers.TIER2, LotteryStatus.JOINED);
            participantList[user] = userP;
            emit RegisterLottery(user, Tiers.TIER2, now);
            stat = true;
        } else if(amt >= 1000000 * 10**uint256(decimal) && amt < 5000000 * 10**uint256(decimal)){
            participantsTier3.push(user);
            userP = Participants(Tiers.TIER3, LotteryStatus.JOINED);
            participantList[user] = userP;
            emit RegisterLottery(user, Tiers.TIER3, now);
            stat = true;
        } else if(amt >= 5000000 * 10**uint256(decimal)){
            participantsTier4.push(user);
            userP = Participants(Tiers.TIER4, LotteryStatus.JOINED);
            participantList[user] = userP;
            emit RegisterLottery(user, Tiers.TIER4, now);
            stat = true;
        } else {
            stat = false;
        }
    }
    
    function _insertSelection(address usr, address[] storage selected, uint256 max) internal {
        require(selected.length <= max, "LotteryCampaign: Selected list for this tier is full");
        selected.push(usr);
        participantList[usr].status != LotteryStatus.SELECTED;
     
        emit SelectedLottery(usr, participantList[usr].tier);
    }

    function _rand(uint256 maxcount) internal returns (uint256) {
        uint randomnumber = uint(keccak256(abi.encodePacked(now, msg.sender, nonce))) % maxcount;
        //randomnumber = randomnumber + 100;
        nonce++;
        return randomnumber;
    }

    function _transferOut(address user) internal{
        address payable p_user = address(uint160(user));
        if(participantList[user].tier == Tiers.TIER1){
            p_user.transfer(100000000000000000);
            emit RewardLottery(user, 100000000000000000, now);
        } else if (participantList[user].tier == Tiers.TIER2){
            p_user.transfer(500000000000000000);
            emit RewardLottery(user, 500000000000000000, now);
        } else if (participantList[user].tier == Tiers.TIER3){
            p_user.transfer(1500000000000000000);
            emit RewardLottery(user, 1500000000000000000, now);
        } else if (participantList[user].tier == Tiers.TIER3){
            p_user.transfer(10000000000000000000);
            emit RewardLottery(user, 10000000000000000000, now);
        }
        participantList[user].status != LotteryStatus.CLAIMED;
    }
    
    function _bulkTransferOut(address[] storage selected, uint256 weiAmount) internal {
        for(uint i = 0; i < selected.length; i++){
            address payable user = address(uint160(selected[i]));
            user.transfer(weiAmount);
            participantList[selected[i]].status != LotteryStatus.CLAIMED;
            
            emit RewardLottery(selected[i], weiAmount, now);
        }
    }

    function _bulkChecks (address[] memory users, Tiers tier) internal {
        for(uint i = 0; i < users.length; i++){
            participantList[users[i]].status != LotteryStatus.SELECTED;
            emit SelectedLottery(users[i], tier);
        }
    }
}

File 2 of 4: ERC20Interface.sol
pragma solidity >= 0.5.3 < 0.6.0;

//  ERC20 Interface
//  - interface for ERC20 token functions for compatibility
interface ERC20Interface {
    function balanceOf(address _who) external view returns (uint256);
    function transfer(address _to, uint256 _value) external returns (bool);
    function allowance(address _owner, address _spender) external view returns (uint256);
    function transferFrom(address _from, address _to, uint256 _value) external returns (bool);
    function approve(address _spender, uint256 _value) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 4: SafeMath.sol
pragma solidity >= 0.5.3 < 0.6.0;

//  SafeMath library
//  - uint security overflow/underflow prevention

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

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

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

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

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

File 4 of 4: TimestampMonthConv.sol
pragma solidity >=0.5.3 < 0.6.0;

//   Timestamp Month Conversion library
//  - date and timestamp related conversion/operations for months

library TimestampMonthConv {
    uint constant SECONDS_PER_DAY = 24 * 60 * 60;
    uint constant SECONDS_PER_HOUR = 60 * 60;
    uint constant SECONDS_PER_MINUTE = 60;
    int constant OFFSET19700101 = 2440588;
    
    function _daysFromDate(uint year, uint month, uint day) internal pure returns (uint _days) {
        require(year >= 1970);
        int _year = int(year);
        int _month = int(month);
        int _day = int(day);

        int __days = _day
          - 32075
          + 1461 * (_year + 4800 + (_month - 14) / 12) / 4
          + 367 * (_month - 2 - (_month - 14) / 12 * 12) / 12
          - 3 * ((_year + 4900 + (_month - 14) / 12) / 100) / 4
          - OFFSET19700101;

        _days = uint(__days);
    }
    
    function _daysToDate(uint _days) internal pure returns (uint year, uint month, uint day) {
        int __days = int(_days);
        
        int L = __days + 68569 + OFFSET19700101;
        int N = 4 * L / 146097;
        L = L - (146097 * N + 3) / 4;
        int _year = 4000 * (L + 1) / 1461001;
        L = L - 1461 * _year / 4 + 31;
        int _month = 80 * L / 2447;
        int _day = L - 2447 * _month / 80;
        L = _month / 11;
        _month = _month + 2 - 12 * L;
        _year = 100 * (N - 49) + _year + L;

        year = uint(_year);
        month = uint(_month);
        day = uint(_day);
    }
    
    function _getDaysInMonth(uint year, uint month) internal pure returns (uint daysInMonth) {
        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
            daysInMonth = 31;
        } else if (month != 2) {
            daysInMonth = 30;
        } else {
            daysInMonth = _isLeapYear(year) ? 29 : 28;
        }
    }
    
    function _isLeapYear(uint year) internal pure returns (bool leapYear) {
        leapYear = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
    }
    
    function addMonths(uint timestamp, uint _months) internal pure returns (uint newTimestamp) {
        uint year;
        uint month;
        uint day;
        (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
        month += _months;
        year += (month - 1) / 12;
        month = (month - 1) % 12 + 1;
        uint daysInMonth = _getDaysInMonth(year, month);
        if (day > daysInMonth) {
            day = daysInMonth;
        }
        newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + timestamp % SECONDS_PER_DAY;
        require(newTimestamp >= timestamp);
    }
    
    function diffMonths(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _months) {
        require(fromTimestamp <= toTimestamp);
        uint fromYear;
        uint fromMonth;
        uint fromDay;
        uint toYear;
        uint toMonth;
        uint toDay;
        (fromYear, fromMonth, fromDay) = _daysToDate(fromTimestamp / SECONDS_PER_DAY);
        (toYear, toMonth, toDay) = _daysToDate(toTimestamp / SECONDS_PER_DAY);
        _months = toYear * 12 + toMonth - fromYear * 12 - fromMonth;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint8","name":"WWB_decimals","type":"uint8"},{"internalType":"address","name":"lockupCampaign","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Active","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTime","type":"uint256"}],"name":"EndTimeShifted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Inactive","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"prevOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerOwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"enum LotteryCampaign.Tiers","name":"tier","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"RegisterLottery","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"owner","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Return","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"RewardLottery","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"enum LotteryCampaign.Tiers","name":"tier","type":"uint8"}],"name":"SelectedLottery","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"owner","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Supply","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"bulkTransferSelectionTier1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"bulkTransferSelectionTier2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"bulkTransferSelectionTier3","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"bulkTransferSelectionTier4","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"changeEndPeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getInfo","outputs":[{"internalType":"enum LotteryCampaign.Tiers","name":"","type":"uint8"},{"internalType":"enum LotteryCampaign.LotteryStatus","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTier1List","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTier2List","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTier3List","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTier4List","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"insertBulkTier1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"insertBulkTier2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"insertBulkTier3","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"insertBulkTier4","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"insertSelectionTier1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"insertSelectionTier2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"insertSelectionTier3","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"insertSelectionTier4","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"killContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"register","outputs":[{"internalType":"bool","name":"stat","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"sendBackBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"startLotteryPeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnerOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"transferSelectedUsers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"updatePeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526000600360006101000a81548160ff0219169083151502179055506000600360016101000a81548160ff0219169083151502179055506000600360026101000a81548160ff02191690831515021790555060006003806101000a81548160ff0219169083151502179055503480156200007c57600080fd5b506040516200426e3803806200426e83398181016040526060811015620000a257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050620000d8836200013d60201b60201c565b81600060156101000a81548160ff021916908360ff16021790555080600360046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200027f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620001e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4f776e61626c653a206f776e6572206973207a65726f2061646472657373000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f78d8ff0537244cdecad907b40d2b6b88ee10b1c30a61abc940647a83f1a75a4960405160405180910390a350565b613fdf806200028f6000396000f3fe6080604052600436106101cd5760003560e01c80638f32d59b116100f7578063be3b269211610095578063dcc9de3c11610064578063dcc9de3c14610a8c578063f7bc895d14610aa3578063f87b950d14610aba578063ffdd5cf114610b7f576101cd565b8063be3b2692146109a1578063c2310af1146109f2578063d336459114610a09578063d5ff8f2314610a20576101cd565b8063a83627de116100d1578063a83627de146108f7578063b2b96d961461090e578063b69ef8a81461095f578063bcaf86b01461098a576101cd565b80638f32d59b146107b25780639a5c6523146107e15780639b4781eb14610832576101cd565b80635ad92f181161016f578063749b450d1161013e578063749b450d1461064d578063780478cf146106b957806383b330ab1461070a5780638da5cb5b1461075b576101cd565b80635ad92f18146104375780635e00484e146104fc5780636af47b69146105c1578063714462c914610612576101cd565b8063432475e1116101ab578063432475e1146103085780634420e4861461033357806347535d7b1461039c57806358a00298146103cb576101cd565b80631c02708d1461025a5780633197cbb6146102715780633f4dd0c31461029c575b6101d5610c07565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610258576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180613e336039913960400191505060405180910390fd5b005b34801561026657600080fd5b5061026f610c30565b005b34801561027d57600080fd5b50610286610cad565b6040518082815260200191505060405180910390f35b3480156102a857600080fd5b506102b1610cb3565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156102f45780820151818401526020810190506102d9565b505050509050019250505060405180910390f35b34801561031457600080fd5b5061031d610d41565b6040518082815260200191505060405180910390f35b34801561033f57600080fd5b506103826004803603602081101561035657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dfe565b604051808215151515815260200191505060405180910390f35b3480156103a857600080fd5b506103b1610f3c565b604051808215151515815260200191505060405180910390f35b3480156103d757600080fd5b506103e0610f6b565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610423578082015181840152602081019050610408565b505050509050019250505060405180910390f35b34801561044357600080fd5b506104fa6004803603602081101561045a57600080fd5b810190808035906020019064010000000081111561047757600080fd5b82018360208201111561048957600080fd5b803590602001918460208302840111640100000000831117156104ab57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610ff9565b005b34801561050857600080fd5b506105bf6004803603602081101561051f57600080fd5b810190808035906020019064010000000081111561053c57600080fd5b82018360208201111561054e57600080fd5b8035906020019184602083028401116401000000008311171561057057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506110d9565b005b3480156105cd57600080fd5b50610610600480360360208110156105e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111d9565b005b34801561061e57600080fd5b5061064b6004803603602081101561063557600080fd5b8101908080359060200190929190505050611306565b005b34801561065957600080fd5b50610662611406565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106a557808201518184015260208101905061068a565b505050509050019250505060405180910390f35b3480156106c557600080fd5b50610708600480360360208110156106dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611494565b005b34801561071657600080fd5b506107596004803603602081101561072d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114fd565b005b34801561076757600080fd5b50610770610c07565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107be57600080fd5b506107c761162a565b604051808215151515815260200191505060405180910390f35b3480156107ed57600080fd5b506108306004803603602081101561080457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611681565b005b34801561083e57600080fd5b506108f56004803603602081101561085557600080fd5b810190808035906020019064010000000081111561087257600080fd5b82018360208201111561088457600080fd5b803590602001918460208302840111640100000000831117156108a657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061180b565b005b34801561090357600080fd5b5061090c6118eb565b005b34801561091a57600080fd5b5061095d6004803603602081101561093157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611952565b005b34801561096b57600080fd5b50610974611a82565b6040518082815260200191505060405180910390f35b34801561099657600080fd5b5061099f611ae7565b005b3480156109ad57600080fd5b506109f0600480360360208110156109c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c3f565b005b3480156109fe57600080fd5b50610a07611d6c565b005b348015610a1557600080fd5b50610a1e611ec4565b005b348015610a2c57600080fd5b50610a3561201c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610a78578082015181840152602081019050610a5d565b505050509050019250505060405180910390f35b348015610a9857600080fd5b50610aa16120aa565b005b348015610aaf57600080fd5b50610ab861217e565b005b348015610ac657600080fd5b50610b7d60048036036020811015610add57600080fd5b8101908080359060200190640100000000811115610afa57600080fd5b820183602082011115610b0c57600080fd5b80359060200191846020830284011164010000000083111715610b2e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506122d4565b005b348015610b8b57600080fd5b50610bce60048036036020811015610ba257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123b4565b60405180836003811115610bde57fe5b60ff168152602001826003811115610bf257fe5b60ff1681526020019250505060405180910390f35b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610c3861162a565b610c8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b610c95610c07565b73ffffffffffffffffffffffffffffffffffffffff16ff5b60025481565b60606006805480602002602001604051908101604052809291908181526020018280548015610d3757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610ced575b5050505050905090565b6000610d4b61162a565b610da0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b6000610daa610c07565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc610dce611a82565b9081150290604051600060405180830381858888f19350505050158015610df9573d6000803e3d6000fd5b505090565b6000610e086118eb565b610e10610f3c565b610e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613f276022913960400191505060405180910390fd5b60006003811115610e7257fe5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff166003811115610ecd57fe5b14610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e0b6028913960400191505060405180910390fd5b610f2c82612460565b610f3582612598565b9050919050565b6000600180811115610f4a57fe5b600060149054906101000a900460ff166001811115610f6557fe5b14905090565b60606004805480602002602001604051908101604052809291908181526020018280548015610fef57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610fa5575b5050505050905090565b61100161162a565b611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b61105e610f3c565b156110b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b80600890805190602001906110ca929190613bc9565b506110d6816000612de6565b50565b6110e161162a565b611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b6000600181111561114357fe5b600060149054906101000a900460ff16600181111561115e57fe5b146111b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b80600990805190602001906111ca929190613bc9565b506111d6816001612de6565b50565b6111e1610f3c565b15611237576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b6000600381111561124457fe5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff16600381111561129f57fe5b14156112f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613ec5602f913960400191505060405180910390fd5b61130381600a6014612ef3565b50565b61130e61162a565b611363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b4281116113bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d815260200180613d58604d913960600191505060405180910390fd5b7f7cdbfc373463d8fddaa14d61d316a4709ee0bc1981958e34c79d45064a522a5f60025482604051808381526020018281526020019250505060405180910390a18060028190555050565b6060600580548060200260200160405190810160405280929190818152602001828054801561148a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611440575b5050505050905090565b61149c61162a565b6114f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b6114fa816130cf565b50565b611505610f3c565b1561155b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b6000600381111561156857fe5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1660038111156115c357fe5b141561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613ec5602f913960400191505060405180910390fd5b611627816009601e612ef3565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b61168961162a565b6116de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b6116e6610f3c565b1561173c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b6000600381111561174957fe5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1660038111156117a457fe5b14156117fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613ec5602f913960400191505060405180910390fd5b6118088160086032612ef3565b50565b61181361162a565b611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b611870610f3c565b156118c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b80600a90805190602001906118dc929190613bc9565b506118e8816002612de6565b50565b6002544211156119505760008060146101000a81548160ff0219169083600181111561191357fe5b02179055507f221d5f0bca86c0d19e3c7141da7acd822903fd6da09fdad2f87d02a870e15c8a426040518082815260200191505060405180910390a15b565b61195a6118eb565b611962610f3c565b156119b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b600260038111156119c557fe5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff166003811115611a2057fe5b14611a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613d29602f913960400191505060405180910390fd5b611a7f81613213565b50565b6000611a8c61162a565b611ae1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b47905090565b611aef61162a565b611b44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b611b4c610f3c565b15611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b60011515600360029054906101000a900460ff1615151415611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180613da56033913960400191505060405180910390fd5b611c22600a6714d1120d7b160000613704565b6001600360026101000a81548160ff021916908315150217905550565b611c47610f3c565b15611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b60006003811115611caa57fe5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff166003811115611d0557fe5b1415611d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613ec5602f913960400191505060405180910390fd5b611d6981600b600a612ef3565b50565b611d7461162a565b611dc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b611dd1610f3c565b15611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b60011515600360009054906101000a900460ff1615151415611e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180613e6c6033913960400191505060405180910390fd5b611ea7600867016345785d8a0000613704565b6001600360006101000a81548160ff021916908315150217905550565b611ecc61162a565b611f21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b611f29610f3c565b15611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b60011515600360019054906101000a900460ff1615151415611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180613ef46033913960400191505060405180910390fd5b611fff60096706f05b59d3b20000613704565b6001600360016101000a81548160ff021916908315150217905550565b606060078054806020026020016040519081016040528092919081815260200182805480156120a057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612056575b5050505050905090565b6120b261162a565b612107576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b6001600060146101000a81548160ff0219169083600181111561212657fe5b021790555061213f6001426138d690919063ffffffff16565b6002819055507f150f43c3078ba2c78ad05d9aaecff31db45889c968aed5eeb49c499d5000095f426040518082815260200191505060405180910390a1565b61218661162a565b6121db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b6121e3610f3c565b15612239576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b600115156003809054906101000a900460ff16151514156122a5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180613dd86033913960400191505060405180910390fd5b6122b8600a678ac7230489e80000613704565b60016003806101000a81548160ff021916908315150217905550565b6122dc61162a565b612331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b612339610f3c565b1561238f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b80600b90805190602001906123a5929190613bc9565b506123b1816003612de6565b50565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1691509150915091565b6000600360049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365436cf0836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561250157600080fd5b505afa158015612515573d6000803e3d6000fd5b505050506040513d602081101561252b57600080fd5b8101908080519060200190929190505050905080612594576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526040815260200180613f6b6040913960400191505060405180910390fd5b5050565b600080600360049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fa73421846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561263a57600080fd5b505afa15801561264e573d6000803e3d6000fd5b505050506040513d602081101561266457600080fd5b8101908080519060200190929190505050905061267f613c53565b600060159054906101000a900460ff1660ff16600a0a620186a00282101580156126c25750600060159054906101000a900460ff1660ff16600a0a6207a1200282105b1561285f5760048490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060405180604001604052806000600381111561274557fe5b81526020016001600381111561275757fe5b815250905080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360038111156127c057fe5b021790555060208201518160000160016101000a81548160ff021916908360038111156127e957fe5b02179055509050508373ffffffffffffffffffffffffffffffffffffffff167ff9f64ab8a6b776a18e674ea8c0e67ab27a171f0bc49a0d4dd1fa94a6afe87b126000426040518083600381111561283c57fe5b60ff1681526020018281526020019250505060405180910390a260019250612ddf565b600060159054906101000a900460ff1660ff16600a0a6207a1200282101580156128a25750600060159054906101000a900460ff1660ff16600a0a620f42400282105b15612a3f5760058490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060405180604001604052806001600381111561292557fe5b81526020016001600381111561293757fe5b815250905080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360038111156129a057fe5b021790555060208201518160000160016101000a81548160ff021916908360038111156129c957fe5b02179055509050508373ffffffffffffffffffffffffffffffffffffffff167ff9f64ab8a6b776a18e674ea8c0e67ab27a171f0bc49a0d4dd1fa94a6afe87b1260014260405180836003811115612a1c57fe5b60ff1681526020018281526020019250505060405180910390a260019250612dde565b600060159054906101000a900460ff1660ff16600a0a620f4240028210158015612a825750600060159054906101000a900460ff1660ff16600a0a624c4b400282105b15612c1f5760068490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050604051806040016040528060026003811115612b0557fe5b815260200160016003811115612b1757fe5b815250905080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690836003811115612b8057fe5b021790555060208201518160000160016101000a81548160ff02191690836003811115612ba957fe5b02179055509050508373ffffffffffffffffffffffffffffffffffffffff167ff9f64ab8a6b776a18e674ea8c0e67ab27a171f0bc49a0d4dd1fa94a6afe87b1260024260405180836003811115612bfc57fe5b60ff1681526020018281526020019250505060405180910390a260019250612ddd565b600060159054906101000a900460ff1660ff16600a0a624c4b40028210612dd75760078490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506040518060400160405280600380811115612cbd57fe5b815260200160016003811115612ccf57fe5b815250905080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690836003811115612d3857fe5b021790555060208201518160000160016101000a81548160ff02191690836003811115612d6157fe5b02179055509050508373ffffffffffffffffffffffffffffffffffffffff167ff9f64ab8a6b776a18e674ea8c0e67ab27a171f0bc49a0d4dd1fa94a6afe87b1260034260405180836003811115612db457fe5b60ff1681526020018281526020019250505060405180910390a260019250612ddc565b600092505b5b5b5b5050919050565b60008090505b8251811015612eee5760026003811115612e0257fe5b600c6000858481518110612e1257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff166003811115612e7057fe5b5050828181518110612e7e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167fcd03e6074bd5623c0f00227e9e13596afbcaea2c833312fb7d49eb956a6dce7e8360405180826003811115612ece57fe5b60ff16815260200191505060405180910390a28080600101915050612dec565b505050565b8082805490501115612f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180613cf56034913960400191505060405180910390fd5b818390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060026003811115612fc257fe5b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff16600381111561301d57fe5b50508273ffffffffffffffffffffffffffffffffffffffff167fcd03e6074bd5623c0f00227e9e13596afbcaea2c833312fb7d49eb956a6dce7e600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16604051808260038111156130b757fe5b60ff16815260200191505060405180910390a2505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613155576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613f496022913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f78d8ff0537244cdecad907b40d2b6b88ee10b1c30a61abc940647a83f1a75a4960405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008190506000600381111561322557fe5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16600381111561328057fe5b1415613338578073ffffffffffffffffffffffffffffffffffffffff166108fc67016345785d8a00009081150290604051600060405180830381858888f193505050501580156132d4573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f36c165e9fc10a7a143db53241674e0635d7cc4f5f75dfeaf0a1eb257cd5334c767016345785d8a000042604051808381526020018281526020019250505060405180910390a2613697565b6001600381111561334557fe5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660038111156133a057fe5b1415613458578073ffffffffffffffffffffffffffffffffffffffff166108fc6706f05b59d3b200009081150290604051600060405180830381858888f193505050501580156133f4573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f36c165e9fc10a7a143db53241674e0635d7cc4f5f75dfeaf0a1eb257cd5334c76706f05b59d3b2000042604051808381526020018281526020019250505060405180910390a2613696565b6002600381111561346557fe5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660038111156134c057fe5b1415613578578073ffffffffffffffffffffffffffffffffffffffff166108fc6714d1120d7b1600009081150290604051600060405180830381858888f19350505050158015613514573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f36c165e9fc10a7a143db53241674e0635d7cc4f5f75dfeaf0a1eb257cd5334c76714d1120d7b16000042604051808381526020018281526020019250505060405180910390a2613695565b6002600381111561358557fe5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660038111156135e057fe5b1415613694578073ffffffffffffffffffffffffffffffffffffffff166108fc678ac7230489e800009081150290604051600060405180830381858888f19350505050158015613634573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f36c165e9fc10a7a143db53241674e0635d7cc4f5f75dfeaf0a1eb257cd5334c7678ac7230489e8000042604051808381526020018281526020019250505060405180910390a25b5b5b5b6003808111156136a357fe5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1660038111156136fe57fe5b50505050565b60008090505b82805490508110156138d157600083828154811061372457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015613797573d6000803e3d6000fd5b506003808111156137a457fe5b600c60008685815481106137b457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff16600381111561383557fe5b505083828154811061384357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f36c165e9fc10a7a143db53241674e0635d7cc4f5f75dfeaf0a1eb257cd5334c78442604051808381526020018281526020019250505060405180910390a250808060010191505061370a565b505050565b6000806000806138f16201518087816138eb57fe5b04613978565b8093508194508295505050508482019150600c600183038161390f57fe5b04830192506001600c600184038161392357fe5b0601915060006139338484613a4c565b905080821115613941578091505b62015180878161394d57fe5b066201518061395d868686613ad7565b020194508685101561396e57600080fd5b5050505092915050565b600080600080849050600062253d8c62010bd98301019050600062023ab182600402816139a157fe5b059050600460038262023ab10201816139b657fe5b0582039150600062164b0960018401610fa002816139d057fe5b059050601f6004826105b502816139e357fe5b058403019250600061098f84605002816139f957fe5b059050600060508261098f0281613a0c57fe5b0585039050600b8281613a1b57fe5b05945084600c0260028301039150848360318603606402010192508298508197508096505050505050509193909250565b60006001821480613a5d5750600382145b80613a685750600582145b80613a735750600782145b80613a7e5750600882145b80613a895750600a82145b80613a945750600c82145b15613aa257601f9050613ad1565b60028214613ab357601e9050613ad0565b613abc83613b86565b613ac757601c613aca565b601d5b60ff1690505b5b92915050565b60006107b2841015613ae857600080fd5b600084905060008490506000849050600062253d8c60046064600c600e870381613b0e57fe5b0561132488010181613b1c57fe5b0560030281613b2757fe5b05600c80600c600e880381613b3857fe5b0502600287030361016f0281613b4a57fe5b056004600c600e880381613b5a57fe5b056112c08901016105b50281613b6c57fe5b05617d4b8603010103039050809450505050509392505050565b60008060048381613b9357fe5b06148015613bac5750600060648381613ba857fe5b0614155b80613bc2575060006101908381613bbf57fe5b06145b9050919050565b828054828255906000526020600020908101928215613c42579160200282015b82811115613c415782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613be9565b5b509050613c4f9190613c83565b5090565b604051806040016040528060006003811115613c6b57fe5b815260200160006003811115613c7d57fe5b81525090565b613cc391905b80821115613cbf57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101613c89565b5090565b9056fe4f776e6572736869703a207468652063616c6c6572206973206e6f7420746865206f776e657220616464726573734c6f747465727943616d706169676e3a2053656c6563746564206c69737420666f72207468697320746965722069732066756c6c4c6f747465727943616d706169676e3a2075736572206973206e6f742073656c656374656420696e206c6f747465794c6f747465727943616d706169676e3a20496e7075742074696d6520696e76616c69642c2074696d652073686f756c642062652067726561746572207468616e2063757272656e742074696d654c6f747465727943616d706169676e3a204554482068617665206265656e20676976656e206f757420666f72205469657220334c6f747465727943616d706169676e3a204554482068617665206265656e20676976656e206f757420666f72205469657220344c6f747465727943616d706169676e3a207573657220616c726561647920726567697374657265644c6f747465727943616d706169676e3a206f6e6c79206f776e65722063616e2073656e642045544820696e207468697320636f6e74726163744c6f747465727943616d706169676e3a204554482068617665206265656e20676976656e206f757420666f72205469657220314c6f747465727943616d706169676e3a206c6f7474657279206973207374696c6c206f70656e4c6f747465727943616d706169676e3a207573657220646f6573206e6f742065786973747320696e206c6f747465794c6f747465727943616d706169676e3a204554482068617665206265656e20676976656e206f757420666f72205469657220324c6f747465727943616d706169676e3a206c6f747465727920697320636c6f7365644f776e61626c653a206e6577206f776e6572206973207a65726f20616464726573734c6f747465727943616d706169676e3a207573657220646f6573206e6f7420706172746963697061746520696e204c6f636b757043616d7061696e6720796574a265627a7a723158206db216f75358c824954ea6551db4c503daf591a1d1c9d80762178930615e7c2764736f6c634300051000320000000000000000000000002e5e6ebd6865effab33360d3c6102f723fd053d200000000000000000000000000000000000000000000000000000000000000060000000000000000000000008631316985dcbd442db6136fd0fa0e21d9767f8d

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c80638f32d59b116100f7578063be3b269211610095578063dcc9de3c11610064578063dcc9de3c14610a8c578063f7bc895d14610aa3578063f87b950d14610aba578063ffdd5cf114610b7f576101cd565b8063be3b2692146109a1578063c2310af1146109f2578063d336459114610a09578063d5ff8f2314610a20576101cd565b8063a83627de116100d1578063a83627de146108f7578063b2b96d961461090e578063b69ef8a81461095f578063bcaf86b01461098a576101cd565b80638f32d59b146107b25780639a5c6523146107e15780639b4781eb14610832576101cd565b80635ad92f181161016f578063749b450d1161013e578063749b450d1461064d578063780478cf146106b957806383b330ab1461070a5780638da5cb5b1461075b576101cd565b80635ad92f18146104375780635e00484e146104fc5780636af47b69146105c1578063714462c914610612576101cd565b8063432475e1116101ab578063432475e1146103085780634420e4861461033357806347535d7b1461039c57806358a00298146103cb576101cd565b80631c02708d1461025a5780633197cbb6146102715780633f4dd0c31461029c575b6101d5610c07565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610258576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180613e336039913960400191505060405180910390fd5b005b34801561026657600080fd5b5061026f610c30565b005b34801561027d57600080fd5b50610286610cad565b6040518082815260200191505060405180910390f35b3480156102a857600080fd5b506102b1610cb3565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156102f45780820151818401526020810190506102d9565b505050509050019250505060405180910390f35b34801561031457600080fd5b5061031d610d41565b6040518082815260200191505060405180910390f35b34801561033f57600080fd5b506103826004803603602081101561035657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dfe565b604051808215151515815260200191505060405180910390f35b3480156103a857600080fd5b506103b1610f3c565b604051808215151515815260200191505060405180910390f35b3480156103d757600080fd5b506103e0610f6b565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610423578082015181840152602081019050610408565b505050509050019250505060405180910390f35b34801561044357600080fd5b506104fa6004803603602081101561045a57600080fd5b810190808035906020019064010000000081111561047757600080fd5b82018360208201111561048957600080fd5b803590602001918460208302840111640100000000831117156104ab57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610ff9565b005b34801561050857600080fd5b506105bf6004803603602081101561051f57600080fd5b810190808035906020019064010000000081111561053c57600080fd5b82018360208201111561054e57600080fd5b8035906020019184602083028401116401000000008311171561057057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506110d9565b005b3480156105cd57600080fd5b50610610600480360360208110156105e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111d9565b005b34801561061e57600080fd5b5061064b6004803603602081101561063557600080fd5b8101908080359060200190929190505050611306565b005b34801561065957600080fd5b50610662611406565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106a557808201518184015260208101905061068a565b505050509050019250505060405180910390f35b3480156106c557600080fd5b50610708600480360360208110156106dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611494565b005b34801561071657600080fd5b506107596004803603602081101561072d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114fd565b005b34801561076757600080fd5b50610770610c07565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107be57600080fd5b506107c761162a565b604051808215151515815260200191505060405180910390f35b3480156107ed57600080fd5b506108306004803603602081101561080457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611681565b005b34801561083e57600080fd5b506108f56004803603602081101561085557600080fd5b810190808035906020019064010000000081111561087257600080fd5b82018360208201111561088457600080fd5b803590602001918460208302840111640100000000831117156108a657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061180b565b005b34801561090357600080fd5b5061090c6118eb565b005b34801561091a57600080fd5b5061095d6004803603602081101561093157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611952565b005b34801561096b57600080fd5b50610974611a82565b6040518082815260200191505060405180910390f35b34801561099657600080fd5b5061099f611ae7565b005b3480156109ad57600080fd5b506109f0600480360360208110156109c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c3f565b005b3480156109fe57600080fd5b50610a07611d6c565b005b348015610a1557600080fd5b50610a1e611ec4565b005b348015610a2c57600080fd5b50610a3561201c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610a78578082015181840152602081019050610a5d565b505050509050019250505060405180910390f35b348015610a9857600080fd5b50610aa16120aa565b005b348015610aaf57600080fd5b50610ab861217e565b005b348015610ac657600080fd5b50610b7d60048036036020811015610add57600080fd5b8101908080359060200190640100000000811115610afa57600080fd5b820183602082011115610b0c57600080fd5b80359060200191846020830284011164010000000083111715610b2e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506122d4565b005b348015610b8b57600080fd5b50610bce60048036036020811015610ba257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123b4565b60405180836003811115610bde57fe5b60ff168152602001826003811115610bf257fe5b60ff1681526020019250505060405180910390f35b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610c3861162a565b610c8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b610c95610c07565b73ffffffffffffffffffffffffffffffffffffffff16ff5b60025481565b60606006805480602002602001604051908101604052809291908181526020018280548015610d3757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610ced575b5050505050905090565b6000610d4b61162a565b610da0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b6000610daa610c07565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc610dce611a82565b9081150290604051600060405180830381858888f19350505050158015610df9573d6000803e3d6000fd5b505090565b6000610e086118eb565b610e10610f3c565b610e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613f276022913960400191505060405180910390fd5b60006003811115610e7257fe5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff166003811115610ecd57fe5b14610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e0b6028913960400191505060405180910390fd5b610f2c82612460565b610f3582612598565b9050919050565b6000600180811115610f4a57fe5b600060149054906101000a900460ff166001811115610f6557fe5b14905090565b60606004805480602002602001604051908101604052809291908181526020018280548015610fef57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610fa5575b5050505050905090565b61100161162a565b611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b61105e610f3c565b156110b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b80600890805190602001906110ca929190613bc9565b506110d6816000612de6565b50565b6110e161162a565b611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b6000600181111561114357fe5b600060149054906101000a900460ff16600181111561115e57fe5b146111b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b80600990805190602001906111ca929190613bc9565b506111d6816001612de6565b50565b6111e1610f3c565b15611237576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b6000600381111561124457fe5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff16600381111561129f57fe5b14156112f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613ec5602f913960400191505060405180910390fd5b61130381600a6014612ef3565b50565b61130e61162a565b611363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b4281116113bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d815260200180613d58604d913960600191505060405180910390fd5b7f7cdbfc373463d8fddaa14d61d316a4709ee0bc1981958e34c79d45064a522a5f60025482604051808381526020018281526020019250505060405180910390a18060028190555050565b6060600580548060200260200160405190810160405280929190818152602001828054801561148a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611440575b5050505050905090565b61149c61162a565b6114f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b6114fa816130cf565b50565b611505610f3c565b1561155b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b6000600381111561156857fe5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1660038111156115c357fe5b141561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613ec5602f913960400191505060405180910390fd5b611627816009601e612ef3565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b61168961162a565b6116de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b6116e6610f3c565b1561173c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b6000600381111561174957fe5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1660038111156117a457fe5b14156117fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613ec5602f913960400191505060405180910390fd5b6118088160086032612ef3565b50565b61181361162a565b611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b611870610f3c565b156118c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b80600a90805190602001906118dc929190613bc9565b506118e8816002612de6565b50565b6002544211156119505760008060146101000a81548160ff0219169083600181111561191357fe5b02179055507f221d5f0bca86c0d19e3c7141da7acd822903fd6da09fdad2f87d02a870e15c8a426040518082815260200191505060405180910390a15b565b61195a6118eb565b611962610f3c565b156119b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b600260038111156119c557fe5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff166003811115611a2057fe5b14611a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613d29602f913960400191505060405180910390fd5b611a7f81613213565b50565b6000611a8c61162a565b611ae1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b47905090565b611aef61162a565b611b44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b611b4c610f3c565b15611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b60011515600360029054906101000a900460ff1615151415611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180613da56033913960400191505060405180910390fd5b611c22600a6714d1120d7b160000613704565b6001600360026101000a81548160ff021916908315150217905550565b611c47610f3c565b15611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b60006003811115611caa57fe5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff166003811115611d0557fe5b1415611d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613ec5602f913960400191505060405180910390fd5b611d6981600b600a612ef3565b50565b611d7461162a565b611dc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b611dd1610f3c565b15611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b60011515600360009054906101000a900460ff1615151415611e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180613e6c6033913960400191505060405180910390fd5b611ea7600867016345785d8a0000613704565b6001600360006101000a81548160ff021916908315150217905550565b611ecc61162a565b611f21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b611f29610f3c565b15611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b60011515600360019054906101000a900460ff1615151415611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180613ef46033913960400191505060405180910390fd5b611fff60096706f05b59d3b20000613704565b6001600360016101000a81548160ff021916908315150217905550565b606060078054806020026020016040519081016040528092919081815260200182805480156120a057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612056575b5050505050905090565b6120b261162a565b612107576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b6001600060146101000a81548160ff0219169083600181111561212657fe5b021790555061213f6001426138d690919063ffffffff16565b6002819055507f150f43c3078ba2c78ad05d9aaecff31db45889c968aed5eeb49c499d5000095f426040518082815260200191505060405180910390a1565b61218661162a565b6121db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b6121e3610f3c565b15612239576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b600115156003809054906101000a900460ff16151514156122a5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180613dd86033913960400191505060405180910390fd5b6122b8600a678ac7230489e80000613704565b60016003806101000a81548160ff021916908315150217905550565b6122dc61162a565b612331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cc7602e913960400191505060405180910390fd5b612339610f3c565b1561238f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b80600b90805190602001906123a5929190613bc9565b506123b1816003612de6565b50565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1691509150915091565b6000600360049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365436cf0836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561250157600080fd5b505afa158015612515573d6000803e3d6000fd5b505050506040513d602081101561252b57600080fd5b8101908080519060200190929190505050905080612594576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526040815260200180613f6b6040913960400191505060405180910390fd5b5050565b600080600360049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fa73421846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561263a57600080fd5b505afa15801561264e573d6000803e3d6000fd5b505050506040513d602081101561266457600080fd5b8101908080519060200190929190505050905061267f613c53565b600060159054906101000a900460ff1660ff16600a0a620186a00282101580156126c25750600060159054906101000a900460ff1660ff16600a0a6207a1200282105b1561285f5760048490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060405180604001604052806000600381111561274557fe5b81526020016001600381111561275757fe5b815250905080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360038111156127c057fe5b021790555060208201518160000160016101000a81548160ff021916908360038111156127e957fe5b02179055509050508373ffffffffffffffffffffffffffffffffffffffff167ff9f64ab8a6b776a18e674ea8c0e67ab27a171f0bc49a0d4dd1fa94a6afe87b126000426040518083600381111561283c57fe5b60ff1681526020018281526020019250505060405180910390a260019250612ddf565b600060159054906101000a900460ff1660ff16600a0a6207a1200282101580156128a25750600060159054906101000a900460ff1660ff16600a0a620f42400282105b15612a3f5760058490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060405180604001604052806001600381111561292557fe5b81526020016001600381111561293757fe5b815250905080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360038111156129a057fe5b021790555060208201518160000160016101000a81548160ff021916908360038111156129c957fe5b02179055509050508373ffffffffffffffffffffffffffffffffffffffff167ff9f64ab8a6b776a18e674ea8c0e67ab27a171f0bc49a0d4dd1fa94a6afe87b1260014260405180836003811115612a1c57fe5b60ff1681526020018281526020019250505060405180910390a260019250612dde565b600060159054906101000a900460ff1660ff16600a0a620f4240028210158015612a825750600060159054906101000a900460ff1660ff16600a0a624c4b400282105b15612c1f5760068490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050604051806040016040528060026003811115612b0557fe5b815260200160016003811115612b1757fe5b815250905080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690836003811115612b8057fe5b021790555060208201518160000160016101000a81548160ff02191690836003811115612ba957fe5b02179055509050508373ffffffffffffffffffffffffffffffffffffffff167ff9f64ab8a6b776a18e674ea8c0e67ab27a171f0bc49a0d4dd1fa94a6afe87b1260024260405180836003811115612bfc57fe5b60ff1681526020018281526020019250505060405180910390a260019250612ddd565b600060159054906101000a900460ff1660ff16600a0a624c4b40028210612dd75760078490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506040518060400160405280600380811115612cbd57fe5b815260200160016003811115612ccf57fe5b815250905080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690836003811115612d3857fe5b021790555060208201518160000160016101000a81548160ff02191690836003811115612d6157fe5b02179055509050508373ffffffffffffffffffffffffffffffffffffffff167ff9f64ab8a6b776a18e674ea8c0e67ab27a171f0bc49a0d4dd1fa94a6afe87b1260034260405180836003811115612db457fe5b60ff1681526020018281526020019250505060405180910390a260019250612ddc565b600092505b5b5b5b5050919050565b60008090505b8251811015612eee5760026003811115612e0257fe5b600c6000858481518110612e1257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff166003811115612e7057fe5b5050828181518110612e7e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167fcd03e6074bd5623c0f00227e9e13596afbcaea2c833312fb7d49eb956a6dce7e8360405180826003811115612ece57fe5b60ff16815260200191505060405180910390a28080600101915050612dec565b505050565b8082805490501115612f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180613cf56034913960400191505060405180910390fd5b818390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060026003811115612fc257fe5b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff16600381111561301d57fe5b50508273ffffffffffffffffffffffffffffffffffffffff167fcd03e6074bd5623c0f00227e9e13596afbcaea2c833312fb7d49eb956a6dce7e600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16604051808260038111156130b757fe5b60ff16815260200191505060405180910390a2505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613155576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613f496022913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f78d8ff0537244cdecad907b40d2b6b88ee10b1c30a61abc940647a83f1a75a4960405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008190506000600381111561322557fe5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16600381111561328057fe5b1415613338578073ffffffffffffffffffffffffffffffffffffffff166108fc67016345785d8a00009081150290604051600060405180830381858888f193505050501580156132d4573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f36c165e9fc10a7a143db53241674e0635d7cc4f5f75dfeaf0a1eb257cd5334c767016345785d8a000042604051808381526020018281526020019250505060405180910390a2613697565b6001600381111561334557fe5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660038111156133a057fe5b1415613458578073ffffffffffffffffffffffffffffffffffffffff166108fc6706f05b59d3b200009081150290604051600060405180830381858888f193505050501580156133f4573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f36c165e9fc10a7a143db53241674e0635d7cc4f5f75dfeaf0a1eb257cd5334c76706f05b59d3b2000042604051808381526020018281526020019250505060405180910390a2613696565b6002600381111561346557fe5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660038111156134c057fe5b1415613578578073ffffffffffffffffffffffffffffffffffffffff166108fc6714d1120d7b1600009081150290604051600060405180830381858888f19350505050158015613514573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f36c165e9fc10a7a143db53241674e0635d7cc4f5f75dfeaf0a1eb257cd5334c76714d1120d7b16000042604051808381526020018281526020019250505060405180910390a2613695565b6002600381111561358557fe5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660038111156135e057fe5b1415613694578073ffffffffffffffffffffffffffffffffffffffff166108fc678ac7230489e800009081150290604051600060405180830381858888f19350505050158015613634573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f36c165e9fc10a7a143db53241674e0635d7cc4f5f75dfeaf0a1eb257cd5334c7678ac7230489e8000042604051808381526020018281526020019250505060405180910390a25b5b5b5b6003808111156136a357fe5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1660038111156136fe57fe5b50505050565b60008090505b82805490508110156138d157600083828154811061372457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015613797573d6000803e3d6000fd5b506003808111156137a457fe5b600c60008685815481106137b457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff16600381111561383557fe5b505083828154811061384357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f36c165e9fc10a7a143db53241674e0635d7cc4f5f75dfeaf0a1eb257cd5334c78442604051808381526020018281526020019250505060405180910390a250808060010191505061370a565b505050565b6000806000806138f16201518087816138eb57fe5b04613978565b8093508194508295505050508482019150600c600183038161390f57fe5b04830192506001600c600184038161392357fe5b0601915060006139338484613a4c565b905080821115613941578091505b62015180878161394d57fe5b066201518061395d868686613ad7565b020194508685101561396e57600080fd5b5050505092915050565b600080600080849050600062253d8c62010bd98301019050600062023ab182600402816139a157fe5b059050600460038262023ab10201816139b657fe5b0582039150600062164b0960018401610fa002816139d057fe5b059050601f6004826105b502816139e357fe5b058403019250600061098f84605002816139f957fe5b059050600060508261098f0281613a0c57fe5b0585039050600b8281613a1b57fe5b05945084600c0260028301039150848360318603606402010192508298508197508096505050505050509193909250565b60006001821480613a5d5750600382145b80613a685750600582145b80613a735750600782145b80613a7e5750600882145b80613a895750600a82145b80613a945750600c82145b15613aa257601f9050613ad1565b60028214613ab357601e9050613ad0565b613abc83613b86565b613ac757601c613aca565b601d5b60ff1690505b5b92915050565b60006107b2841015613ae857600080fd5b600084905060008490506000849050600062253d8c60046064600c600e870381613b0e57fe5b0561132488010181613b1c57fe5b0560030281613b2757fe5b05600c80600c600e880381613b3857fe5b0502600287030361016f0281613b4a57fe5b056004600c600e880381613b5a57fe5b056112c08901016105b50281613b6c57fe5b05617d4b8603010103039050809450505050509392505050565b60008060048381613b9357fe5b06148015613bac5750600060648381613ba857fe5b0614155b80613bc2575060006101908381613bbf57fe5b06145b9050919050565b828054828255906000526020600020908101928215613c42579160200282015b82811115613c415782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613be9565b5b509050613c4f9190613c83565b5090565b604051806040016040528060006003811115613c6b57fe5b815260200160006003811115613c7d57fe5b81525090565b613cc391905b80821115613cbf57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101613c89565b5090565b9056fe4f776e6572736869703a207468652063616c6c6572206973206e6f7420746865206f776e657220616464726573734c6f747465727943616d706169676e3a2053656c6563746564206c69737420666f72207468697320746965722069732066756c6c4c6f747465727943616d706169676e3a2075736572206973206e6f742073656c656374656420696e206c6f747465794c6f747465727943616d706169676e3a20496e7075742074696d6520696e76616c69642c2074696d652073686f756c642062652067726561746572207468616e2063757272656e742074696d654c6f747465727943616d706169676e3a204554482068617665206265656e20676976656e206f757420666f72205469657220334c6f747465727943616d706169676e3a204554482068617665206265656e20676976656e206f757420666f72205469657220344c6f747465727943616d706169676e3a207573657220616c726561647920726567697374657265644c6f747465727943616d706169676e3a206f6e6c79206f776e65722063616e2073656e642045544820696e207468697320636f6e74726163744c6f747465727943616d706169676e3a204554482068617665206265656e20676976656e206f757420666f72205469657220314c6f747465727943616d706169676e3a206c6f7474657279206973207374696c6c206f70656e4c6f747465727943616d706169676e3a207573657220646f6573206e6f742065786973747320696e206c6f747465794c6f747465727943616d706169676e3a204554482068617665206265656e20676976656e206f757420666f72205469657220324c6f747465727943616d706169676e3a206c6f747465727920697320636c6f7365644f776e61626c653a206e6577206f776e6572206973207a65726f20616464726573734c6f747465727943616d706169676e3a207573657220646f6573206e6f7420706172746963697061746520696e204c6f636b757043616d7061696e6720796574a265627a7a723158206db216f75358c824954ea6551db4c503daf591a1d1c9d80762178930615e7c2764736f6c63430005100032

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000002e5e6ebd6865effab33360d3c6102f723fd053d200000000000000000000000000000000000000000000000000000000000000060000000000000000000000008631316985dcbd442db6136fd0fa0e21d9767f8d

-----Decoded View---------------
Arg [0] : owner (address): 0x2E5E6ebd6865EFfab33360D3C6102f723fD053d2
Arg [1] : WWB_decimals (uint8): 6
Arg [2] : lockupCampaign (address): 0x8631316985dcBD442db6136fd0Fa0E21D9767F8D

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000002e5e6ebd6865effab33360d3c6102f723fd053d2
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [2] : 0000000000000000000000008631316985dcbd442db6136fd0fa0e21d9767f8d


Deployed Bytecode Sourcemap

1727:15352:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4734:7;:5;:7::i;:::-;4720:21;;:10;:21;;;4712:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1727:15352;4141:99;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4141:99:1;;;:::i;:::-;;2171:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2171:22:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6532:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6532:105:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6532:105:1;;;;;;;;;;;;;;;;;5033:161;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5033:161:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5389:329;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5389:329:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5389:329:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4297:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4297:108:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6202:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6202:105:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6202:105:1;;;;;;;;;;;;;;;;;7592:221;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7592:221:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7592:221:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;7592:221:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7592:221:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;7592:221:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;7592:221:1;;;;;;;;;;;;;;;:::i;:::-;;8594:250;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8594:250:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8594:250:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;8594:250:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8594:250:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;8594:250:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;8594:250:1;;;;;;;;;;;;;;;:::i;:::-;;9065:313;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9065:313:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9065:313:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;3836:265;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3836:265:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3836:265:1;;;;;;;;;;;;;;;;;:::i;:::-;;6367:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6367:105:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6367:105:1;;;;;;;;;;;;;;;;;868:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;868:119:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;868:119:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;8034:313;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8034:313:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8034:313:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;330:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;330:78:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;461:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;461:93:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7023:322;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7023:322:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7023:322:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;9625:221;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9625:221:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9625:221:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;9625:221:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9625:221:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;9625:221:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;9625:221:1;;;;;;;;;;;;;;;:::i;:::-;;4462:164;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4462:164:1;;;:::i;:::-;;11034:312;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11034:312:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11034:312:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;4867:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4867:105:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12200:329;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12200:329:1;;;:::i;:::-;;10067:313;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10067:313:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10067:313:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;11412:328;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11412:328:1;;;:::i;:::-;;11806;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11806:328:1;;;:::i;:::-;;6697:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6697:105:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6697:105:1;;;;;;;;;;;;;;;;;3572:165;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3572:165:1;;;:::i;:::-;;12595:330;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12595:330:1;;;:::i;:::-;;10627:221;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10627:221:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10627:221:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;10627:221:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10627:221:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;10627:221:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;10627:221:1;;;;;;;;;;;;;;;:::i;:::-;;5986:156;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5986:156:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5986:156:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;330:78;368:7;394:6;;;;;;;;;;;387:13;;330:78;:::o;4141:99::-;661:9;:7;:9::i;:::-;653:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4222:7;:5;:7::i;:::-;4193:39;;;2171:22;;;;:::o;6532:105::-;6577:16;6612:17;6605:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6532:105;:::o;5033:161::-;5086:7;661:9;:7;:9::i;:::-;653:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5105:19;5143:7;:5;:7::i;:::-;5105:47;;5163:3;:12;;:23;5176:9;:7;:9::i;:::-;5163:23;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5163:23:1;732:1;5033:161;:::o;5389:329::-;5437:9;5458:14;:12;:14::i;:::-;5491:8;:6;:8::i;:::-;5483:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5589:18;5557:50;;;;;;;;:15;:21;5573:4;5557:21;;;;;;;;;;;;;;;:28;;;;;;;;;;;;:50;;;;;;;;;5549:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5663:13;5671:4;5663:7;:13::i;:::-;5694:16;5705:4;5694:10;:16::i;:::-;5687:23;;5389:329;;;:::o;4297:108::-;4336:4;4372:24;4360:36;;;;;;;;:8;;;;;;;;;;;:36;;;;;;;;;4353:44;;4297:108;:::o;6202:105::-;6247:16;6282:17;6275:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6202:105;:::o;7592:221::-;661:9;:7;:9::i;:::-;653:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7678:8;:6;:8::i;:::-;7677:9;7669:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7756:5;7740:13;:21;;;;;;;;;;;;:::i;:::-;;7774:31;7786:5;7793:11;7774;:31::i;:::-;7592:221;:::o;8594:250::-;661:9;:7;:9::i;:::-;653:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8691:26;8679:38;;;;;;;;:8;;;;;;;;;;;:38;;;;;;;;;8671:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8787:5;8771:13;:21;;;;;;;;;;;;:::i;:::-;;8805:31;8817:5;8824:11;8805;:31::i;:::-;8594:250;:::o;9065:313::-;9136:8;:6;:8::i;:::-;9135:9;9127:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9238:18;9206:50;;;;;;;;:15;:21;9222:4;9206:21;;;;;;;;;;;;;;;:28;;;;;;;;;;;;:50;;;;;;;;;;9198:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9329:41;9346:4;9352:13;9367:2;9329:16;:41::i;:::-;9065:313;:::o;3836:265::-;661:9;:7;:9::i;:::-;653:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3928:3;3916:9;:15;3908:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4029:34;4044:7;;4053:9;4029:34;;;;;;;;;;;;;;;;;;;;;;;;4084:9;4074:7;:19;;;;3836:265;:::o;6367:105::-;6412:16;6447:17;6440:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6367:105;:::o;868:119::-;661:9;:7;:9::i;:::-;653:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;946:33;970:8;946:23;:33::i;:::-;868:119;:::o;8034:313::-;8105:8;:6;:8::i;:::-;8104:9;8096:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8207:18;8175:50;;;;;;;;:15;:21;8191:4;8175:21;;;;;;;;;;;;;;;:28;;;;;;;;;;;;:50;;;;;;;;;;8167:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8298:41;8315:4;8321:13;8336:2;8298:16;:41::i;:::-;8034:313;:::o;461:93::-;501:4;539:6;;;;;;;;;;;525:20;;:10;:20;;;517:29;;461:93;:::o;7023:322::-;661:9;:7;:9::i;:::-;653:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7103:8;:6;:8::i;:::-;7102:9;7094:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7205:18;7173:50;;;;;;;;:15;:21;7189:4;7173:21;;;;;;;;;;;;;;;:28;;;;;;;;;;;;:50;;;;;;;;;;7165:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7296:41;7313:4;7319:13;7334:2;7296:16;:41::i;:::-;7023:322;:::o;9625:221::-;661:9;:7;:9::i;:::-;653:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9711:8;:6;:8::i;:::-;9710:9;9702:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9789:5;9773:13;:21;;;;;;;;;;;;:::i;:::-;;9807:31;9819:5;9826:11;9807;:31::i;:::-;9625:221;:::o;4462:164::-;4513:7;;4507:3;:13;4504:115;;;4548:26;4537:8;;:37;;;;;;;;;;;;;;;;;;;;;;;;4594:13;4603:3;4594:13;;;;;;;;;;;;;;;;;;4504:115;4462:164::o;11034:312::-;11097:14;:12;:14::i;:::-;11131:8;:6;:8::i;:::-;11130:9;11122:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11233:22;11201:54;;;;;;;;:15;:21;11217:4;11201:21;;;;;;;;;;;;;;;:28;;;;;;;;;;;;:54;;;;;;;;;11193:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11320:18;11333:4;11320:12;:18::i;:::-;11034:312;:::o;4867:105::-;4917:7;661:9;:7;:9::i;:::-;653:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4943:21;4936:28;;4867:105;:::o;12200:329::-;661:9;:7;:9::i;:::-;653:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12274:8;:6;:8::i;:::-;12273:9;12265:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12359:4;12344:19;;:11;;;;;;;;;;;:19;;;;12336:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12440:52;12457:13;12472:19;12440:16;:52::i;:::-;12517:4;12503:11;;:18;;;;;;;;;;;;;;;;;;12200:329::o;10067:313::-;10138:8;:6;:8::i;:::-;10137:9;10129:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10240:18;10208:50;;;;;;;;:15;:21;10224:4;10208:21;;;;;;;;;;;;;;;:28;;;;;;;;;;;;:50;;;;;;;;;;10200:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10331:41;10348:4;10354:13;10369:2;10331:16;:41::i;:::-;10067:313;:::o;11412:328::-;661:9;:7;:9::i;:::-;653:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11486:8;:6;:8::i;:::-;11485:9;11477:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11571:4;11556:19;;:11;;;;;;;;;;;:19;;;;11548:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11652:51;11669:13;11684:18;11652:16;:51::i;:::-;11728:4;11714:11;;:18;;;;;;;;;;;;;;;;;;11412:328::o;11806:::-;661:9;:7;:9::i;:::-;653:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11880:8;:6;:8::i;:::-;11879:9;11871:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11965:4;11950:19;;:11;;;;;;;;;;;:19;;;;11942:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12046:51;12063:13;12078:18;12046:16;:51::i;:::-;12122:4;12108:11;;:18;;;;;;;;;;;;;;;;;;11806:328::o;6697:105::-;6742:16;6777:17;6770:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6697:105;:::o;3572:165::-;661:9;:7;:9::i;:::-;653:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3641:24;3630:8;;:35;;;;;;;;;;;;;;;;;;;;;;;;3686:16;3700:1;3686:3;:13;;:16;;;;:::i;:::-;3676:7;:26;;;;3718:11;3725:3;3718:11;;;;;;;;;;;;;;;;;;3572:165::o;12595:330::-;661:9;:7;:9::i;:::-;653:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12669:8;:6;:8::i;:::-;12668:9;12660:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12754:4;12739:19;;:11;;;;;;;;;;;:19;;;;12731:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12835:53;12852:13;12867:20;12835:16;:53::i;:::-;12913:4;12899:11;;:18;;;;;;;;;;;;;;;;;;12595:330::o;10627:221::-;661:9;:7;:9::i;:::-;653:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10713:8;:6;:8::i;:::-;10712:9;10704:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10791:5;10775:13;:21;;;;;;;;;;;;:::i;:::-;;10809:31;10821:5;10828:11;10809;:31::i;:::-;10627:221;:::o;5986:156::-;6037:5;6044:13;6077:15;:21;6093:4;6077:21;;;;;;;;;;;;;;;:26;;;;;;;;;;;;6105:15;:21;6121:4;6105:21;;;;;;;;;;;;;;;:28;;;;;;;;;;;;6070:64;;;;5986:156;;;:::o;12998:233::-;13054:11;13084:14;;;;;;;;;;;13068:55;;;13124:4;13068:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13068:61:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13068:61:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13068:61:1;;;;;;;;;;;;;;;;13054:75;;13148:6;13140:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12998:233;;:::o;13239:1606::-;13291:9;13312:11;13342:14;;;;;;;;;;;13326:56;;;13383:4;13326:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13326:62:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13326:62:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13326:62:1;;;;;;;;;;;;;;;;13312:76;;13399:25;;:::i;:::-;13509:7;;;;;;;;;;;13501:16;;13497:2;:20;13488:6;:29;13481:3;:36;;:75;;;;;13548:7;;;;;;;;;;;13540:16;;13536:2;:20;13527:6;:29;13521:3;:35;13481:75;13478:1360;;;13572:17;13595:4;13572:28;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;13572:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13623:47;;;;;;;;13636:11;13623:47;;;;;;;;;;;;13649:20;13623:47;;;;;;;;;;;13615:55;;13709:5;13685:15;:21;13701:4;13685:21;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13750:4;13734:39;;;13756:11;13769:3;13734:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13795:4;13788:11;;13478:1360;;;13848:7;;;;;;;;;;;13840:16;;13836:2;:20;13827:6;:29;13820:3;:36;;:76;;;;;13888:7;;;;;;;;;;;13880:16;;13876:2;:20;13866:7;:30;13860:3;:36;13820:76;13817:1021;;;13912:17;13935:4;13912:28;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;13912:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13963:47;;;;;;;;13976:11;13963:47;;;;;;;;;;;;13989:20;13963:47;;;;;;;;;;;13955:55;;14049:5;14025:15;:21;14041:4;14025:21;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14090:4;14074:39;;;14096:11;14109:3;14074:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14135:4;14128:11;;13817:1021;;;14189:7;;;;;;;;;;;14181:16;;14177:2;:20;14167:7;:30;14160:3;:37;;:77;;;;;14229:7;;;;;;;;;;;14221:16;;14217:2;:20;14207:7;:30;14201:3;:36;14160:77;14157:681;;;14253:17;14276:4;14253:28;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;14253:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14304:47;;;;;;;;14317:11;14304:47;;;;;;;;;;;;14330:20;14304:47;;;;;;;;;;;14296:55;;14390:5;14366:15;:21;14382:4;14366:21;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14431:4;14415:39;;;14437:11;14450:3;14415:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14476:4;14469:11;;14157:681;;;14530:7;;;;;;;;;;;14522:16;;14518:2;:20;14508:7;:30;14501:3;:37;14498:340;;14554:17;14577:4;14554:28;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;14554:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14605:47;;;;;;;;14618:11;14605:47;;;;;;;;;;;;14631:20;14605:47;;;;;;;;;;;14597:55;;14691:5;14667:15;:21;14683:4;14667:21;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14732:4;14716:39;;;14738:11;14751:3;14716:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14777:4;14770:11;;14498:340;;;14821:5;14814:12;;14498:340;14157:681;13817:1021;13478:1360;13239:1606;;;;;:::o;16817:259::-;16899:6;16908:1;16899:10;;16895:174;16915:5;:12;16911:1;:16;16895:174;;;16984:22;16948:58;;;;;;;;:15;:25;16964:5;16970:1;16964:8;;;;;;;;;;;;;;16948:25;;;;;;;;;;;;;;;:32;;;;;;;;;;;;:58;;;;;;;;;;17042:5;17048:1;17042:8;;;;;;;;;;;;;;17026:31;;;17052:4;17026:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;16929:3;;;;;;;16895:174;;;;16817:259;;:::o;14857:358::-;14984:3;14965:8;:15;;;;:22;;14957:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15055:8;15069:3;15055:18;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;15055:18:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15115:22;15084:53;;;;;;;;:15;:20;15100:3;15084:20;;;;;;;;;;;;;;;:27;;;;;;;;;;;;:53;;;;;;;;;;15176:3;15160:47;;;15181:15;:20;15197:3;15181:20;;;;;;;;;;;;;;;:25;;;;;;;;;;;;15160:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;14857:358;;;:::o;1038:236::-;1138:1;1118:22;;:8;:22;;;;1109:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1229:8;1195:43;;1221:6;;;;;;;;;;;1195:43;;;;;;;;;;;;1258:8;1249:6;;:17;;;;;;;;;;;;;;;;;;1038:236;:::o;15492:895::-;15547:22;15588:4;15547:47;;15638:11;15608:41;;;;;;;;:15;:21;15624:4;15608:21;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:41;;;;;;;;;15605:711;;;15665:6;:15;;:35;15681:18;15665:35;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15665:35:1;15734:4;15720:44;;;15740:18;15760:3;15720:44;;;;;;;;;;;;;;;;;;;;;;;;15605:711;;;15816:11;15786:41;;;;;;;;:15;:21;15802:4;15786:21;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:41;;;;;;;;;15782:534;;;15843:6;:15;;:35;15859:18;15843:35;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15843:35:1;15912:4;15898:44;;;15918:18;15938:3;15898:44;;;;;;;;;;;;;;;;;;;;;;;;15782:534;;;15994:11;15964:41;;;;;;;;:15;:21;15980:4;15964:21;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:41;;;;;;;;;15960:356;;;16021:6;:15;;:36;16037:19;16021:36;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16021:36:1;16091:4;16077:45;;;16097:19;16118:3;16077:45;;;;;;;;;;;;;;;;;;;;;;;;15960:356;;;16174:11;16144:41;;;;;;;;:15;:21;16160:4;16144:21;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:41;;;;;;;;;16140:176;;;16201:6;:15;;:37;16217:20;16201:37;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16201:37:1;16272:4;16258:46;;;16278:20;16300:3;16258:46;;;;;;;;;;;;;;;;;;;;;;;;16140:176;15960:356;15782:534;15605:711;16358:21;16326:53;;;;;;;;:15;:21;16342:4;16326:21;;;;;;;;;;;;;;;:28;;;;;;;;;;;;:53;;;;;;;;;;15492:895;;:::o;16399:410::-;16496:6;16505:1;16496:10;;16492:310;16512:8;:15;;;;16508:1;:19;16492:310;;;16548:20;16587:8;16596:1;16587:11;;;;;;;;;;;;;;;;;;;;;;;;;16548:52;;16615:4;:13;;:24;16629:9;16615:24;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16615:24:1;16693:21;16654:60;;;;;;;;:15;:28;16670:8;16679:1;16670:11;;;;;;;;;;;;;;;;;;;;;;;;;16654:28;;;;;;;;;;;;;;;:35;;;;;;;;;;;;:60;;;;;;;;;;16762:8;16771:1;16762:11;;;;;;;;;;;;;;;;;;;;;;;;;16748:42;;;16775:9;16786:3;16748:42;;;;;;;;;;;;;;;;;;;;;;;;16492:310;16529:3;;;;;;;16492:310;;;;16399:410;;:::o;2125:617:3:-;2197:17;2227:9;2247:10;2268:8;2308:40;212:12;2320:9;:27;;;;;;2308:11;:40::i;:::-;2287:61;;;;;;;;;;;;2368:7;2359:16;;;;2408:2;2403:1;2395:5;:9;2394:16;;;;;;2386:24;;;;2448:1;2443:2;2438:1;2430:5;:9;2429:16;;;;;;:20;2421:28;;2460:16;2479:28;2495:4;2501:5;2479:15;:28::i;:::-;2460:47;;2528:11;2522:3;:17;2518:67;;;2562:11;2556:17;;2518:67;212:12;2662:9;:27;;;;;;212:12;2610:31;2624:4;2630:5;2637:3;2610:13;:31::i;:::-;:49;:79;2595:94;;2724:9;2708:12;:25;;2700:34;;;;;;2125:617;;;;;;;;:::o;909:630::-;965:9;976:10;988:8;1009:10;1026:5;1009:23;;1053:5;352:7;1070:5;1061:6;:14;:31;1053:39;;1103:5;1119:6;1115:1;1111;:5;:14;;;;;;1103:22;;1163:1;1158;1154;1145:6;:10;:14;1144:20;;;;;;1140:1;:24;1136:28;;1175:9;1204:7;1199:1;1195;:5;1187:4;:14;:24;;;;;;1175:36;;1249:2;1245:1;1237:5;1230:4;:12;:16;;;;;;1226:1;:20;:25;1222:29;;1262:10;1284:4;1280:1;1275:2;:6;:13;;;;;;1262:26;;1299:8;1330:2;1321:6;1314:4;:13;:18;;;;;;1310:1;:22;1299:33;;1356:2;1347:6;:11;;;;;;1343:15;;1396:1;1391:2;:6;1387:1;1378:6;:10;:19;1369:28;;1441:1;1433:5;1427:2;1423:1;:6;1416:3;:14;:22;:26;1408:34;;1467:5;1455:18;;1497:6;1484:20;;1526:4;1515:16;;909:630;;;;;;;;;;;:::o;1551:391::-;1622:16;1664:1;1655:5;:10;:24;;;;1678:1;1669:5;:10;1655:24;:38;;;;1692:1;1683:5;:10;1655:38;:52;;;;1706:1;1697:5;:10;1655:52;:66;;;;1720:1;1711:5;:10;1655:66;:81;;;;1734:2;1725:5;:11;1655:81;:96;;;;1749:2;1740:5;:11;1655:96;1651:284;;;1782:2;1768:16;;1651:284;;;1815:1;1806:5;:10;1802:133;;1847:2;1833:16;;1802:133;;;1896:17;1908:4;1896:11;:17::i;:::-;:27;;1921:2;1896:27;;;1916:2;1896:27;1882:41;;;;1802:133;1651:284;1551:391;;;;:::o;372:525::-;451:10;490:4;482;:12;;474:21;;;;;;506:9;522:4;506:21;;538:10;555:5;538:23;;572:8;587:3;572:19;;604:10;352:7;827:1;820:3;814:2;808;799:6;:11;798:18;;;;;;791:4;783:5;:12;:33;782:41;;;;;;777:1;:47;:51;;;;;;761:2;755;750;744;735:6;:11;734:18;;;;;;:23;730:1;721:6;:10;:36;714:3;:44;:49;;;;;;699:1;693:2;687;678:6;:11;677:18;;;;;;670:4;662:5;:12;:33;654:4;:42;:46;;;;;;635:5;617:4;:23;:83;:146;:211;:239;604:252;;882:6;869:20;;372:525;;;;;;;;;:::o;1954:159::-;2009:13;2060:1;2055;2048:4;:8;;;;;;:13;2047:36;;;;;2081:1;2074:3;2067:4;:10;;;;;;:15;;2047:36;2046:59;;;;2103:1;2096:3;2089:4;:10;;;;;;:15;2046:59;2035:70;;1954:159;;;:::o;1727:15352:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://6db216f75358c824954ea6551db4c503daf591a1d1c9d80762178930615e7c27

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.