ETH Price: $3,943.94 (+5.29%)

Contract

0x584fc75Ca47910150441d0751D031a33297Dc085
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Erc20154535002022-09-01 14:54:28832 days ago1662044068IN
0x584fc75C...3297Dc085
0 ETH0.0021648235.61158249
Claim Token154518402022-09-01 8:33:01833 days ago1662021181IN
0x584fc75C...3297Dc085
0 ETH0.0016206711.17607203
Claim Token154457612022-08-31 9:15:14834 days ago1661937314IN
0x584fc75C...3297Dc085
0 ETH0.0019466613.42408918
Claim Token154415072022-08-30 16:54:27834 days ago1661878467IN
0x584fc75C...3297Dc085
0 ETH0.0056907439.24298712
Claim Token154415002022-08-30 16:53:26834 days ago1661878406IN
0x584fc75C...3297Dc085
0 ETH0.0078571554.18241661
Claim Token154414972022-08-30 16:53:05834 days ago1661878385IN
0x584fc75C...3297Dc085
0 ETH0.0088655961.13656298
Claim Token154414862022-08-30 16:47:49834 days ago1661878069IN
0x584fc75C...3297Dc085
0 ETH0.0052408936.14087163
Claim Token154414862022-08-30 16:47:49834 days ago1661878069IN
0x584fc75C...3297Dc085
0 ETH0.0052408936.14087163
Claim Token154414842022-08-30 16:47:35834 days ago1661878055IN
0x584fc75C...3297Dc085
0 ETH0.0058259840.17558251
Claim Token154414802022-08-30 16:46:52834 days ago1661878012IN
0x584fc75C...3297Dc085
0 ETH0.0058527440.36013476
Claim Token154414762022-08-30 16:45:47834 days ago1661877947IN
0x584fc75C...3297Dc085
0 ETH0.0056098138.68494057
Claim Token154414712022-08-30 16:45:05834 days ago1661877905IN
0x584fc75C...3297Dc085
0 ETH0.0061265842.24849865
Claim Token154349302022-08-29 15:37:22835 days ago1661787442IN
0x584fc75C...3297Dc085
0 ETH0.0043094129.71740827
Claim Token154348422022-08-29 15:14:46835 days ago1661786086IN
0x584fc75C...3297Dc085
0 ETH0.0045153631.1376473
Claim Token154347592022-08-29 14:56:47835 days ago1661785007IN
0x584fc75C...3297Dc085
0 ETH0.0021026814.5
Claim Token154345502022-08-29 14:14:14835 days ago1661782454IN
0x584fc75C...3297Dc085
0 ETH0.0032943122.71736754
Claim Token154345472022-08-29 14:13:14835 days ago1661782394IN
0x584fc75C...3297Dc085
0 ETH0.002958120.39891632
Claim Token154345462022-08-29 14:13:02835 days ago1661782382IN
0x584fc75C...3297Dc085
0 ETH0.0026456418.24418039
Claim Token154345462022-08-29 14:13:02835 days ago1661782382IN
0x584fc75C...3297Dc085
0 ETH0.0026456418.24418039
Claim Token154345332022-08-29 14:10:50835 days ago1661782250IN
0x584fc75C...3297Dc085
0 ETH0.0032003422.06936361
Claim Token154345292022-08-29 14:10:29835 days ago1661782229IN
0x584fc75C...3297Dc085
0 ETH0.0041294928.47672869
Claim Token154345252022-08-29 14:09:53835 days ago1661782193IN
0x584fc75C...3297Dc085
0 ETH0.0050635834.9181559
Claim Token154345232022-08-29 14:09:08835 days ago1661782148IN
0x584fc75C...3297Dc085
0 ETH0.0042145429.06320649
Claim Token154345222022-08-29 14:09:04835 days ago1661782144IN
0x584fc75C...3297Dc085
0 ETH0.0041055928.31193148
Claim Token154345202022-08-29 14:08:52835 days ago1661782132IN
0x584fc75C...3297Dc085
0 ETH0.0047826432.98078869
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block
From
To
153469702022-08-15 16:04:48849 days ago1660579488
0x584fc75C...3297Dc085
2.2917647 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PolkabridgeLaunchPadV2

Compiler Version
v0.6.2+commit.bacdbe57

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-15
*/

pragma solidity >=0.6.0;
interface IERC20 {
   
    function totalSupply() external view returns (uint256);

  
    function balanceOf(address account) external view returns (uint256);

    
    function transfer(address recipient, uint256 amount) external returns (bool);
    function transferWithoutDeflationary(address recipient, uint256 amount) external returns (bool) ;
   
    function allowance(address owner, address spender) external view returns (uint256);

    
    function approve(address spender, uint256 amount) external returns (bool);

    
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    
    event Transfer(address indexed from, address indexed to, uint256 value);

    
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
library SafeMath {
   
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

   
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

    
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

    
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     *
     * _Available since v2.4.0._
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call.value(amount)("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }

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

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal virtual {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() internal {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}



library ECDSA {
    /**
     * @dev Recover signer address from a message by using their signature
     * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.
     * @param signature bytes signature, the signature is generated using web3.eth.sign()
     */
    function recover(bytes32 hash, bytes memory signature)
        internal
        pure
        returns (address)
    {
        bytes32 r;
        bytes32 s;
        uint8 v;

        // Check the signature length
        if (signature.length != 65) {
            return (address(0));
        }

        // Divide the signature in r, s and v variables with inline assembly.
        assembly {
            r := mload(add(signature, 0x20))
            s := mload(add(signature, 0x40))
            v := byte(0, mload(add(signature, 0x60)))
        }

        // Version of signature should be 27 or 28, but 0 and 1 are also possible versions
        if (v < 27) {
            v += 27;
        }

        // If the version is correct return the signer address
        if (v != 27 && v != 28) {
            return (address(0));
        } else {
            // solium-disable-next-line arg-overflow
            return ecrecover(hash, v, r, s);
        }
    }

    /**
     * toEthSignedMessageHash
     * @dev prefix a bytes32 value with "\x19Ethereum Signed Message:"
     * and hash the result
     */
    function toEthSignedMessageHash(bytes32 hash)
        internal
        pure
        returns (bytes32)
    {
        return
            keccak256(
                abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)
            );
    }
}

contract PolkabridgeLaunchPadV2 is Ownable, ReentrancyGuard {
    string public name = "PolkaBridge: LaunchPad V2";
    using SafeMath for uint256;
    using SafeERC20 for IERC20;
    using ECDSA for bytes32;

    address payable private ReceiveToken;
    uint256 MinimumStakeAmount;
    struct IDOPool {
        uint256 Id;
        uint256 Begin;
        uint256 End;
        uint256 Type; //1: comminity round, 2 stackers round, 3 whitelist, 4 guaranteed
        IERC20 IDOToken;
        uint256 MaxPurchaseTier1;
        uint256 MaxPurchaseTier2; //==comminity tier
        uint256 MaxPurchaseTier3;
        uint256 MaxSpecialPurchase;
        uint256 TotalCap;
        uint256 MinimumTokenSoldout;
        uint256 TotalToken; //total sale token for this pool
        uint256 RatePerETH;
        uint256 TotalSold; //total number of token sold
        
    }

    struct ClaimInfo {
        uint256 ClaimTime1;
        uint256 PercentClaim1;
        uint256 ClaimTime2;
        uint256 PercentClaim2;
        uint256 ClaimTime3;
        uint256 PercentClaim3;
        uint256 ClaimTime4;
        uint256 PercentClaim4;
        uint256 ClaimTime5;
        uint256 PercentClaim5;
         uint256 ClaimTime6;
        uint256 PercentClaim6;
         uint256 ClaimTime7;
        uint256 PercentClaim7;
    }

    struct User {
        uint256 Id;
        
        bool IsWhitelist;
        uint256 TotalTokenPurchase;
        uint256 TotalETHPurchase;
        uint256 PurchaseTime;
        uint256 LastClaimed;
        uint256 TotalPercentClaimed;
        uint256 NumberClaimed;
        
        uint256 PurchaseAllocation;
    }

    mapping(uint256 => mapping(address => User)) public users; //poolid - listuser

    IDOPool[] pools;

    mapping(uint256 => ClaimInfo) public claimInfos; //pid

    constructor(address payable receiveTokenAdd) public {
        ReceiveToken = receiveTokenAdd;
        MinimumStakeAmount=10000*1e18;
    }

    function addMulWhitelist(address[] memory user,uint256[] memory allocation, uint256 pid)///need pid in constantfile
        public
        onlyOwner
    {
        for (uint256 i = 0; i < user.length; i++) {
            users[pid][user[i]].Id = pid;
             users[pid][user[i]].PurchaseAllocation = allocation[i];
            users[pid][user[i]].IsWhitelist = true;
           
        }
    }

    function sign(address[] memory user, uint256 pid)///need pid in constantfile
        public
        onlyOwner
    {
        uint256 poolIndex = pid.sub(1);
        uint256 maxSpeical= pools[poolIndex].MaxSpecialPurchase;
        uint256 tokenAmount = maxSpeical.mul(pools[poolIndex].RatePerETH).div(1e18);

        for (uint256 i = 0; i < user.length; i++) {
          
            users[pid][user[i]].TotalTokenPurchase = tokenAmount;
            
        }
    }

    function updateWhitelist(
        address user,
        uint256 pid,
        bool isWhitelist
    ) public onlyOwner {
        users[pid][user].IsWhitelist = isWhitelist;
       
    }

    function updateMinimumStake(
       uint256 _minimum
    ) public onlyOwner {
        MinimumStakeAmount=_minimum;
       
    }

    function IsWhitelist(
        address user,
        uint256 pid,
        uint256 stackAmount
    ) public view returns (bool) {
        uint256 poolIndex = pid.sub(1);
        if (pools[poolIndex].Type == 1) // community round
        {
            return true;
        } else if (pools[poolIndex].Type == 2) // stakers round
        {
            if (stackAmount >= MinimumStakeAmount) return true;
            return false;
        } else if (pools[poolIndex].Type == 3 ) //special round  
        {
            if (users[pid][user].IsWhitelist) return true;
            return false;
        }
        else if (pools[poolIndex].Type ==4) //guaranteed round  
        {
            if (users[pid][user].IsWhitelist && stackAmount >= MinimumStakeAmount) return true;
            return false;
        } else {
            return false;
        }
    }

    function addPool(
        uint256 begin,
        uint256 end,
        uint256 _type,
        IERC20 idoToken,
        uint256 maxPurchaseTier1,
        uint256 maxPurchaseTier2,
        uint256 maxPurchaseTier3,
        uint256 maxSpecialPurchase,
        uint256 totalCap,
        uint256 totalToken,
        uint256 ratePerETH,
        uint256 minimumTokenSoldout
       
    ) public onlyOwner {
        uint256 id = pools.length.add(1);
        pools.push(
            IDOPool({
                Id: id,
                Begin: begin,
                End: end,
                Type: _type,
                IDOToken: idoToken,
                MaxPurchaseTier1: maxPurchaseTier1,
                MaxPurchaseTier2: maxPurchaseTier2,
                MaxPurchaseTier3: maxPurchaseTier3,
                MaxSpecialPurchase:maxSpecialPurchase,
                TotalCap: totalCap,
                TotalToken: totalToken,
                RatePerETH: ratePerETH,
                TotalSold: 0,
                MinimumTokenSoldout: minimumTokenSoldout
               
            })
        );
    }

    function addClaimInfo(
        uint256 percentClaim1,
        uint256 claimTime1,
        uint256 percentClaim2,
        uint256 claimTime2,
        uint256 percentClaim3,
        uint256 claimTime3,
         uint256 percentClaim4,
        uint256 claimTime4,
         uint256 percentClaim5,
        uint256 claimTime5,
         uint256 percentClaim6,
        uint256 claimTime6,
         uint256 percentClaim7,
        uint256 claimTime7,
        uint256 pid
    ) public onlyOwner {
        claimInfos[pid].ClaimTime1 = claimTime1;
        claimInfos[pid].PercentClaim1 = percentClaim1;
        claimInfos[pid].ClaimTime2 = claimTime2;
        claimInfos[pid].PercentClaim2 = percentClaim2;
        claimInfos[pid].ClaimTime3 = claimTime3;
        claimInfos[pid].PercentClaim3 = percentClaim3;
        claimInfos[pid].ClaimTime4 = claimTime4;
        claimInfos[pid].PercentClaim4 = percentClaim4;
        claimInfos[pid].ClaimTime5 = claimTime5;
        claimInfos[pid].PercentClaim5 = percentClaim5;
         claimInfos[pid].ClaimTime6 = claimTime6;
        claimInfos[pid].PercentClaim6 = percentClaim6;
         claimInfos[pid].ClaimTime7 = claimTime7;
        claimInfos[pid].PercentClaim7 = percentClaim7;
    }

    function updateClaimInfo(
        uint256 percentClaim1,
        uint256 claimTime1,
        uint256 percentClaim2,
        uint256 claimTime2,
        uint256 percentClaim3,
        uint256 claimTime3,
          uint256 percentClaim4,
        uint256 claimTime4,
          uint256 percentClaim5,
        uint256 claimTime5,
         uint256 percentClaim6,
        uint256 claimTime6,
         uint256 percentClaim7,
        uint256 claimTime7,
        uint256 pid
    ) public onlyOwner {
        if (claimTime1 > 0) {
            claimInfos[pid].ClaimTime1 = claimTime1;
        }

        if (percentClaim1 > 0) {
            claimInfos[pid].PercentClaim1 = percentClaim1;
        }
        if (claimTime2 > 0) {
            claimInfos[pid].ClaimTime2 = claimTime2;
        }

        if (percentClaim2 > 0) {
            claimInfos[pid].PercentClaim2 = percentClaim2;
        }

        if (claimTime3 > 0) {
            claimInfos[pid].ClaimTime3 = claimTime3;
        }

        if (percentClaim3 > 0) {
            claimInfos[pid].PercentClaim3 = percentClaim3;
        }

          if (claimTime4 > 0) {
            claimInfos[pid].ClaimTime4 = claimTime4;
        }

        if (percentClaim4 > 0) {
            claimInfos[pid].PercentClaim4 = percentClaim4;
        }

           if (claimTime5 > 0) {
            claimInfos[pid].ClaimTime5 = claimTime5;
        }

        if (percentClaim5 > 0) {
            claimInfos[pid].PercentClaim5 = percentClaim5;
        }

           if (claimTime6 > 0) {
            claimInfos[pid].ClaimTime6 = claimTime6;
        }

        if (percentClaim6 > 0) {
            claimInfos[pid].PercentClaim6 = percentClaim6;
        }

           if (claimTime7 > 0) {
            claimInfos[pid].ClaimTime7 = claimTime7;
        }

        if (percentClaim7 > 0) {
            claimInfos[pid].PercentClaim7 = percentClaim7;
        }
    }

    function updatePool(
        uint256 pid,
        uint256 begin,
        uint256 end,
        uint256 maxPurchaseTier1,
        uint256 maxPurchaseTier2,
        uint256 maxPurchaseTier3,
         uint256 maxSpecialPurchase,
        uint256 totalCap,
        uint256 totalToken,
        uint256 ratePerETH,
        IERC20 idoToken,
       
        uint256 pooltype
      
    ) public onlyOwner {
        uint256 poolIndex = pid.sub(1);
        if (begin > 0) {
            pools[poolIndex].Begin = begin;
        }
        if (end > 0) {
            pools[poolIndex].End = end;
        }

        if (maxPurchaseTier1 > 0) {
            pools[poolIndex].MaxPurchaseTier1 = maxPurchaseTier1;
        }
        if (maxPurchaseTier2 > 0) {
            pools[poolIndex].MaxPurchaseTier2 = maxPurchaseTier2;
        }
        if (maxPurchaseTier3 > 0) {
            pools[poolIndex].MaxPurchaseTier3 = maxPurchaseTier3;
        }
          if (maxSpecialPurchase > 0) {
            pools[poolIndex].MaxSpecialPurchase = maxSpecialPurchase;
        }
        if (totalCap > 0) {
            pools[poolIndex].TotalCap = totalCap;
        }
        if (totalToken > 0) {
            pools[poolIndex].TotalToken = totalToken;
        }
        if (ratePerETH > 0) {
            pools[poolIndex].RatePerETH = ratePerETH;
        }

       
      
        if (pooltype > 0) {
            pools[poolIndex].Type = pooltype;
        }
        pools[poolIndex].IDOToken = idoToken;
    }

    function withdrawErc20(IERC20 token) public onlyOwner {
        token.transfer(owner(), token.balanceOf(address(this)));
    }

    //withdraw ETH after IDO
    function withdrawPoolFund() public onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "not enough fund");
        ReceiveToken.transfer(balance);
    }

    function purchaseIDO(
        uint256 stakeAmount,
        uint256 pid,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public payable nonReentrant {
        uint256 poolIndex = pid.sub(1);

        // if (pools[poolIndex].Type == 2 || pools[poolIndex].Type == 4) {
        //     bytes32 _hash = keccak256(abi.encodePacked(msg.sender, stakeAmount));
        //     bytes32 messageHash = _hash.toEthSignedMessageHash();

        //     require(
        //         owner() == ecrecover(messageHash, v, r, s),
        //         "owner should sign purchase info"
        //     );
        // }

        require(
            block.timestamp >= pools[poolIndex].Begin &&
                block.timestamp <= pools[poolIndex].End,
            "invalid time"
        );
        //check user
        require(IsWhitelist(msg.sender, pid, stakeAmount), "invalid user");

        //check amount
        uint256 ethAmount = msg.value;
        users[pid][msg.sender].TotalETHPurchase = users[pid][msg.sender]
            .TotalETHPurchase
            .add(ethAmount);

        if (pools[poolIndex].Type == 2) {
            //stackers round
            if (stakeAmount < 1500 * 1e18) {
                require(
                    users[pid][msg.sender].TotalETHPurchase <=
                        pools[poolIndex].MaxPurchaseTier1,
                    "invalid maximum purchase for tier1"
                );
            } else if (
                stakeAmount >= 1500 * 1e18 && stakeAmount < 3000 * 1e18
            ) {
                require(
                    users[pid][msg.sender].TotalETHPurchase <=
                        pools[poolIndex].MaxPurchaseTier2,
                    "invalid maximum purchase for tier2"
                );
            } else {
                require(
                    users[pid][msg.sender].TotalETHPurchase <=
                        pools[poolIndex].MaxPurchaseTier3,
                    "invalid maximum purchase for tier3"
                );
            }
        } else if (pools[poolIndex].Type == 1) {
            //community round

            require(
                users[pid][msg.sender].TotalETHPurchase <=
                    pools[poolIndex].MaxPurchaseTier2,
                "invalid maximum contribute"
            );
        } else  if (pools[poolIndex].Type == 3){//special
            
            require(
                users[pid][msg.sender].TotalETHPurchase <=
                    pools[poolIndex].MaxSpecialPurchase,
                "invalid contribute"
            );
        }else{//4 guaranteed
            
            require(
                users[pid][msg.sender].TotalETHPurchase <=
                     users[pid][msg.sender].PurchaseAllocation,
                "invalid contribute"
            );
        }

        uint256 tokenAmount = ethAmount.mul(pools[poolIndex].RatePerETH).div(
            1e18
        );

        uint256 remainToken = getRemainIDOToken(pid);
        require(
            remainToken > pools[poolIndex].MinimumTokenSoldout,
            "IDO sold out"
        );
        require(remainToken >= tokenAmount, "IDO sold out");

        users[pid][msg.sender].TotalTokenPurchase = users[pid][msg.sender]
            .TotalTokenPurchase
            .add(tokenAmount);

        pools[poolIndex].TotalSold = pools[poolIndex].TotalSold.add(
            tokenAmount
        );
    }

    function claimToken(uint256 pid) public nonReentrant {
        require(
            users[pid][msg.sender].TotalPercentClaimed < 100,
            "you have claimed enough"
        );
        uint256 userBalance = getUserTotalPurchase(pid);
        require(userBalance > 0, "invalid claim");

        uint256 poolIndex = pid.sub(1);
        if (users[pid][msg.sender].NumberClaimed == 0) {
            require(
                block.timestamp >= claimInfos[poolIndex].ClaimTime1,
                "invalid time"
            );
            pools[poolIndex].IDOToken.safeTransfer(
                msg.sender,
                userBalance.mul(claimInfos[poolIndex].PercentClaim1).div(100)
            );
          users[pid][msg.sender].TotalPercentClaimed=  users[pid][msg.sender].TotalPercentClaimed.add(
                claimInfos[poolIndex].PercentClaim1
            );
        } else if (users[pid][msg.sender].NumberClaimed == 1) {
            require(
                block.timestamp >= claimInfos[poolIndex].ClaimTime2,
                "invalid time"
            );
            pools[poolIndex].IDOToken.safeTransfer(
                msg.sender,
                userBalance.mul(claimInfos[poolIndex].PercentClaim2).div(100)
            );
            users[pid][msg.sender].TotalPercentClaimed=users[pid][msg.sender].TotalPercentClaimed.add(
                claimInfos[poolIndex].PercentClaim2
            );
        } else if (users[pid][msg.sender].NumberClaimed == 2) {
            require(
                block.timestamp >= claimInfos[poolIndex].ClaimTime3,
                "invalid time"
            );
            pools[poolIndex].IDOToken.safeTransfer(
                msg.sender,
                userBalance.mul(claimInfos[poolIndex].PercentClaim3).div(100)
            );
           users[pid][msg.sender].TotalPercentClaimed= users[pid][msg.sender].TotalPercentClaimed.add(
                claimInfos[poolIndex].PercentClaim3
            );
        }

         else if (users[pid][msg.sender].NumberClaimed == 3) {
            require(
                block.timestamp >= claimInfos[poolIndex].ClaimTime4,
                "invalid time"
            );
            pools[poolIndex].IDOToken.safeTransfer(
                msg.sender,
                userBalance.mul(claimInfos[poolIndex].PercentClaim4).div(100)
            );
           users[pid][msg.sender].TotalPercentClaimed= users[pid][msg.sender].TotalPercentClaimed.add(
                claimInfos[poolIndex].PercentClaim4
            );
        }
         else if (users[pid][msg.sender].NumberClaimed == 4) {
            require(
                block.timestamp >= claimInfos[poolIndex].ClaimTime5,
                "invalid time"
            );
            pools[poolIndex].IDOToken.safeTransfer(
                msg.sender,
                userBalance.mul(claimInfos[poolIndex].PercentClaim5).div(100)
            );
           users[pid][msg.sender].TotalPercentClaimed= users[pid][msg.sender].TotalPercentClaimed.add(
                claimInfos[poolIndex].PercentClaim5
            );
        }
        else if (users[pid][msg.sender].NumberClaimed == 5) {
            require(
                block.timestamp >= claimInfos[poolIndex].ClaimTime6,
                "invalid time"
            );
            pools[poolIndex].IDOToken.safeTransfer(
                msg.sender,
                userBalance.mul(claimInfos[poolIndex].PercentClaim6).div(100)
            );
           users[pid][msg.sender].TotalPercentClaimed= users[pid][msg.sender].TotalPercentClaimed.add(
                claimInfos[poolIndex].PercentClaim6
            );
        }
        else if (users[pid][msg.sender].NumberClaimed == 6) {
            require(
                block.timestamp >= claimInfos[poolIndex].ClaimTime7,
                "invalid time"
            );
            pools[poolIndex].IDOToken.safeTransfer(
                msg.sender,
                userBalance.mul(claimInfos[poolIndex].PercentClaim7).div(100)
            );
           users[pid][msg.sender].TotalPercentClaimed= users[pid][msg.sender].TotalPercentClaimed.add(
                claimInfos[poolIndex].PercentClaim7
            );
        }

        users[pid][msg.sender].LastClaimed = block.timestamp;
        users[pid][msg.sender].NumberClaimed=users[pid][msg.sender].NumberClaimed.add(1);
    }

    function getUserTotalPurchase(uint256 pid) public view returns (uint256) {
        return users[pid][msg.sender].TotalTokenPurchase;
    }

    function getRemainIDOToken(uint256 pid) public view returns (uint256) {
        uint256 poolIndex = pid.sub(1);
        uint256 tokenBalance = getBalanceTokenByPoolId(pid);
        if (pools[poolIndex].TotalSold > tokenBalance) {
            return 0;
        }

        return tokenBalance.sub(pools[poolIndex].TotalSold);
    }

    function getBalanceTokenByPoolId(uint256 pid)
        public
        view
        returns (uint256)
    {
        uint256 poolIndex = pid.sub(1);

        return pools[poolIndex].TotalToken;
    }

    function getPoolInfo(uint256 pid)
        public
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
             uint256,
            IERC20
        )
    {
        uint256 poolIndex = pid.sub(1);
        return (
            pools[poolIndex].Begin,
            pools[poolIndex].End,
            pools[poolIndex].Type,
            pools[poolIndex].RatePerETH,
            pools[poolIndex].TotalSold,
            pools[poolIndex].TotalToken,
            pools[poolIndex].TotalCap,
            pools[poolIndex].IDOToken
        );
    }

    function getClaimInfo(uint256 pid)
        public
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        uint256 poolIndex = pid.sub(1);
        return (
            claimInfos[poolIndex].ClaimTime1,
            claimInfos[poolIndex].PercentClaim1,
            claimInfos[poolIndex].ClaimTime2,
            claimInfos[poolIndex].PercentClaim2,
            claimInfos[poolIndex].ClaimTime3,
            claimInfos[poolIndex].PercentClaim3,
             claimInfos[poolIndex].ClaimTime4,
            claimInfos[poolIndex].PercentClaim4,
             claimInfos[poolIndex].ClaimTime5,
            claimInfos[poolIndex].PercentClaim5,
             claimInfos[poolIndex].ClaimTime6,
            claimInfos[poolIndex].PercentClaim6
        );
    }

    function getPoolSoldInfo(uint256 pid) public view returns (uint256) {
        uint256 poolIndex = pid.sub(1);
        return (pools[poolIndex].TotalSold);
    }

    function getWhitelistfo(uint256 pid)
        public
        view
        returns (
          
            bool,
            uint256,
            uint256
        )
    {
        return (
           
            users[pid][msg.sender].IsWhitelist,
            users[pid][msg.sender].TotalTokenPurchase,
            users[pid][msg.sender].TotalETHPurchase
        );
    }

    function getUserInfo(uint256 pid, address user)
        public
        view
        returns (
            bool,
            uint256,
            uint256,
            uint256
        )
    {
        return (
            users[pid][user].IsWhitelist,
            users[pid][user].TotalTokenPurchase,
            users[pid][user].TotalETHPurchase,
            users[pid][user].TotalPercentClaimed
        );
    }

    function getUserPurchaseAllocation(uint256 pid, address user)
        public
        view
        returns (
            uint256
        )
    {
        return (
            users[pid][user].PurchaseAllocation
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"receiveTokenAdd","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"stackAmount","type":"uint256"}],"name":"IsWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentClaim1","type":"uint256"},{"internalType":"uint256","name":"claimTime1","type":"uint256"},{"internalType":"uint256","name":"percentClaim2","type":"uint256"},{"internalType":"uint256","name":"claimTime2","type":"uint256"},{"internalType":"uint256","name":"percentClaim3","type":"uint256"},{"internalType":"uint256","name":"claimTime3","type":"uint256"},{"internalType":"uint256","name":"percentClaim4","type":"uint256"},{"internalType":"uint256","name":"claimTime4","type":"uint256"},{"internalType":"uint256","name":"percentClaim5","type":"uint256"},{"internalType":"uint256","name":"claimTime5","type":"uint256"},{"internalType":"uint256","name":"percentClaim6","type":"uint256"},{"internalType":"uint256","name":"claimTime6","type":"uint256"},{"internalType":"uint256","name":"percentClaim7","type":"uint256"},{"internalType":"uint256","name":"claimTime7","type":"uint256"},{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"addClaimInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"user","type":"address[]"},{"internalType":"uint256[]","name":"allocation","type":"uint256[]"},{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"addMulWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"begin","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"},{"internalType":"uint256","name":"_type","type":"uint256"},{"internalType":"contract IERC20","name":"idoToken","type":"address"},{"internalType":"uint256","name":"maxPurchaseTier1","type":"uint256"},{"internalType":"uint256","name":"maxPurchaseTier2","type":"uint256"},{"internalType":"uint256","name":"maxPurchaseTier3","type":"uint256"},{"internalType":"uint256","name":"maxSpecialPurchase","type":"uint256"},{"internalType":"uint256","name":"totalCap","type":"uint256"},{"internalType":"uint256","name":"totalToken","type":"uint256"},{"internalType":"uint256","name":"ratePerETH","type":"uint256"},{"internalType":"uint256","name":"minimumTokenSoldout","type":"uint256"}],"name":"addPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimInfos","outputs":[{"internalType":"uint256","name":"ClaimTime1","type":"uint256"},{"internalType":"uint256","name":"PercentClaim1","type":"uint256"},{"internalType":"uint256","name":"ClaimTime2","type":"uint256"},{"internalType":"uint256","name":"PercentClaim2","type":"uint256"},{"internalType":"uint256","name":"ClaimTime3","type":"uint256"},{"internalType":"uint256","name":"PercentClaim3","type":"uint256"},{"internalType":"uint256","name":"ClaimTime4","type":"uint256"},{"internalType":"uint256","name":"PercentClaim4","type":"uint256"},{"internalType":"uint256","name":"ClaimTime5","type":"uint256"},{"internalType":"uint256","name":"PercentClaim5","type":"uint256"},{"internalType":"uint256","name":"ClaimTime6","type":"uint256"},{"internalType":"uint256","name":"PercentClaim6","type":"uint256"},{"internalType":"uint256","name":"ClaimTime7","type":"uint256"},{"internalType":"uint256","name":"PercentClaim7","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"getBalanceTokenByPoolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"getClaimInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"getPoolInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"getPoolSoldInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"getRemainIDOToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserPurchaseAllocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"getUserTotalPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"getWhitelistfo","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"purchaseIDO","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"user","type":"address[]"},{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"sign","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentClaim1","type":"uint256"},{"internalType":"uint256","name":"claimTime1","type":"uint256"},{"internalType":"uint256","name":"percentClaim2","type":"uint256"},{"internalType":"uint256","name":"claimTime2","type":"uint256"},{"internalType":"uint256","name":"percentClaim3","type":"uint256"},{"internalType":"uint256","name":"claimTime3","type":"uint256"},{"internalType":"uint256","name":"percentClaim4","type":"uint256"},{"internalType":"uint256","name":"claimTime4","type":"uint256"},{"internalType":"uint256","name":"percentClaim5","type":"uint256"},{"internalType":"uint256","name":"claimTime5","type":"uint256"},{"internalType":"uint256","name":"percentClaim6","type":"uint256"},{"internalType":"uint256","name":"claimTime6","type":"uint256"},{"internalType":"uint256","name":"percentClaim7","type":"uint256"},{"internalType":"uint256","name":"claimTime7","type":"uint256"},{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"updateClaimInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimum","type":"uint256"}],"name":"updateMinimumStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"begin","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"},{"internalType":"uint256","name":"maxPurchaseTier1","type":"uint256"},{"internalType":"uint256","name":"maxPurchaseTier2","type":"uint256"},{"internalType":"uint256","name":"maxPurchaseTier3","type":"uint256"},{"internalType":"uint256","name":"maxSpecialPurchase","type":"uint256"},{"internalType":"uint256","name":"totalCap","type":"uint256"},{"internalType":"uint256","name":"totalToken","type":"uint256"},{"internalType":"uint256","name":"ratePerETH","type":"uint256"},{"internalType":"contract IERC20","name":"idoToken","type":"address"},{"internalType":"uint256","name":"pooltype","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"bool","name":"isWhitelist","type":"bool"}],"name":"updateWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"Id","type":"uint256"},{"internalType":"bool","name":"IsWhitelist","type":"bool"},{"internalType":"uint256","name":"TotalTokenPurchase","type":"uint256"},{"internalType":"uint256","name":"TotalETHPurchase","type":"uint256"},{"internalType":"uint256","name":"PurchaseTime","type":"uint256"},{"internalType":"uint256","name":"LastClaimed","type":"uint256"},{"internalType":"uint256","name":"TotalPercentClaimed","type":"uint256"},{"internalType":"uint256","name":"NumberClaimed","type":"uint256"},{"internalType":"uint256","name":"PurchaseAllocation","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawPoolFund","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280601981526020017f506f6c6b614272696467653a204c61756e6368506164205632000000000000008152506002908051906020019062000051929190620001ae565b503480156200005f57600080fd5b506040516200589038038062005890833981810160405260208110156200008557600080fd5b81019080805190602001909291905050506000620000a8620001a660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001808190555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555069021e19e0c9bab2400000600481905550506200025d565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001f157805160ff191683800117855562000222565b8280016001018555821562000222579182015b828111156200022157825182559160200191906001019062000204565b5b50905062000231919062000235565b5090565b6200025a91905b80821115620002565760008160009055506001016200023c565b5090565b90565b615623806200026d6000396000f3fe6080604052600436106101c25760003560e01c80638f32d59b116100f7578063c30ef48711610095578063d207019311610064578063d207019314610cb4578063db0cd5b714610d50578063ddbb8f0214610e1f578063f2fde38b14610f82576101c2565b8063c30ef48714610b5a578063c734e25314610bbb578063c7e42b1b14610c0a578063d0d5527514610c5b576101c2565b8063a9e7c2e5116100d1578063a9e7c2e51461095d578063b7de030314610998578063b9d02df4146109e7578063bf1145a114610a92576101c2565b80638f32d59b1461083557806396f5fef514610864578063a48ebe821461090e576101c2565b806336c287f911610164578063521d7d901161013e578063521d7d9014610698578063715018a6146107585780638b881c751461076f5780638da5cb5b146107de576101c2565b806336c287f9146105205780634c41e8801461059d57806350933d4d146105d8576101c2565b80631440b196116101a05780631440b196146103465780631f4552cb1461040e5780632561ae02146104255780632f380b3514610474576101c2565b806306fdde03146101c757806308405e74146102575780631069f3b5146102be575b600080fd5b3480156101d357600080fd5b506101dc610fd3565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561021c578082015181840152602081019050610201565b50505050905090810190601f1680156102495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026357600080fd5b506102bc6004803603606081101561027a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190505050611071565b005b3480156102ca57600080fd5b50610317600480360360408110156102e157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061115b565b604051808515151515815260200184815260200183815260200182815260200194505050505060405180910390f35b34801561035257600080fd5b5061040c60048036036101e081101561036a57600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506112cf565b005b34801561041a57600080fd5b506104236114d4565b005b34801561043157600080fd5b5061045e6004803603602081101561044857600080fd5b8101908080359060200190929190505050611635565b6040518082815260200191505060405180910390f35b34801561048057600080fd5b506104ad6004803603602081101561049757600080fd5b81019080803590602001909291905050506116c7565b604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019850505050505050505060405180910390f35b34801561052c57600080fd5b506105836004803603606081101561054357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061181f565b604051808215151515815260200191505060405180910390f35b3480156105a957600080fd5b506105d6600480360360208110156105c057600080fd5b8101908080359060200190929190505050611a0a565b005b3480156105e457600080fd5b5061069660048036036101808110156105fc57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611a8e565b005b3480156106a457600080fd5b5061075660048036036101808110156106bc57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ca5565b005b34801561076457600080fd5b5061076d611f65565b005b34801561077b57600080fd5b506107c86004803603604081101561079257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061209e565b6040518082815260200191505060405180910390f35b3480156107ea57600080fd5b506107f36120fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561084157600080fd5b5061084a612125565b604051808215151515815260200191505060405180910390f35b34801561087057600080fd5b5061089d6004803603602081101561088757600080fd5b8101908080359060200190929190505050612183565b604051808f81526020018e81526020018d81526020018c81526020018b81526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390f35b34801561091a57600080fd5b506109476004803603602081101561093157600080fd5b81019080803590602001909291905050506121ef565b6040518082815260200191505060405180910390f35b34801561096957600080fd5b506109966004803603602081101561098057600080fd5b810190808035906020019092919050505061224c565b005b3480156109a457600080fd5b506109d1600480360360208110156109bb57600080fd5b8101908080359060200190929190505050613610565b6040518082815260200191505060405180910390f35b3480156109f357600080fd5b50610a4060048036036040811015610a0a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613650565b604051808a815260200189151515158152602001888152602001878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405180910390f35b348015610a9e57600080fd5b50610b5860048036036101e0811015610ab657600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506136b8565b005b348015610b6657600080fd5b50610b9360048036036020811015610b7d57600080fd5b8101908080359060200190929190505050613949565b6040518084151515158152602001838152602001828152602001935050505060405180910390f35b348015610bc757600080fd5b50610bf460048036036020811015610bde57600080fd5b8101908080359060200190929190505050613a64565b6040518082815260200191505060405180910390f35b348015610c1657600080fd5b50610c5960048036036020811015610c2d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613aa4565b005b610cb2600480360360a0811015610c7157600080fd5b810190808035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050613ca2565b005b348015610cc057600080fd5b50610ced60048036036020811015610cd757600080fd5b81019080803590602001909291905050506147d1565b604051808d81526020018c81526020018b81526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019c5050505050505050505050505060405180910390f35b348015610d5c57600080fd5b50610e1d60048036036040811015610d7357600080fd5b8101908080359060200190640100000000811115610d9057600080fd5b820183602082011115610da257600080fd5b80359060200191846020830284011164010000000083111715610dc457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050614937565b005b348015610e2b57600080fd5b50610f8060048036036060811015610e4257600080fd5b8101908080359060200190640100000000811115610e5f57600080fd5b820183602082011115610e7157600080fd5b80359060200191846020830284011164010000000083111715610e9357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ef357600080fd5b820183602082011115610f0557600080fd5b80359060200191846020830284011164010000000083111715610f2757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050614aca565b005b348015610f8e57600080fd5b50610fd160048036036020811015610fa557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614cce565b005b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110695780601f1061103e57610100808354040283529160200191611069565b820191906000526020600020905b81548152906001019060200180831161104c57829003601f168201915b505050505081565b611079612125565b6110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806005600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff021916908315150217905550505050565b6000806000806005600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff166005600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546005600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154600560008a815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154935093509350935092959194509250565b6112d7612125565b611349576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8d60076000838152602001908152602001600020600001819055508e60076000838152602001908152602001600020600101819055508b60076000838152602001908152602001600020600201819055508c60076000838152602001908152602001600020600301819055508960076000838152602001908152602001600020600401819055508a60076000838152602001908152602001600020600501819055508760076000838152602001908152602001600020600601819055508860076000838152602001908152602001600020600701819055508560076000838152602001908152602001600020600801819055508660076000838152602001908152602001600020600901819055508360076000838152602001908152602001600020600a01819055508460076000838152602001908152602001600020600b01819055508160076000838152602001908152602001600020600c01819055508260076000838152602001908152602001600020600d0181905550505050505050505050505050505050565b6114dc612125565b61154e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000479050600081116115c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f7420656e6f7567682066756e64000000000000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611631573d6000803e3d6000fd5b5050565b60008061164c600184614d5490919063ffffffff16565b9050600061165984613610565b9050806006838154811061166957fe5b90600052602060002090600e0201600d0154111561168c576000925050506116c2565b6116bd6006838154811061169c57fe5b90600052602060002090600e0201600d015482614d5490919063ffffffff16565b925050505b919050565b60008060008060008060008060006116e960018b614d5490919063ffffffff16565b9050600681815481106116f857fe5b90600052602060002090600e0201600101546006828154811061171757fe5b90600052602060002090600e0201600201546006838154811061173657fe5b90600052602060002090600e0201600301546006848154811061175557fe5b90600052602060002090600e0201600c01546006858154811061177457fe5b90600052602060002090600e0201600d01546006868154811061179357fe5b90600052602060002090600e0201600b0154600687815481106117b257fe5b90600052602060002090600e020160090154600688815481106117d157fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169850985098509850985098509850985050919395975091939597565b600080611836600185614d5490919063ffffffff16565b905060016006828154811061184757fe5b90600052602060002090600e0201600301541415611869576001915050611a03565b60026006828154811061187857fe5b90600052602060002090600e02016003015414156118ad5760045483106118a3576001915050611a03565b6000915050611a03565b6003600682815481106118bc57fe5b90600052602060002090600e020160030154141561194e576005600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff1615611944576001915050611a03565b6000915050611a03565b60046006828154811061195d57fe5b90600052602060002090600e02016003015414156119fd576005600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff1680156119e457506004548310155b156119f3576001915050611a03565b6000915050611a03565b60009150505b9392505050565b611a12612125565b611a84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060048190555050565b611a96612125565b611b08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611b236001600680549050614d9e90919063ffffffff16565b90506006604051806101c001604052808381526020018f81526020018e81526020018d81526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a8152602001898152602001888152602001878152602001848152602001868152602001858152602001600081525090806001815401808255809150506001900390600052602060002090600e02016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d0155505050505050505050505050505050565b611cad612125565b611d1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611d3560018e614d5490919063ffffffff16565b905060008c1115611d64578b60068281548110611d4e57fe5b90600052602060002090600e0201600101819055505b60008b1115611d91578a60068281548110611d7b57fe5b90600052602060002090600e0201600201819055505b60008a1115611dbe578960068281548110611da857fe5b90600052602060002090600e0201600501819055505b6000891115611deb578860068281548110611dd557fe5b90600052602060002090600e0201600601819055505b6000881115611e18578760068281548110611e0257fe5b90600052602060002090600e0201600701819055505b6000871115611e45578660068281548110611e2f57fe5b90600052602060002090600e0201600801819055505b6000861115611e72578560068281548110611e5c57fe5b90600052602060002090600e0201600901819055505b6000851115611e9f578460068281548110611e8957fe5b90600052602060002090600e0201600b01819055505b6000841115611ecc578360068281548110611eb657fe5b90600052602060002090600e0201600c01819055505b6000821115611ef9578160068281548110611ee357fe5b90600052602060002090600e0201600301819055505b8260068281548110611f0757fe5b90600052602060002090600e020160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050505050505050565b611f6d612125565b611fdf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006005600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080154905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612167614e26565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600760205280600052604060002060009150905080600001549080600101549080600201549080600301549080600401549080600501549080600601549080600701549080600801549080600901549080600a01549080600b01549080600c01549080600d015490508e565b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b600260015414156122c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060646005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006015410612396576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f796f75206861766520636c61696d656420656e6f75676800000000000000000081525060200191505060405180910390fd5b60006123a1826121ef565b905060008111612419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636c61696d0000000000000000000000000000000000000081525060200191505060405180910390fd5b600061242f600184614d5490919063ffffffff16565b905060006005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701541415612695576007600082815260200190815260200160002060000154421015612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b6125bd33612559606461254b600760008781526020019081526020016000206001015487614e2e90919063ffffffff16565b614eb490919063ffffffff16565b6006848154811061256657fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614efe9092919063ffffffff16565b61263960076000838152602001908152602001600020600101546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614d9e90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134ee565b60016005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015414156128f957600760008281526020019081526020016000206002015442101561277d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612821336127bd60646127af600760008781526020019081526020016000206003015487614e2e90919063ffffffff16565b614eb490919063ffffffff16565b600684815481106127ca57fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614efe9092919063ffffffff16565b61289d60076000838152602001908152602001600020600301546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614d9e90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134ed565b60026005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701541415612b5d5760076000828152602001908152602001600020600401544210156129e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612a8533612a216064612a13600760008781526020019081526020016000206005015487614e2e90919063ffffffff16565b614eb490919063ffffffff16565b60068481548110612a2e57fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614efe9092919063ffffffff16565b612b0160076000838152602001908152602001600020600501546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614d9e90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134ec565b60036005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701541415612dc1576007600082815260200190815260200160002060060154421015612c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612ce933612c856064612c77600760008781526020019081526020016000206007015487614e2e90919063ffffffff16565b614eb490919063ffffffff16565b60068481548110612c9257fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614efe9092919063ffffffff16565b612d6560076000838152602001908152602001600020600701546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614d9e90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134eb565b60046005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701541415613025576007600082815260200190815260200160002060080154421015612ea9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612f4d33612ee96064612edb600760008781526020019081526020016000206009015487614e2e90919063ffffffff16565b614eb490919063ffffffff16565b60068481548110612ef657fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614efe9092919063ffffffff16565b612fc960076000838152602001908152602001600020600901546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614d9e90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134ea565b600580600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015414156132885760076000828152602001908152602001600020600a015442101561310c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b6131b03361314c606461313e60076000878152602001908152602001600020600b015487614e2e90919063ffffffff16565b614eb490919063ffffffff16565b6006848154811061315957fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614efe9092919063ffffffff16565b61322c60076000838152602001908152602001600020600b01546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614d9e90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134e9565b60066005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015414156134e85760076000828152602001908152602001600020600c0154421015613370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b613414336133b060646133a260076000878152602001908152602001600020600d015487614e2e90919063ffffffff16565b614eb490919063ffffffff16565b600684815481106133bd57fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614efe9092919063ffffffff16565b61349060076000838152602001908152602001600020600d01546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614d9e90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055505b5b5b5b5b5b5b426005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501819055506135ad60016005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154614d9e90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555050506001808190555050565b600080613627600184614d5490919063ffffffff16565b90506006818154811061363657fe5b90600052602060002090600e0201600b0154915050919050565b6005602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900460ff16908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b6136c0612125565b613732576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008e1115613757578d60076000838152602001908152602001600020600001819055505b60008f111561377c578e60076000838152602001908152602001600020600101819055505b60008c11156137a1578b60076000838152602001908152602001600020600201819055505b60008d11156137c6578c60076000838152602001908152602001600020600301819055505b60008a11156137eb578960076000838152602001908152602001600020600401819055505b60008b1115613810578a60076000838152602001908152602001600020600501819055505b6000881115613835578760076000838152602001908152602001600020600601819055505b600089111561385a578860076000838152602001908152602001600020600701819055505b600086111561387f578560076000838152602001908152602001600020600801819055505b60008711156138a4578660076000838152602001908152602001600020600901819055505b60008411156138c9578360076000838152602001908152602001600020600a01819055505b60008511156138ee578460076000838152602001908152602001600020600b01819055505b6000821115613913578160076000838152602001908152602001600020600c01819055505b6000831115613938578260076000838152602001908152602001600020600d01819055505b505050505050505050505050505050565b60008060006005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff166005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546005600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301549250925092509193909250565b600080613a7b600184614d5490919063ffffffff16565b905060068181548110613a8a57fe5b90600052602060002090600e0201600d0154915050919050565b613aac612125565b613b1e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613b426120fc565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613bbf57600080fd5b505afa158015613bd3573d6000803e3d6000fd5b505050506040513d6020811015613be957600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613c6357600080fd5b505af1158015613c77573d6000803e3d6000fd5b505050506040513d6020811015613c8d57600080fd5b81019080805190602001909291905050505050565b60026001541415613d1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000613d39600186614d5490919063ffffffff16565b905060068181548110613d4857fe5b90600052602060002090600e0201600101544210158015613d87575060068181548110613d7157fe5b90600052602060002090600e0201600201544211155b613df9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b613e0433868861181f565b613e76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642075736572000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000349050613ee1816005600089815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154614d9e90919063ffffffff16565b6005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550600260068381548110613f4757fe5b90600052602060002090600e020160030154141561420557685150ae84a8cdf0000087101561403f5760068281548110613f7d57fe5b90600052602060002090600e0201600501546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154111561403a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806155806022913960400191505060405180910390fd5b614200565b685150ae84a8cdf000008710158015614060575068a2a15d09519be0000087105b15614134576006828154811061407257fe5b90600052602060002090600e0201600601546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154111561412f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061553d6022913960400191505060405180910390fd5b6141ff565b6006828154811061414157fe5b90600052602060002090600e0201600701546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156141fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806155a26022913960400191505060405180910390fd5b5b5b61454a565b60016006838154811061421457fe5b90600052602060002090600e0201600301541415614318576006828154811061423957fe5b90600052602060002090600e0201600601546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301541115614313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f696e76616c6964206d6178696d756d20636f6e7472696275746500000000000081525060200191505060405180910390fd5b614549565b60036006838154811061432757fe5b90600052602060002090600e020160030154141561442b576006828154811061434c57fe5b90600052602060002090600e0201600801546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301541115614426576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e76616c696420636f6e74726962757465000000000000000000000000000081525060200191505060405180910390fd5b614548565b6005600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301541115614547576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e76616c696420636f6e74726962757465000000000000000000000000000081525060200191505060405180910390fd5b5b5b5b6000614597670de0b6b3a76400006145896006868154811061456857fe5b90600052602060002090600e0201600c015485614e2e90919063ffffffff16565b614eb490919063ffffffff16565b905060006145a488611635565b9050600684815481106145b357fe5b90600052602060002090600e0201600a01548111614639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f49444f20736f6c64206f7574000000000000000000000000000000000000000081525060200191505060405180910390fd5b818110156146af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f49444f20736f6c64206f7574000000000000000000000000000000000000000081525060200191505060405180910390fd5b61471582600560008b815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154614d9e90919063ffffffff16565b600560008a815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061479d826006868154811061477d57fe5b90600052602060002090600e0201600d0154614d9e90919063ffffffff16565b600685815481106147aa57fe5b90600052602060002090600e0201600d018190555050505050600180819055505050505050565b60008060008060008060008060008060008060006147f960018f614d5490919063ffffffff16565b905060076000828152602001908152602001600020600001546007600083815260200190815260200160002060010154600760008481526020019081526020016000206002015460076000858152602001908152602001600020600301546007600086815260200190815260200160002060040154600760008781526020019081526020016000206005015460076000888152602001908152602001600020600601546007600089815260200190815260200160002060070154600760008a815260200190815260200160002060080154600760008b815260200190815260200160002060090154600760008c8152602001908152602001600020600a0154600760008d8152602001908152602001600020600b01549c509c509c509c509c509c509c509c509c509c509c509c505091939597999b5091939597999b565b61493f612125565b6149b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006149c7600183614d5490919063ffffffff16565b90506000600682815481106149d857fe5b90600052602060002090600e02016008015490506000614a39670de0b6b3a7640000614a2b60068681548110614a0a57fe5b90600052602060002090600e0201600c015485614e2e90919063ffffffff16565b614eb490919063ffffffff16565b905060008090505b8551811015614ac25781600560008781526020019081526020016000206000888481518110614a6c57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055508080600101915050614a41565b505050505050565b614ad2612125565b614b44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b8351811015614cc85781600560008481526020019081526020016000206000868481518110614b7557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550828181518110614bca57fe5b6020026020010151600560008481526020019081526020016000206000868481518110614bf357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801819055506001600560008481526020019081526020016000206000868481518110614c5f57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055508080600101915050614b4a565b50505050565b614cd6612125565b614d48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b614d5181614fb6565b50565b6000614d9683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506150fa565b905092915050565b600080828401905083811015614e1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600080831415614e415760009050614eae565b6000828402905082848281614e5257fe5b0414614ea9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061555f6021913960400191505060405180910390fd5b809150505b92915050565b6000614ef683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506151ba565b905092915050565b614fb18363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615280565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561503c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155176026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008383111582906151a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561516c578082015181840152602081019050615151565b50505050905090810190601f1680156151995780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290615266576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561522b578082015181840152602081019050615210565b50505050905090810190601f1680156152585780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161527257fe5b049050809150509392505050565b61529f8273ffffffffffffffffffffffffffffffffffffffff166154cb565b615311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310615360578051825260208201915060208101905060208303925061533d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146153c2576040519150601f19603f3d011682016040523d82523d6000602084013e6153c7565b606091505b50915091508161543f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b6000815111156154c55780806020019051602081101561545e57600080fd5b81019080805190602001909291905050506154c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806155c4602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561550d57506000801b8214155b9250505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373696e76616c6964206d6178696d756d20707572636861736520666f72207469657232536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77696e76616c6964206d6178696d756d20707572636861736520666f72207469657231696e76616c6964206d6178696d756d20707572636861736520666f722074696572335361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212200e367e6d379a8b38f0710ccb53eda2201f1a77bbbf5282364c6dfa21abc1f9a564736f6c6343000602003300000000000000000000000057866ed63ca5f9744cef9aa270bd1f1dce935831

Deployed Bytecode

0x6080604052600436106101c25760003560e01c80638f32d59b116100f7578063c30ef48711610095578063d207019311610064578063d207019314610cb4578063db0cd5b714610d50578063ddbb8f0214610e1f578063f2fde38b14610f82576101c2565b8063c30ef48714610b5a578063c734e25314610bbb578063c7e42b1b14610c0a578063d0d5527514610c5b576101c2565b8063a9e7c2e5116100d1578063a9e7c2e51461095d578063b7de030314610998578063b9d02df4146109e7578063bf1145a114610a92576101c2565b80638f32d59b1461083557806396f5fef514610864578063a48ebe821461090e576101c2565b806336c287f911610164578063521d7d901161013e578063521d7d9014610698578063715018a6146107585780638b881c751461076f5780638da5cb5b146107de576101c2565b806336c287f9146105205780634c41e8801461059d57806350933d4d146105d8576101c2565b80631440b196116101a05780631440b196146103465780631f4552cb1461040e5780632561ae02146104255780632f380b3514610474576101c2565b806306fdde03146101c757806308405e74146102575780631069f3b5146102be575b600080fd5b3480156101d357600080fd5b506101dc610fd3565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561021c578082015181840152602081019050610201565b50505050905090810190601f1680156102495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026357600080fd5b506102bc6004803603606081101561027a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190505050611071565b005b3480156102ca57600080fd5b50610317600480360360408110156102e157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061115b565b604051808515151515815260200184815260200183815260200182815260200194505050505060405180910390f35b34801561035257600080fd5b5061040c60048036036101e081101561036a57600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506112cf565b005b34801561041a57600080fd5b506104236114d4565b005b34801561043157600080fd5b5061045e6004803603602081101561044857600080fd5b8101908080359060200190929190505050611635565b6040518082815260200191505060405180910390f35b34801561048057600080fd5b506104ad6004803603602081101561049757600080fd5b81019080803590602001909291905050506116c7565b604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019850505050505050505060405180910390f35b34801561052c57600080fd5b506105836004803603606081101561054357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061181f565b604051808215151515815260200191505060405180910390f35b3480156105a957600080fd5b506105d6600480360360208110156105c057600080fd5b8101908080359060200190929190505050611a0a565b005b3480156105e457600080fd5b5061069660048036036101808110156105fc57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611a8e565b005b3480156106a457600080fd5b5061075660048036036101808110156106bc57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ca5565b005b34801561076457600080fd5b5061076d611f65565b005b34801561077b57600080fd5b506107c86004803603604081101561079257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061209e565b6040518082815260200191505060405180910390f35b3480156107ea57600080fd5b506107f36120fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561084157600080fd5b5061084a612125565b604051808215151515815260200191505060405180910390f35b34801561087057600080fd5b5061089d6004803603602081101561088757600080fd5b8101908080359060200190929190505050612183565b604051808f81526020018e81526020018d81526020018c81526020018b81526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390f35b34801561091a57600080fd5b506109476004803603602081101561093157600080fd5b81019080803590602001909291905050506121ef565b6040518082815260200191505060405180910390f35b34801561096957600080fd5b506109966004803603602081101561098057600080fd5b810190808035906020019092919050505061224c565b005b3480156109a457600080fd5b506109d1600480360360208110156109bb57600080fd5b8101908080359060200190929190505050613610565b6040518082815260200191505060405180910390f35b3480156109f357600080fd5b50610a4060048036036040811015610a0a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613650565b604051808a815260200189151515158152602001888152602001878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405180910390f35b348015610a9e57600080fd5b50610b5860048036036101e0811015610ab657600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506136b8565b005b348015610b6657600080fd5b50610b9360048036036020811015610b7d57600080fd5b8101908080359060200190929190505050613949565b6040518084151515158152602001838152602001828152602001935050505060405180910390f35b348015610bc757600080fd5b50610bf460048036036020811015610bde57600080fd5b8101908080359060200190929190505050613a64565b6040518082815260200191505060405180910390f35b348015610c1657600080fd5b50610c5960048036036020811015610c2d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613aa4565b005b610cb2600480360360a0811015610c7157600080fd5b810190808035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050613ca2565b005b348015610cc057600080fd5b50610ced60048036036020811015610cd757600080fd5b81019080803590602001909291905050506147d1565b604051808d81526020018c81526020018b81526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019c5050505050505050505050505060405180910390f35b348015610d5c57600080fd5b50610e1d60048036036040811015610d7357600080fd5b8101908080359060200190640100000000811115610d9057600080fd5b820183602082011115610da257600080fd5b80359060200191846020830284011164010000000083111715610dc457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050614937565b005b348015610e2b57600080fd5b50610f8060048036036060811015610e4257600080fd5b8101908080359060200190640100000000811115610e5f57600080fd5b820183602082011115610e7157600080fd5b80359060200191846020830284011164010000000083111715610e9357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ef357600080fd5b820183602082011115610f0557600080fd5b80359060200191846020830284011164010000000083111715610f2757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050614aca565b005b348015610f8e57600080fd5b50610fd160048036036020811015610fa557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614cce565b005b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110695780601f1061103e57610100808354040283529160200191611069565b820191906000526020600020905b81548152906001019060200180831161104c57829003601f168201915b505050505081565b611079612125565b6110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806005600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff021916908315150217905550505050565b6000806000806005600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff166005600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546005600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154600560008a815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154935093509350935092959194509250565b6112d7612125565b611349576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8d60076000838152602001908152602001600020600001819055508e60076000838152602001908152602001600020600101819055508b60076000838152602001908152602001600020600201819055508c60076000838152602001908152602001600020600301819055508960076000838152602001908152602001600020600401819055508a60076000838152602001908152602001600020600501819055508760076000838152602001908152602001600020600601819055508860076000838152602001908152602001600020600701819055508560076000838152602001908152602001600020600801819055508660076000838152602001908152602001600020600901819055508360076000838152602001908152602001600020600a01819055508460076000838152602001908152602001600020600b01819055508160076000838152602001908152602001600020600c01819055508260076000838152602001908152602001600020600d0181905550505050505050505050505050505050565b6114dc612125565b61154e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000479050600081116115c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f7420656e6f7567682066756e64000000000000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611631573d6000803e3d6000fd5b5050565b60008061164c600184614d5490919063ffffffff16565b9050600061165984613610565b9050806006838154811061166957fe5b90600052602060002090600e0201600d0154111561168c576000925050506116c2565b6116bd6006838154811061169c57fe5b90600052602060002090600e0201600d015482614d5490919063ffffffff16565b925050505b919050565b60008060008060008060008060006116e960018b614d5490919063ffffffff16565b9050600681815481106116f857fe5b90600052602060002090600e0201600101546006828154811061171757fe5b90600052602060002090600e0201600201546006838154811061173657fe5b90600052602060002090600e0201600301546006848154811061175557fe5b90600052602060002090600e0201600c01546006858154811061177457fe5b90600052602060002090600e0201600d01546006868154811061179357fe5b90600052602060002090600e0201600b0154600687815481106117b257fe5b90600052602060002090600e020160090154600688815481106117d157fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169850985098509850985098509850985050919395975091939597565b600080611836600185614d5490919063ffffffff16565b905060016006828154811061184757fe5b90600052602060002090600e0201600301541415611869576001915050611a03565b60026006828154811061187857fe5b90600052602060002090600e02016003015414156118ad5760045483106118a3576001915050611a03565b6000915050611a03565b6003600682815481106118bc57fe5b90600052602060002090600e020160030154141561194e576005600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff1615611944576001915050611a03565b6000915050611a03565b60046006828154811061195d57fe5b90600052602060002090600e02016003015414156119fd576005600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff1680156119e457506004548310155b156119f3576001915050611a03565b6000915050611a03565b60009150505b9392505050565b611a12612125565b611a84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060048190555050565b611a96612125565b611b08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611b236001600680549050614d9e90919063ffffffff16565b90506006604051806101c001604052808381526020018f81526020018e81526020018d81526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a8152602001898152602001888152602001878152602001848152602001868152602001858152602001600081525090806001815401808255809150506001900390600052602060002090600e02016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d0155505050505050505050505050505050565b611cad612125565b611d1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611d3560018e614d5490919063ffffffff16565b905060008c1115611d64578b60068281548110611d4e57fe5b90600052602060002090600e0201600101819055505b60008b1115611d91578a60068281548110611d7b57fe5b90600052602060002090600e0201600201819055505b60008a1115611dbe578960068281548110611da857fe5b90600052602060002090600e0201600501819055505b6000891115611deb578860068281548110611dd557fe5b90600052602060002090600e0201600601819055505b6000881115611e18578760068281548110611e0257fe5b90600052602060002090600e0201600701819055505b6000871115611e45578660068281548110611e2f57fe5b90600052602060002090600e0201600801819055505b6000861115611e72578560068281548110611e5c57fe5b90600052602060002090600e0201600901819055505b6000851115611e9f578460068281548110611e8957fe5b90600052602060002090600e0201600b01819055505b6000841115611ecc578360068281548110611eb657fe5b90600052602060002090600e0201600c01819055505b6000821115611ef9578160068281548110611ee357fe5b90600052602060002090600e0201600301819055505b8260068281548110611f0757fe5b90600052602060002090600e020160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050505050505050565b611f6d612125565b611fdf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006005600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080154905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612167614e26565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600760205280600052604060002060009150905080600001549080600101549080600201549080600301549080600401549080600501549080600601549080600701549080600801549080600901549080600a01549080600b01549080600c01549080600d015490508e565b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b600260015414156122c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060646005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006015410612396576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f796f75206861766520636c61696d656420656e6f75676800000000000000000081525060200191505060405180910390fd5b60006123a1826121ef565b905060008111612419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636c61696d0000000000000000000000000000000000000081525060200191505060405180910390fd5b600061242f600184614d5490919063ffffffff16565b905060006005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701541415612695576007600082815260200190815260200160002060000154421015612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b6125bd33612559606461254b600760008781526020019081526020016000206001015487614e2e90919063ffffffff16565b614eb490919063ffffffff16565b6006848154811061256657fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614efe9092919063ffffffff16565b61263960076000838152602001908152602001600020600101546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614d9e90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134ee565b60016005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015414156128f957600760008281526020019081526020016000206002015442101561277d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612821336127bd60646127af600760008781526020019081526020016000206003015487614e2e90919063ffffffff16565b614eb490919063ffffffff16565b600684815481106127ca57fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614efe9092919063ffffffff16565b61289d60076000838152602001908152602001600020600301546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614d9e90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134ed565b60026005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701541415612b5d5760076000828152602001908152602001600020600401544210156129e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612a8533612a216064612a13600760008781526020019081526020016000206005015487614e2e90919063ffffffff16565b614eb490919063ffffffff16565b60068481548110612a2e57fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614efe9092919063ffffffff16565b612b0160076000838152602001908152602001600020600501546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614d9e90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134ec565b60036005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701541415612dc1576007600082815260200190815260200160002060060154421015612c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612ce933612c856064612c77600760008781526020019081526020016000206007015487614e2e90919063ffffffff16565b614eb490919063ffffffff16565b60068481548110612c9257fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614efe9092919063ffffffff16565b612d6560076000838152602001908152602001600020600701546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614d9e90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134eb565b60046005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701541415613025576007600082815260200190815260200160002060080154421015612ea9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612f4d33612ee96064612edb600760008781526020019081526020016000206009015487614e2e90919063ffffffff16565b614eb490919063ffffffff16565b60068481548110612ef657fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614efe9092919063ffffffff16565b612fc960076000838152602001908152602001600020600901546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614d9e90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134ea565b600580600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015414156132885760076000828152602001908152602001600020600a015442101561310c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b6131b03361314c606461313e60076000878152602001908152602001600020600b015487614e2e90919063ffffffff16565b614eb490919063ffffffff16565b6006848154811061315957fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614efe9092919063ffffffff16565b61322c60076000838152602001908152602001600020600b01546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614d9e90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134e9565b60066005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015414156134e85760076000828152602001908152602001600020600c0154421015613370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b613414336133b060646133a260076000878152602001908152602001600020600d015487614e2e90919063ffffffff16565b614eb490919063ffffffff16565b600684815481106133bd57fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614efe9092919063ffffffff16565b61349060076000838152602001908152602001600020600d01546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614d9e90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055505b5b5b5b5b5b5b426005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501819055506135ad60016005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154614d9e90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555050506001808190555050565b600080613627600184614d5490919063ffffffff16565b90506006818154811061363657fe5b90600052602060002090600e0201600b0154915050919050565b6005602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900460ff16908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b6136c0612125565b613732576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008e1115613757578d60076000838152602001908152602001600020600001819055505b60008f111561377c578e60076000838152602001908152602001600020600101819055505b60008c11156137a1578b60076000838152602001908152602001600020600201819055505b60008d11156137c6578c60076000838152602001908152602001600020600301819055505b60008a11156137eb578960076000838152602001908152602001600020600401819055505b60008b1115613810578a60076000838152602001908152602001600020600501819055505b6000881115613835578760076000838152602001908152602001600020600601819055505b600089111561385a578860076000838152602001908152602001600020600701819055505b600086111561387f578560076000838152602001908152602001600020600801819055505b60008711156138a4578660076000838152602001908152602001600020600901819055505b60008411156138c9578360076000838152602001908152602001600020600a01819055505b60008511156138ee578460076000838152602001908152602001600020600b01819055505b6000821115613913578160076000838152602001908152602001600020600c01819055505b6000831115613938578260076000838152602001908152602001600020600d01819055505b505050505050505050505050505050565b60008060006005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff166005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546005600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301549250925092509193909250565b600080613a7b600184614d5490919063ffffffff16565b905060068181548110613a8a57fe5b90600052602060002090600e0201600d0154915050919050565b613aac612125565b613b1e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613b426120fc565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613bbf57600080fd5b505afa158015613bd3573d6000803e3d6000fd5b505050506040513d6020811015613be957600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613c6357600080fd5b505af1158015613c77573d6000803e3d6000fd5b505050506040513d6020811015613c8d57600080fd5b81019080805190602001909291905050505050565b60026001541415613d1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000613d39600186614d5490919063ffffffff16565b905060068181548110613d4857fe5b90600052602060002090600e0201600101544210158015613d87575060068181548110613d7157fe5b90600052602060002090600e0201600201544211155b613df9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b613e0433868861181f565b613e76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642075736572000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000349050613ee1816005600089815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154614d9e90919063ffffffff16565b6005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550600260068381548110613f4757fe5b90600052602060002090600e020160030154141561420557685150ae84a8cdf0000087101561403f5760068281548110613f7d57fe5b90600052602060002090600e0201600501546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154111561403a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806155806022913960400191505060405180910390fd5b614200565b685150ae84a8cdf000008710158015614060575068a2a15d09519be0000087105b15614134576006828154811061407257fe5b90600052602060002090600e0201600601546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154111561412f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061553d6022913960400191505060405180910390fd5b6141ff565b6006828154811061414157fe5b90600052602060002090600e0201600701546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156141fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806155a26022913960400191505060405180910390fd5b5b5b61454a565b60016006838154811061421457fe5b90600052602060002090600e0201600301541415614318576006828154811061423957fe5b90600052602060002090600e0201600601546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301541115614313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f696e76616c6964206d6178696d756d20636f6e7472696275746500000000000081525060200191505060405180910390fd5b614549565b60036006838154811061432757fe5b90600052602060002090600e020160030154141561442b576006828154811061434c57fe5b90600052602060002090600e0201600801546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301541115614426576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e76616c696420636f6e74726962757465000000000000000000000000000081525060200191505060405180910390fd5b614548565b6005600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301541115614547576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e76616c696420636f6e74726962757465000000000000000000000000000081525060200191505060405180910390fd5b5b5b5b6000614597670de0b6b3a76400006145896006868154811061456857fe5b90600052602060002090600e0201600c015485614e2e90919063ffffffff16565b614eb490919063ffffffff16565b905060006145a488611635565b9050600684815481106145b357fe5b90600052602060002090600e0201600a01548111614639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f49444f20736f6c64206f7574000000000000000000000000000000000000000081525060200191505060405180910390fd5b818110156146af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f49444f20736f6c64206f7574000000000000000000000000000000000000000081525060200191505060405180910390fd5b61471582600560008b815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154614d9e90919063ffffffff16565b600560008a815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061479d826006868154811061477d57fe5b90600052602060002090600e0201600d0154614d9e90919063ffffffff16565b600685815481106147aa57fe5b90600052602060002090600e0201600d018190555050505050600180819055505050505050565b60008060008060008060008060008060008060006147f960018f614d5490919063ffffffff16565b905060076000828152602001908152602001600020600001546007600083815260200190815260200160002060010154600760008481526020019081526020016000206002015460076000858152602001908152602001600020600301546007600086815260200190815260200160002060040154600760008781526020019081526020016000206005015460076000888152602001908152602001600020600601546007600089815260200190815260200160002060070154600760008a815260200190815260200160002060080154600760008b815260200190815260200160002060090154600760008c8152602001908152602001600020600a0154600760008d8152602001908152602001600020600b01549c509c509c509c509c509c509c509c509c509c509c509c505091939597999b5091939597999b565b61493f612125565b6149b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006149c7600183614d5490919063ffffffff16565b90506000600682815481106149d857fe5b90600052602060002090600e02016008015490506000614a39670de0b6b3a7640000614a2b60068681548110614a0a57fe5b90600052602060002090600e0201600c015485614e2e90919063ffffffff16565b614eb490919063ffffffff16565b905060008090505b8551811015614ac25781600560008781526020019081526020016000206000888481518110614a6c57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055508080600101915050614a41565b505050505050565b614ad2612125565b614b44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b8351811015614cc85781600560008481526020019081526020016000206000868481518110614b7557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550828181518110614bca57fe5b6020026020010151600560008481526020019081526020016000206000868481518110614bf357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801819055506001600560008481526020019081526020016000206000868481518110614c5f57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055508080600101915050614b4a565b50505050565b614cd6612125565b614d48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b614d5181614fb6565b50565b6000614d9683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506150fa565b905092915050565b600080828401905083811015614e1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600080831415614e415760009050614eae565b6000828402905082848281614e5257fe5b0414614ea9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061555f6021913960400191505060405180910390fd5b809150505b92915050565b6000614ef683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506151ba565b905092915050565b614fb18363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615280565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561503c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155176026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008383111582906151a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561516c578082015181840152602081019050615151565b50505050905090810190601f1680156151995780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290615266576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561522b578082015181840152602081019050615210565b50505050905090810190601f1680156152585780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161527257fe5b049050809150509392505050565b61529f8273ffffffffffffffffffffffffffffffffffffffff166154cb565b615311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310615360578051825260208201915060208101905060208303925061533d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146153c2576040519150601f19603f3d011682016040523d82523d6000602084013e6153c7565b606091505b50915091508161543f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b6000815111156154c55780806020019051602081101561545e57600080fd5b81019080805190602001909291905050506154c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806155c4602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561550d57506000801b8214155b9250505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373696e76616c6964206d6178696d756d20707572636861736520666f72207469657232536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77696e76616c6964206d6178696d756d20707572636861736520666f72207469657231696e76616c6964206d6178696d756d20707572636861736520666f722074696572335361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212200e367e6d379a8b38f0710ccb53eda2201f1a77bbbf5282364c6dfa21abc1f9a564736f6c63430006020033

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

00000000000000000000000057866ed63ca5f9744cef9aa270bd1f1dce935831

-----Decoded View---------------
Arg [0] : receiveTokenAdd (address): 0x57866ed63cA5F9744CEf9aa270bD1f1dCe935831

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000057866ed63ca5f9744cef9aa270bd1f1dce935831


Deployed Bytecode Sourcemap

14385:21957:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14452:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14452:48:0;;;:::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;14452:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17297:191;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17297:191:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17297:191:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35670:426;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35670:426:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35670:426:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19654:1251;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19654:1251:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;19654:1251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24574:194;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24574:194:0;;;:::i;:::-;;32842:337;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32842:337:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32842:337:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33399:665;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33399:665:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33399:665:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17637:877;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17637:877:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17637:877:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17496:133;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17496:133:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17496:133:0;;;;;;;;;;;;;;;;;:::i;:::-;;18522:1124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18522:1124:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;18522:1124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22875:1525;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22875:1525:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;22875:1525:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10821:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10821:148:0;;;:::i;:::-;;36104:235;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36104:235:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36104:235:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10010:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10010:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10376:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10376:94:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16186:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16186:47:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16186:47:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32694:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32694:140:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32694:140:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28255:4431;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28255:4431:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28255:4431:0;;;;;;;;;;;;;;;;;:::i;:::-;;33187:204;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33187:204:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33187:204:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16076:57;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16076:57:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16076:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20913:1954;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20913:1954:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;20913:1954:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35277:385;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35277:385:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35277:385:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35106:163;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35106:163:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35106:163:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24408:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24408:128:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24408:128:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;24776:3471;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;24776:3471:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34072:1026;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34072:1026:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34072:1026:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16812:477;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16812:477:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16812:477:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;16812:477:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16812:477:0;;;;;;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;16812:477:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;16812:477:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16397:407;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16397:407:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16397:407:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;16397:407:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16397:407:0;;;;;;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;16397:407:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;16397:407:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;16397:407:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16397:407:0;;;;;;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;16397:407:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;16397:407:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11124:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11124:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11124:117:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;14452:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17297:191::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17460:11:::1;17429:5;:10;17435:3;17429:10;;;;;;;;;;;:16;17440:4;17429:16;;;;;;;;;;;;;;;:28;;;:42;;;;;;;;;;;;;;;;;;17297:191:::0;;;:::o;35670:426::-;35780:4;35799:7;35821;35843;35900:5;:10;35906:3;35900:10;;;;;;;;;;;:16;35911:4;35900:16;;;;;;;;;;;;;;;:28;;;;;;;;;;;;35943:5;:10;35949:3;35943:10;;;;;;;;;;;:16;35954:4;35943:16;;;;;;;;;;;;;;;:35;;;35993:5;:10;35999:3;35993:10;;;;;;;;;;;:16;36004:4;35993:16;;;;;;;;;;;;;;;:33;;;36041:5;:10;36047:3;36041:10;;;;;;;;;;;:16;36052:4;36041:16;;;;;;;;;;;;;;;:36;;;35878:210;;;;;;;;35670:426;;;;;;;:::o;19654:1251::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20193:10:::1;20164;:15;20175:3;20164:15;;;;;;;;;;;:26;;:39;;;;20246:13;20214:10;:15;20225:3;20214:15;;;;;;;;;;;:29;;:45;;;;20299:10;20270;:15;20281:3;20270:15;;;;;;;;;;;:26;;:39;;;;20352:13;20320:10;:15;20331:3;20320:15;;;;;;;;;;;:29;;:45;;;;20405:10;20376;:15;20387:3;20376:15;;;;;;;;;;;:26;;:39;;;;20458:13;20426:10;:15;20437:3;20426:15;;;;;;;;;;;:29;;:45;;;;20511:10;20482;:15;20493:3;20482:15;;;;;;;;;;;:26;;:39;;;;20564:13;20532:10;:15;20543:3;20532:15;;;;;;;;;;;:29;;:45;;;;20617:10;20588;:15;20599:3;20588:15;;;;;;;;;;;:26;;:39;;;;20670:13;20638:10;:15;20649:3;20638:15;;;;;;;;;;;:29;;:45;;;;20724:10;20695;:15;20706:3;20695:15;;;;;;;;;;;:26;;:39;;;;20777:13;20745:10;:15;20756:3;20745:15;;;;;;;;;;;:29;;:45;;;;20831:10;20802;:15;20813:3;20802:15;;;;;;;;;;;:26;;:39;;;;20884:13;20852:10;:15;20863:3;20852:15;;;;;;;;;;;:29;;:45;;;;19654:1251:::0;;;;;;;;;;;;;;;:::o;24574:194::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24630:15:::1;24648:21;24630:39;;24698:1;24688:7;:11;24680:39;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24730:12;;;;;;;;;;;:21;;:30;24752:7;24730:30;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24730:30:0;10279:1;24574:194::o:0;32842:337::-;32903:7;32923:17;32943:10;32951:1;32943:3;:7;;:10;;;;:::i;:::-;32923:30;;32964:20;32987:28;33011:3;32987:23;:28::i;:::-;32964:51;;33059:12;33030:5;33036:9;33030:16;;;;;;;;;;;;;;;;;;:26;;;:41;33026:82;;;33095:1;33088:8;;;;;;33026:82;33127:44;33144:5;33150:9;33144:16;;;;;;;;;;;;;;;;;;:26;;;33127:12;:16;;:44;;;;:::i;:::-;33120:51;;;;32842:337;;;;:::o;33399:665::-;33495:7;33517;33539;33561;33583;33605;33628;33650:6;33684:17;33704:10;33712:1;33704:3;:7;;:10;;;;:::i;:::-;33684:30;;33747:5;33753:9;33747:16;;;;;;;;;;;;;;;;;;:22;;;33784:5;33790:9;33784:16;;;;;;;;;;;;;;;;;;:20;;;33819:5;33825:9;33819:16;;;;;;;;;;;;;;;;;;:21;;;33855:5;33861:9;33855:16;;;;;;;;;;;;;;;;;;:27;;;33897:5;33903:9;33897:16;;;;;;;;;;;;;;;;;;:26;;;33938:5;33944:9;33938:16;;;;;;;;;;;;;;;;;;:27;;;33980:5;33986:9;33980:16;;;;;;;;;;;;;;;;;;:25;;;34020:5;34026:9;34020:16;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;33725:331;;;;;;;;;;;;;;;;;33399:665;;;;;;;;;:::o;17637:877::-;17761:4;17778:17;17798:10;17806:1;17798:3;:7;;:10;;;;:::i;:::-;17778:30;;17848:1;17823:5;17829:9;17823:16;;;;;;;;;;;;;;;;;;:21;;;:26;17819:688;;;17901:4;17894:11;;;;;17819:688;17952:1;17927:5;17933:9;17927:16;;;;;;;;;;;;;;;;;;:21;;;:26;17923:584;;;18015:18;;18000:11;:33;17996:50;;18042:4;18035:11;;;;;17996:50;18068:5;18061:12;;;;;17923:584;18120:1;18095:5;18101:9;18095:16;;;;;;;;;;;;;;;;;;:21;;;:26;18091:416;;;18170:5;:10;18176:3;18170:10;;;;;;;;;;;:16;18181:4;18170:16;;;;;;;;;;;;;;;:28;;;;;;;;;;;;18166:45;;;18207:4;18200:11;;;;;18166:45;18233:5;18226:12;;;;;18091:416;18293:1;18269:5;18275:9;18269:16;;;;;;;;;;;;;;;;;;:21;;;:25;18265:242;;;18345:5;:10;18351:3;18345:10;;;;;;;;;;;:16;18356:4;18345:16;;;;;;;;;;;;;;;:28;;;;;;;;;;;;:65;;;;;18392:18;;18377:11;:33;;18345:65;18341:82;;;18419:4;18412:11;;;;;18341:82;18445:5;18438:12;;;;;18265:242;18490:5;18483:12;;;17637:877;;;;;;:::o;17496:133::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17604:8:::1;17585:18;:27;;;;17496:133:::0;:::o;18522:1124::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18944:10:::1;18957:19;18974:1;18957:5;:12;;;;:16;;:19;;;;:::i;:::-;18944:32;;18987:5;19012:615;;;;;;;;19043:2;19012:615;;;;19071:5;19012:615;;;;19100:3;19012:615;;;;19128:5;19012:615;;;;19162:8;19012:615;;;;;;19207:16;19012:615;;;;19260:16;19012:615;;;;19313:16;19012:615;;;;19367:18;19012:615;;;;19414:8;19012:615;;;;19575:19;19012:615;;;;19453:10;19012:615;;;;19494:10;19012:615;;;;19534:1;19012:615;;::::0;18987:651:::1;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;18987:651:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10279:1;18522:1124:::0;;;;;;;;;;;;:::o;22875:1525::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23296:17:::1;23316:10;23324:1;23316:3;:7;;:10;;;;:::i;:::-;23296:30;;23349:1;23341:5;:9;23337:72;;;23392:5;23367;23373:9;23367:16;;;;;;;;;;;;;;;;;;:22;;:30;;;;23337:72;23429:1;23423:3;:7;23419:66;;;23470:3;23447:5;23453:9;23447:16;;;;;;;;;;;;;;;;;;:20;;:26;;;;23419:66;23520:1;23501:16;:20;23497:105;;;23574:16;23538:5;23544:9;23538:16;;;;;;;;;;;;;;;;;;:33;;:52;;;;23497:105;23635:1;23616:16;:20;23612:105;;;23689:16;23653:5;23659:9;23653:16;;;;;;;;;;;;;;;;;;:33;;:52;;;;23612:105;23750:1;23731:16;:20;23727:105;;;23804:16;23768:5;23774:9;23768:16;;;;;;;;;;;;;;;;;;:33;;:52;;;;23727:105;23869:1;23848:18;:22;23844:111;;;23925:18;23887:5;23893:9;23887:16;;;;;;;;;;;;;;;;;;:35;;:56;;;;23844:111;23980:1;23969:8;:12;23965:81;;;24026:8;23998:5;24004:9;23998:16;;;;;;;;;;;;;;;;;;:25;;:36;;;;23965:81;24073:1;24060:10;:14;24056:87;;;24121:10;24091:5;24097:9;24091:16;;;;;;;;;;;;;;;;;;:27;;:40;;;;24056:87;24170:1;24157:10;:14;24153:87;;;24218:10;24188:5;24194:9;24188:16;;;;;;;;;;;;;;;;;;:27;;:40;;;;24153:87;24284:1;24273:8;:12;24269:77;;;24326:8;24302:5;24308:9;24302:16;;;;;;;;;;;;;;;;;;:21;;:32;;;;24269:77;24384:8;24356:5;24362:9;24356:16;;;;;;;;;;;;;;;;;;:25;;;:36;;;;;;;;;;;;;;;;;;10279:1;22875:1525:::0;;;;;;;;;;;;:::o;10821:148::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10928:1:::1;10891:40;;10912:6;::::0;::::1;;;;;;;;;10891:40;;;;;;;;;;;;10959:1;10942:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;10821:148::o:0;36104:235::-;36228:7;36285:5;:10;36291:3;36285:10;;;;;;;;;;;:16;36296:4;36285:16;;;;;;;;;;;;;;;:35;;;36263:68;;36104:235;;;;:::o;10010:79::-;10048:7;10075:6;;;;;;;;;;;10068:13;;10010:79;:::o;10376:94::-;10416:4;10456:6;;;;;;;;;;;10440:22;;:12;:10;:12::i;:::-;:22;;;10433:29;;10376:94;:::o;16186:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32694:140::-;32758:7;32785:5;:10;32791:3;32785:10;;;;;;;;;;;:22;32796:10;32785:22;;;;;;;;;;;;;;;:41;;;32778:48;;32694:140;;;:::o;28255:4431::-;11714:1;12319:7;;:19;;12311:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11714:1;12452:7;:18;;;;28386:3:::1;28341:5;:10;28347:3;28341:10;;;;;;;;;;;:22;28352:10;28341:22;;;;;;;;;;;;;;;:42;;;:48;28319:121;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28451:19;28473:25;28494:3;28473:20;:25::i;:::-;28451:47;;28531:1;28517:11;:15;28509:41;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28563:17;28583:10;28591:1;28583:3;:7;;:10;;;;:::i;:::-;28563:30;;28648:1;28608:5;:10;28614:3;28608:10;;;;;;;;;;;:22;28619:10;28608:22;;;;;;;;;;;;;;;:36;;;:41;28604:3919;;;28711:10;:21;28722:9;28711:21;;;;;;;;;;;:32;;;28692:15;:51;;28666:125;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28806:162;28863:10;28892:61;28949:3;28892:52;28908:10;:21;28919:9;28908:21;;;;;;;;;;;:35;;;28892:11;:15;;:52;;;;:::i;:::-;:56;;:61;;;;:::i;:::-;28806:5;28812:9;28806:16;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;:38;;;;:162;;;;;:::i;:::-;29026:115;29091:10;:21;29102:9;29091:21;;;;;;;;;;;:35;;;29026:5;:10;29032:3;29026:10;;;;;;;;;;;:22;29037:10;29026:22;;;;;;;;;;;;;;;:42;;;:46;;:115;;;;:::i;:::-;28981:5;:10;28987:3;28981:10;;;;;;;;;;;:22;28992:10;28981:22;;;;;;;;;;;;;;;:42;;:160;;;;28604:3919;;;29203:1;29163:5;:10;29169:3;29163:10;;;;;;;;;;;:22;29174:10;29163:22;;;;;;;;;;;;;;;:36;;;:41;29159:3364;;;29266:10;:21;29277:9;29266:21;;;;;;;;;;;:32;;;29247:15;:51;;29221:125;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;29361:162;29418:10;29447:61;29504:3;29447:52;29463:10;:21;29474:9;29463:21;;;;;;;;;;;:35;;;29447:11;:15;;:52;;;;:::i;:::-;:56;;:61;;;;:::i;:::-;29361:5;29367:9;29361:16;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;:38;;;;:162;;;;;:::i;:::-;29581:115;29646:10;:21;29657:9;29646:21;;;;;;;;;;;:35;;;29581:5;:10;29587:3;29581:10;;;;;;;;;;;:22;29592:10;29581:22;;;;;;;;;;;;;;;:42;;;:46;;:115;;;;:::i;:::-;29538:5;:10;29544:3;29538:10;;;;;;;;;;;:22;29549:10;29538:22;;;;;;;;;;;;;;;:42;;:158;;;;29159:3364;;;29758:1;29718:5;:10;29724:3;29718:10;;;;;;;;;;;:22;29729:10;29718:22;;;;;;;;;;;;;;;:36;;;:41;29714:2809;;;29821:10;:21;29832:9;29821:21;;;;;;;;;;;:32;;;29802:15;:51;;29776:125;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;29916:162;29973:10;30002:61;30059:3;30002:52;30018:10;:21;30029:9;30018:21;;;;;;;;;;;:35;;;30002:11;:15;;:52;;;;:::i;:::-;:56;;:61;;;;:::i;:::-;29916:5;29922:9;29916:16;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;:38;;;;:162;;;;;:::i;:::-;30136:115;30201:10;:21;30212:9;30201:21;;;;;;;;;;;:35;;;30136:5;:10;30142:3;30136:10;;;;;;;;;;;:22;30147:10;30136:22;;;;;;;;;;;;;;;:42;;;:46;;:115;;;;:::i;:::-;30092:5;:10;30098:3;30092:10;;;;;;;;;;;:22;30103:10;30092:22;;;;;;;;;;;;;;;:42;;:159;;;;29714:2809;;;30325:1;30285:5;:10;30291:3;30285:10;;;;;;;;;;;:22;30296:10;30285:22;;;;;;;;;;;;;;;:36;;;:41;30281:2242;;;30388:10;:21;30399:9;30388:21;;;;;;;;;;;:32;;;30369:15;:51;;30343:125;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30483:162;30540:10;30569:61;30626:3;30569:52;30585:10;:21;30596:9;30585:21;;;;;;;;;;;:35;;;30569:11;:15;;:52;;;;:::i;:::-;:56;;:61;;;;:::i;:::-;30483:5;30489:9;30483:16;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;:38;;;;:162;;;;;:::i;:::-;30703:115;30768:10;:21;30779:9;30768:21;;;;;;;;;;;:35;;;30703:5;:10;30709:3;30703:10;;;;;;;;;;;:22;30714:10;30703:22;;;;;;;;;;;;;;;:42;;;:46;;:115;;;;:::i;:::-;30659:5;:10;30665:3;30659:10;;;;;;;;;;;:22;30670:10;30659:22;;;;;;;;;;;;;;;:42;;:159;;;;30281:2242;;;30890:1;30850:5;:10;30856:3;30850:10;;;;;;;;;;;:22;30861:10;30850:22;;;;;;;;;;;;;;;:36;;;:41;30846:1677;;;30953:10;:21;30964:9;30953:21;;;;;;;;;;;:32;;;30934:15;:51;;30908:125;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31048:162;31105:10;31134:61;31191:3;31134:52;31150:10;:21;31161:9;31150:21;;;;;;;;;;;:35;;;31134:11;:15;;:52;;;;:::i;:::-;:56;;:61;;;;:::i;:::-;31048:5;31054:9;31048:16;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;:38;;;;:162;;;;;:::i;:::-;31268:115;31333:10;:21;31344:9;31333:21;;;;;;;;;;;:35;;;31268:5;:10;31274:3;31268:10;;;;;;;;;;;:22;31279:10;31268:22;;;;;;;;;;;;;;;:42;;;:46;;:115;;;;:::i;:::-;31224:5;:10;31230:3;31224:10;;;;;;;;;;;:22;31235:10;31224:22;;;;;;;;;;;;;;;:42;;:159;;;;30846:1677;;;31454:1;31414:5:::0;:10:::1;31420:3;31414:10;;;;;;;;;;;:22;31425:10;31414:22;;;;;;;;;;;;;;;:36;;;:41;31410:1113;;;31517:10;:21;31528:9;31517:21;;;;;;;;;;;:32;;;31498:15;:51;;31472:125;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31612:162;31669:10;31698:61;31755:3;31698:52;31714:10;:21;31725:9;31714:21;;;;;;;;;;;:35;;;31698:11;:15;;:52;;;;:::i;:::-;:56;;:61;;;;:::i;:::-;31612:5;31618:9;31612:16;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;:38;;;;:162;;;;;:::i;:::-;31832:115;31897:10;:21;31908:9;31897:21;;;;;;;;;;;:35;;;31832:5;:10;31838:3;31832:10;;;;;;;;;;;:22;31843:10;31832:22;;;;;;;;;;;;;;;:42;;;:46;;:115;;;;:::i;:::-;31788:5;:10;31794:3;31788:10;;;;;;;;;;;:22;31799:10;31788:22;;;;;;;;;;;;;;;:42;;:159;;;;31410:1113;;;32018:1;31978:5;:10;31984:3;31978:10;;;;;;;;;;;:22;31989:10;31978:22;;;;;;;;;;;;;;;:36;;;:41;31974:549;;;32081:10;:21;32092:9;32081:21;;;;;;;;;;;:32;;;32062:15;:51;;32036:125;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32176:162;32233:10;32262:61;32319:3;32262:52;32278:10;:21;32289:9;32278:21;;;;;;;;;;;:35;;;32262:11;:15;;:52;;;;:::i;:::-;:56;;:61;;;;:::i;:::-;32176:5;32182:9;32176:16;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;:38;;;;:162;;;;;:::i;:::-;32396:115;32461:10;:21;32472:9;32461:21;;;;;;;;;;;:35;;;32396:5;:10;32402:3;32396:10;;;;;;;;;;;:22;32407:10;32396:22;;;;;;;;;;;;;;;:42;;;:46;;:115;;;;:::i;:::-;32352:5;:10;32358:3;32352:10;;;;;;;;;;;:22;32363:10;32352:22;;;;;;;;;;;;;;;:42;;:159;;;;31974:549;31410:1113;30846:1677;30281:2242;29714:2809;29159:3364;28604:3919;32572:15;32535:5;:10;32541:3;32535:10;;;;;;;;;;;:22;32546:10;32535:22;;;;;;;;;;;;;;;:34;;:52;;;;32635:43;32676:1;32635:5;:10;32641:3;32635:10;;;;;;;;;;;:22;32646:10;32635:22;;;;;;;;;;;;;;;:36;;;:40;;:43;;;;:::i;:::-;32598:5;:10;32604:3;32598:10;;;;;;;;;;;:22;32609:10;32598:22;;;;;;;;;;;;;;;:36;;:80;;;;12483:1;;11670::::0;12631:7;:22;;;;28255:4431;:::o;33187:204::-;33281:7;33306:17;33326:10;33334:1;33326:3;:7;;:10;;;;:::i;:::-;33306:30;;33356:5;33362:9;33356:16;;;;;;;;;;;;;;;;;;:27;;;33349:34;;;33187:204;;;:::o;16076:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20913:1954::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21445:1:::1;21432:10;:14;21428:86;;;21492:10;21463;:15;21474:3;21463:15;;;;;;;;;;;:26;;:39;;;;21428:86;21546:1;21530:13;:17;21526:95;;;21596:13;21564:10;:15;21575:3;21564:15;;;;;;;;;;;:29;;:45;;;;21526:95;21648:1;21635:10;:14;21631:86;;;21695:10;21666;:15;21677:3;21666:15;;;;;;;;;;;:26;;:39;;;;21631:86;21749:1;21733:13;:17;21729:95;;;21799:13;21767:10;:15;21778:3;21767:15;;;;;;;;;;;:29;;:45;;;;21729:95;21853:1;21840:10;:14;21836:86;;;21900:10;21871;:15;21882:3;21871:15;;;;;;;;;;;:26;;:39;;;;21836:86;21954:1;21938:13;:17;21934:95;;;22004:13;21972:10;:15;21983:3;21972:15;;;;;;;;;;;:29;;:45;;;;21934:95;22060:1;22047:10;:14;22043:86;;;22107:10;22078;:15;22089:3;22078:15;;;;;;;;;;;:26;;:39;;;;22043:86;22161:1;22145:13;:17;22141:95;;;22211:13;22179:10;:15;22190:3;22179:15;;;;;;;;;;;:29;;:45;;;;22141:95;22268:1;22255:10;:14;22251:86;;;22315:10;22286;:15;22297:3;22286:15;;;;;;;;;;;:26;;:39;;;;22251:86;22369:1;22353:13;:17;22349:95;;;22419:13;22387:10;:15;22398:3;22387:15;;;;;;;;;;;:29;;:45;;;;22349:95;22476:1;22463:10;:14;22459:86;;;22523:10;22494;:15;22505:3;22494:15;;;;;;;;;;;:26;;:39;;;;22459:86;22577:1;22561:13;:17;22557:95;;;22627:13;22595:10;:15;22606:3;22595:15;;;;;;;;;;;:29;;:45;;;;22557:95;22684:1;22671:10;:14;22667:86;;;22731:10;22702;:15;22713:3;22702:15;;;;;;;;;;;:26;;:39;;;;22667:86;22785:1;22769:13;:17;22765:95;;;22835:13;22803:10;:15;22814:3;22803:15;;;;;;;;;;;:29;;:45;;;;22765:95;20913:1954:::0;;;;;;;;;;;;;;;:::o;35277:385::-;35388:4;35407:7;35429;35499:5;:10;35505:3;35499:10;;;;;;;;;;;:22;35510:10;35499:22;;;;;;;;;;;;;;;:34;;;;;;;;;;;;35548:5;:10;35554:3;35548:10;;;;;;;;;;;:22;35559:10;35548:22;;;;;;;;;;;;;;;:41;;;35604:5;:10;35610:3;35604:10;;;;;;;;;;;:22;35615:10;35604:22;;;;;;;;;;;;;;;:39;;;35464:190;;;;;;35277:385;;;;;:::o;35106:163::-;35165:7;35185:17;35205:10;35213:1;35205:3;:7;;:10;;;;:::i;:::-;35185:30;;35234:5;35240:9;35234:16;;;;;;;;;;;;;;;;;;:26;;;35226:35;;;35106:163;;;:::o;24408:128::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24473:5:::1;:14;;;24488:7;:5;:7::i;:::-;24497:5;:15;;;24521:4;24497:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;24497:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24497:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;24497:30:0;;;;;;;;;;;;;;;;24473:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;24473:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24473:55:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;24473:55:0;;;;;;;;;;;;;;;;;24408:128:::0;:::o;24776:3471::-;11714:1;12319:7;;:19;;12311:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11714:1;12452:7;:18;;;;24953:17:::1;24973:10;24981:1;24973:3;:7;;:10;;;;:::i;:::-;24953:30;;25449:5;25455:9;25449:16;;;;;;;;;;;;;;;;;;:22;;;25430:15;:41;;:101;;;;;25511:5;25517:9;25511:16;;;;;;;;;;;;;;;;;;:20;;;25492:15;:39;;25430:101;25408:163;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25612:41;25624:10;25636:3;25641:11;25612;:41::i;:::-;25604:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25707:17;25727:9;25707:29;;25789:82;25861:9;25789:5;:10;25795:3;25789:10;;;;;;;;;;;:22;25800:10;25789:22;;;;;;;;;;;;;;;:53;;;:71;;:82;;;;:::i;:::-;25747:5;:10;25753:3;25747:10;;;;;;;;;;;:22;25758:10;25747:22;;;;;;;;;;;;;;;:39;;:124;;;;25913:1;25888:5;25894:9;25888:16;;;;;;;;;;;;;;;;;;:21;;;:26;25884:1751;;;25979:11;25965;:25;25961:868;;;26109:5;26115:9;26109:16;;;;;;;;;;;;;;;;;;:33;;;26041:5;:10;26047:3;26041:10;;;;;;;;;;;:22;26052:10;26041:22;;;;;;;;;;;;;;;:39;;;:101;;26011:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25961:868;;;26279:11;26264;:26;;:55;;;;;26308:11;26294;:25;26264:55;26242:587;;;26452:5;26458:9;26452:16;;;;;;;;;;;;;;;;;;:33;;;26384:5;:10;26390:3;26384:10;;;;;;;;;;;:22;26395:10;26384:22;;;;;;;;;;;;;;;:39;;;:101;;26354:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26242:587;;;26702:5;26708:9;26702:16;;;;;;;;;;;;;;;;;;:33;;;26634:5;:10;26640:3;26634:10;;;;;;;;;;;:22;26645:10;26634:22;;;;;;;;;;;;;;;:39;;;:101;;26604:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26242:587;25961:868;25884:1751;;;26875:1;26850:5;26856:9;26850:16;;;;;;;;;;;;;;;;;;:21;;;:26;26846:789;;;27016:5;27022:9;27016:16;;;;;;;;;;;;;;;;;;:33;;;26952:5;:10;26958:3;26952:10;;;;;;;;;;;:22;26963:10;26952:22;;;;;;;;;;;;;;;:39;;;:97;;26926:185;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;26846:789;;;27159:1;27134:5;27140:9;27134:16;;;;;;;;;;;;;;;;;;:21;;;:26;27130:505;;;27289:5;27295:9;27289:16;;;;;;;;;;;;;;;;;;:35;;;27225:5;:10;27231:3;27225:10;;;;;;;;;;;:22;27236:10;27225:22;;;;;;;;;;;;;;;:39;;;:99;;27199:179;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27130:505;;;27528:5;:10;27534:3;27528:10;;;;;;;;;;;:22;27539:10;27528:22;;;;;;;;;;;;;;;:41;;;27463:5;:10;27469:3;27463:10;;;;;;;;;;;:22;27474:10;27463:22;;;;;;;;;;;;;;;:39;;;:106;;27437:186;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27130:505;26846:789;25884:1751;27647:19;27669:76;27730:4;27669:42;27683:5;27689:9;27683:16;;;;;;;;;;;;;;;;;;:27;;;27669:9;:13;;:42;;;;:::i;:::-;:46;;:76;;;;:::i;:::-;27647:98;;27758:19;27780:22;27798:3;27780:17;:22::i;:::-;27758:44;;27849:5;27855:9;27849:16;;;;;;;;;;;;;;;;;;:36;;;27835:11;:50;27813:112;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27959:11;27944;:26;;27936:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28044:86;28118:11;28044:5;:10;28050:3;28044:10;;;;;;;;;;;:22;28055:10;28044:22;;;;;;;;;;;;;;;:55;;;:73;;:86;;;;:::i;:::-;28000:5;:10;28006:3;28000:10;;;;;;;;;;;:22;28011:10;28000:22;;;;;;;;;;;;;;;:41;;:130;;;;28172:67;28217:11;28172:5;28178:9;28172:16;;;;;;;;;;;;;;;;;;:26;;;:30;;:67;;;;:::i;:::-;28143:5;28149:9;28143:16;;;;;;;;;;;;;;;;;;:26;;:96;;;;12483:1;;;;11670::::0;12631:7;:22;;;;24776:3471;;;;;:::o;34072:1026::-;34169:7;34191;34213;34235;34257;34279;34301;34323;34345;34367;34389;34411;34446:17;34466:10;34474:1;34466:3;:7;;:10;;;;:::i;:::-;34446:30;;34509:10;:21;34520:9;34509:21;;;;;;;;;;;:32;;;34556:10;:21;34567:9;34556:21;;;;;;;;;;;:35;;;34606:10;:21;34617:9;34606:21;;;;;;;;;;;:32;;;34653:10;:21;34664:9;34653:21;;;;;;;;;;;:35;;;34703:10;:21;34714:9;34703:21;;;;;;;;;;;:32;;;34750:10;:21;34761:9;34750:21;;;;;;;;;;;:35;;;34801:10;:21;34812:9;34801:21;;;;;;;;;;;:32;;;34848:10;:21;34859:9;34848:21;;;;;;;;;;;:35;;;34899:10;:21;34910:9;34899:21;;;;;;;;;;;:32;;;34946:10;:21;34957:9;34946:21;;;;;;;;;;;:35;;;34997:10;:21;35008:9;34997:21;;;;;;;;;;;:32;;;35044:10;:21;35055:9;35044:21;;;;;;;;;;;:35;;;34487:603;;;;;;;;;;;;;;;;;;;;;;;;;34072:1026;;;;;;;;;;;;;:::o;16812:477::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16940:17:::1;16960:10;16968:1;16960:3;:7;;:10;;;;:::i;:::-;16940:30;;16981:18;17001:5;17007:9;17001:16;;;;;;;;;;;;;;;;;;:35;;;16981:55;;17047:19;17069:53;17117:4;17069:43;17084:5;17090:9;17084:16;;;;;;;;;;;;;;;;;;:27;;;17069:10;:14;;:43;;;;:::i;:::-;:47;;:53;;;;:::i;:::-;17047:75;;17140:9;17152:1:::0;17140:13:::1;;17135:147;17159:4;:11;17155:1;:15;17135:147;;;17245:11;17204:5;:10;17210:3;17204:10;;;;;;;;;;;:19;17215:4;17220:1;17215:7;;;;;;;;;;;;;;17204:19;;;;;;;;;;;;;;;:38;;:52;;;;17172:3;;;;;;;17135:147;;;;10279:1;;;16812:477:::0;;:::o;16397:407::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16569:9:::1;16581:1:::0;16569:13:::1;;16564:233;16588:4;:11;16584:1;:15;16564:233;;;16646:3;16621:5;:10;16627:3;16621:10;;;;;;;;;;;:19;16632:4;16637:1;16632:7;;;;;;;;;;;;;;16621:19;;;;;;;;;;;;;;;:22;;:28;;;;16706:10;16717:1;16706:13;;;;;;;;;;;;;;16665:5;:10;16671:3;16665:10;;;;;;;;;;;:19;16676:4;16681:1;16676:7;;;;;;;;;;;;;;16665:19;;;;;;;;;;;;;;;:38;;:54;;;;16768:4;16734:5;:10;16740:3;16734:10;;;;;;;;;;;:19;16745:4;16750:1;16745:7;;;;;;;;;;;;;;16734:19;;;;;;;;;;;;;;;:31;;;:38;;;;;;;;;;;;;;;;;;16601:3;;;;;;;16564:233;;;;16397:407:::0;;;:::o;11124:117::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11205:28:::1;11224:8;11205:18;:28::i;:::-;11124:117:::0;:::o;1083:136::-;1141:7;1168:43;1172:1;1175;1168:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1161:50;;1083:136;;;;:::o;889:181::-;947:7;967:9;983:1;979;:5;967:17;;1008:1;1003;:6;;995:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1061:1;1054:8;;;889:181;;;;:::o;9157:106::-;9210:15;9245:10;9238:17;;9157:106;:::o;1438:471::-;1496:7;1746:1;1741;:6;1737:47;;;1771:1;1764:8;;;;1737:47;1796:9;1812:1;1808;:5;1796:17;;1841:1;1836;1832;:5;;;;;;:10;1824:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1900:1;1893:8;;;1438:471;;;;;:::o;1923:132::-;1981:7;2008:39;2012:1;2015;2008:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2001:46;;1923:132;;;;:::o;5784:176::-;5867:85;5886:5;5916:23;;;5941:2;5945:5;5893:58;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5893:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;5893:58:0;5867:18;:85::i;:::-;5784:176;;;:::o;11347:237::-;11449:1;11429:22;;:8;:22;;;;11421:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11539:8;11510:38;;11531:6;;;;;;;;;;;11510:38;;;;;;;;;;;;11568:8;11559:6;;:17;;;;;;;;;;;;;;;;;;11347:237;:::o;1233:192::-;1319:7;1352:1;1347;:6;;1355:12;1339:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1339:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1379:9;1395:1;1391;:5;1379:17;;1416:1;1409:8;;;1233:192;;;;;:::o;2069:345::-;2155:7;2254:1;2250;:5;2257:12;2242:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;2242:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2281:9;2297:1;2293;:5;;;;;;2281:17;;2405:1;2398:8;;;2069:345;;;;;:::o;7823:1114::-;8427:27;8435:5;8427:25;;;:27::i;:::-;8419:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8564:12;8578:23;8613:5;8605:19;;8625:4;8605:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;8605:25:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;8563:67:0;;;;8649:7;8641:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8730:1;8710:10;:17;:21;8706:224;;;8852:10;8841:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8841:30:0;;;;;;;;;;;;;;;;8833:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8706:224;7823:1114;;;;:::o;3353:619::-;3413:4;3675:16;3702:19;3724:66;3702:88;;;;3893:7;3881:20;3869:32;;3933:11;3921:8;:23;;:42;;;;;3960:3;3948:15;;:8;:15;;3921:42;3913:51;;;;3353:619;;;:::o

Swarm Source

ipfs://0e367e6d379a8b38f0710ccb53eda2201f1a77bbbf5282364c6dfa21abc1f9a5

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.