ETH Price: $3,415.60 (+3.00%)

Contract

0x7Df76A64aE3dc2f818f969fe081ea52ab8cBC350
 
Transaction Hash
Method
Block
From
To
Claim Token168934982023-03-23 23:27:47641 days ago1679614067IN
0x7Df76A64...ab8cBC350
0 ETH0.0009343123.18853559
Claim Token168934842023-03-23 23:24:59641 days ago1679613899IN
0x7Df76A64...ab8cBC350
0 ETH0.0010304825.57541965
Claim Token168726882023-03-21 1:15:59644 days ago1679361359IN
0x7Df76A64...ab8cBC350
0 ETH0.0006356115.77531281
Claim Token168726712023-03-21 1:12:35644 days ago1679361155IN
0x7Df76A64...ab8cBC350
0 ETH0.0006383115.84232497
Claim Token168485242023-03-17 15:49:59647 days ago1679068199IN
0x7Df76A64...ab8cBC350
0 ETH0.0009675924.01455378
Claim Token168485142023-03-17 15:47:59647 days ago1679068079IN
0x7Df76A64...ab8cBC350
0 ETH0.0010008924.8410327
Claim Token168269642023-03-14 15:04:35650 days ago1678806275IN
0x7Df76A64...ab8cBC350
0 ETH0.00178544.30180981
Claim Token167146892023-02-26 20:09:23666 days ago1677442163IN
0x7Df76A64...ab8cBC350
0 ETH0.0009875724.51049657
Claim Token167146582023-02-26 20:03:11666 days ago1677441791IN
0x7Df76A64...ab8cBC350
0 ETH0.0010542126.16443763
Claim Token166914352023-02-23 13:36:47669 days ago1677159407IN
0x7Df76A64...ab8cBC350
0 ETH0.0014423235.79684994
Claim Token166899892023-02-23 8:43:59669 days ago1677141839IN
0x7Df76A64...ab8cBC350
0 ETH0.0010633726.39179983
Claim Token166899872023-02-23 8:43:35669 days ago1677141815IN
0x7Df76A64...ab8cBC350
0 ETH0.0010817926.84892143
Claim Token165670032023-02-06 3:16:59687 days ago1675653419IN
0x7Df76A64...ab8cBC350
0 ETH0.0007252518
Claim Token164327042023-01-18 9:10:35705 days ago1674033035IN
0x7Df76A64...ab8cBC350
0 ETH0.0006854717.01271816
Claim Token164327002023-01-18 9:09:47705 days ago1674032987IN
0x7Df76A64...ab8cBC350
0 ETH0.0006702716.63550471
Claim Token157687142022-10-17 15:27:47798 days ago1666020467IN
0x7Df76A64...ab8cBC350
0 ETH0.0016505340.9642183
Claim Token157687042022-10-17 15:25:47798 days ago1666020347IN
0x7Df76A64...ab8cBC350
0 ETH0.0016843341.80324894
Claim Token157687012022-10-17 15:25:11798 days ago1666020311IN
0x7Df76A64...ab8cBC350
0 ETH0.0015792539.19527584
Claim Token157262082022-10-11 16:57:47804 days ago1665507467IN
0x7Df76A64...ab8cBC350
0 ETH0.0029206529.30325136
Claim Token156713802022-10-04 1:03:35812 days ago1664845415IN
0x7Df76A64...ab8cBC350
0 ETH0.0004464311.07993054
Claim Token156459502022-09-30 11:47:35815 days ago1664538455IN
0x7Df76A64...ab8cBC350
0 ETH0.0007902711.28840683
Claim Token156459472022-09-30 11:46:59815 days ago1664538419IN
0x7Df76A64...ab8cBC350
0 ETH0.0007412110.63146311
Claim Token156459422022-09-30 11:45:59815 days ago1664538359IN
0x7Df76A64...ab8cBC350
0 ETH0.0015234111.0537275
Claim Token153753022022-08-20 3:40:23857 days ago1660966823IN
0x7Df76A64...ab8cBC350
0 ETH0.000608838.69670839
Claim Token152936522022-08-07 6:53:00869 days ago1659855180IN
0x7Df76A64...ab8cBC350
0 ETH0.000253056.28057609
View all transactions

Latest 6 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
135763812021-11-08 14:47:581141 days ago1636382878
0x7Df76A64...ab8cBC350
10.84199783 ETH
135382372021-11-02 15:06:161147 days ago1635865576
0x7Df76A64...ab8cBC350
11.902 ETH
134929802021-10-26 12:21:081154 days ago1635250868
0x7Df76A64...ab8cBC350
0.125 ETH
134675992021-10-22 13:09:361158 days ago1634908176
0x7Df76A64...ab8cBC350
7.855 ETH
134414922021-10-18 11:14:481162 days ago1634555688
0x7Df76A64...ab8cBC350
16.20293875 ETH
134024252021-10-12 7:53:091168 days ago1634025189
0x7Df76A64...ab8cBC350
28.345 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
File 1 of 8 : PolkabridgeLaunchPadV2.sol
pragma solidity >=0.6.0;

import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
import "@openzeppelin/contracts/math/SafeMath.sol";
import "@openzeppelin/contracts/ownership/Ownable.sol";
import "./ReentrancyGuard.sol";

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;

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

    struct ClaimInfo {
        uint256 ClaimTime1;
        uint256 PercentClaim1;
        uint256 ClaimTime2;
        uint256 PercentClaim2;
        uint256 ClaimTime3;
        uint256 PercentClaim3;
    }

    struct User {
        uint256 Id;
        address UserAddress;
        bool IsWhitelist;
        uint256 TotalTokenPurchase;
        uint256 TotalETHPurchase;
        uint256 PurchaseTime;
        uint256 LastClaimed;
        uint256 TotalPercentClaimed;
        uint256 NumberClaimed;
        bool IsActived;
    }

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

    IDOPool[] pools;

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

    constructor(address payable receiveTokenAdd) public {
        ReceiveToken = receiveTokenAdd;
    }

    function addMulWhitelist(address[] memory user, uint256 pid)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < user.length; i++) {
            users[pid][user[i]].Id = pid;
            users[pid][user[i]].UserAddress = user[i];
            users[pid][user[i]].IsWhitelist = true;
            users[pid][user[i]].IsActived = true;
        }
    }

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

    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 >= pools[poolIndex].MinimumStakeAmount) return true;
            return false;
        } else if (pools[poolIndex].Type == 3) //internal
        {
            if (users[poolIndex][user].IsWhitelist) return true;
            return false;
        } else {
            return false;
        }
    }

    function addPool(
        uint256 begin,
        uint256 end,
        uint256 _type,
        IERC20 idoToken,
        uint256 maxPurchaseTier1,
        uint256 maxPurchaseTier2,
        uint256 maxPurchaseTier3,
        uint256 totalCap,
        uint256 totalToken,
        uint256 ratePerETH,
        uint256 minimumTokenSoldout,
        uint256 minimumStakeAmount
    ) 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,
                TotalCap: totalCap,
                TotalToken: totalToken,
                RatePerETH: ratePerETH,
                TotalSold: 0,
                MinimumTokenSoldout: minimumTokenSoldout,
                MinimumStakeAmount: minimumStakeAmount
            })
        );
    }

    function addClaimInfo(
        uint256 percentClaim1,
        uint256 claimTime1,
        uint256 percentClaim2,
        uint256 claimTime2,
        uint256 percentClaim3,
        uint256 claimTime3,
        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;
    }

    function updateClaimInfo(
        uint256 percentClaim1,
        uint256 claimTime1,
        uint256 percentClaim2,
        uint256 claimTime2,
        uint256 percentClaim3,
        uint256 claimTime3,
        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;
        }
    }

    function updatePool(
        uint256 pid,
        uint256 begin,
        uint256 end,
        uint256 maxPurchaseTier1,
        uint256 maxPurchaseTier2,
        uint256 maxPurchaseTier3,
        uint256 totalCap,
        uint256 totalToken,
        uint256 ratePerETH,
        IERC20 idoToken,
        uint256 minimumTokenSoldout,
        uint256 pooltype,
        uint256 minimumStakeAmount
    ) 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 (totalCap > 0) {
            pools[poolIndex].TotalCap = totalCap;
        }
        if (totalToken > 0) {
            pools[poolIndex].TotalToken = totalToken;
        }
        if (ratePerETH > 0) {
            pools[poolIndex].RatePerETH = ratePerETH;
        }

        if (minimumStakeAmount > 0) {
            pools[poolIndex].MinimumStakeAmount = minimumStakeAmount;
        }

        if (minimumTokenSoldout > 0) {
            pools[poolIndex].MinimumTokenSoldout = minimumTokenSoldout;
        }
        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) {
            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 {
            //=3
            require(
                users[pid][msg.sender].TotalETHPurchase <=
                    pools[poolIndex].MaxPurchaseTier3,
                "invalid maximum 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
            );
        }

        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,
            IERC20
        )
    {
        uint256 poolIndex = pid.sub(1);
        return (
            pools[poolIndex].Begin,
            pools[poolIndex].End,
            pools[poolIndex].Type,
            pools[poolIndex].RatePerETH,
            pools[poolIndex].TotalSold,
            pools[poolIndex].IDOToken
        );
    }

    function getClaimInfo(uint256 pid)
        public
        view
        returns (
            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
        );
    }

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

    function getWhitelistfo(uint256 pid)
        public
        view
        returns (
            address,
            bool,
            uint256,
            uint256
        )
    {
        return (
            users[pid][msg.sender].UserAddress,
            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
        );
    }

    
}

File 2 of 8 : Address.sol
pragma solidity ^0.6.0;

/**
 * @dev Collection of functions related to the address type
 */
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");
    }
}

File 3 of 8 : SafeERC20.sol
pragma solidity ^0.6.0;

import "./IERC20.sol";
import "../../math/SafeMath.sol";
import "../../utils/Address.sol";

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
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");
        }
    }
}

File 4 of 8 : IERC20.sol
pragma solidity ^0.6.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 5 of 8 : Ownable.sol
pragma solidity ^0.6.0;

import "../GSN/Context.sol";
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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;
    }
}

File 6 of 8 : SafeMath.sol
pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    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;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 7 of 8 : Context.sol
pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
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;
    }
}

File 8 of 8 : ReentrancyGuard.sol
pragma solidity >=0.6.0;

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;
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

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":"pid","type":"uint256"}],"name":"addClaimInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"user","type":"address[]"},{"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":"totalCap","type":"uint256"},{"internalType":"uint256","name":"totalToken","type":"uint256"},{"internalType":"uint256","name":"ratePerETH","type":"uint256"},{"internalType":"uint256","name":"minimumTokenSoldout","type":"uint256"},{"internalType":"uint256","name":"minimumStakeAmount","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"}],"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"}],"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":"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"}],"name":"getUserTotalPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"getWhitelistfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"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":"pid","type":"uint256"}],"name":"updateClaimInfo","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":"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":"minimumTokenSoldout","type":"uint256"},{"internalType":"uint256","name":"pooltype","type":"uint256"},{"internalType":"uint256","name":"minimumStakeAmount","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"},{"internalType":"bool","name":"isActived","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":"address","name":"UserAddress","type":"address"},{"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":"bool","name":"IsActived","type":"bool"}],"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"}]

60806040526040518060400160405280601981526020017f506f6c6b614272696467653a204c61756e63685061642056320000000000000081525060029080519060200190620000519291906200019d565b503480156200005f57600080fd5b506040516200488a3803806200488a833981810160405260208110156200008557600080fd5b81019080805190602001909291905050506000620000a86200019560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001808190555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200024c565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001e057805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000210578251825591602001919060010190620001f3565b5b50905062000220919062000224565b5090565b6200024991905b80821115620002455760008160009055506001016200022b565b5090565b90565b61462e806200025c6000396000f3fe6080604052600436106101815760003560e01c806396f5fef5116100d1578063c734e2531161008a578063d207019311610064578063d207019314610b46578063d70c33c814610bb8578063dac9540b14610c2b578063f2fde38b14610ca257610181565b8063c734e25314610a4d578063c7e42b1b14610a9c578063d0d5527514610aed57610181565b806396f5fef51461078c578063a48ebe82146107fe578063a9e7c2e51461084d578063b7de030314610888578063b9d02df4146108d7578063c30ef487146109b957610181565b80632f380b351161013e57806350933d4d1161011857806350933d4d1461062f578063715018a6146106ef5780638da5cb5b146107065780638f32d59b1461075d57610181565b80632f380b351461044a57806336c287f9146104e85780634365295e1461056557610181565b806306fdde03146101865780631069f3b5146102165780631a1d69ec1461029e5780631f4552cb1461036d5780632561ae02146103845780632f270438146103d3575b600080fd5b34801561019257600080fd5b5061019b610cf3565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101db5780820151818401526020810190506101c0565b50505050905090810190601f1680156102085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022257600080fd5b5061026f6004803603604081101561023957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d91565b604051808515151515815260200184815260200183815260200182815260200194505050505060405180910390f35b3480156102aa57600080fd5b5061036b600480360360408110156102c157600080fd5b81019080803590602001906401000000008111156102de57600080fd5b8201836020820111156102f057600080fd5b8035906020019184602083028401116401000000008311171561031257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050610f05565b005b34801561037957600080fd5b506103826111c1565b005b34801561039057600080fd5b506103bd600480360360208110156103a757600080fd5b8101908080359060200190929190505050611322565b6040518082815260200191505060405180910390f35b3480156103df57600080fd5b50610448600480360360e08110156103f657600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506113b4565b005b34801561045657600080fd5b506104836004803603602081101561046d57600080fd5b81019080803590602001909291905050506114d9565b604051808781526020018681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001965050505050505060405180910390f35b3480156104f457600080fd5b5061054b6004803603606081101561050b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506115ea565b604051808215151515815260200191505060405180910390f35b34801561057157600080fd5b5061062d60048036036101a081101561058957600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611742565b005b34801561063b57600080fd5b506106ed600480360361018081101561065357600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611a30565b005b3480156106fb57600080fd5b50610704611c47565b005b34801561071257600080fd5b5061071b611d80565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561076957600080fd5b50610772611da9565b604051808215151515815260200191505060405180910390f35b34801561079857600080fd5b506107c5600480360360208110156107af57600080fd5b8101908080359060200190929190505050611e07565b60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b34801561080a57600080fd5b506108376004803603602081101561082157600080fd5b8101908080359060200190929190505050611e43565b6040518082815260200191505060405180910390f35b34801561085957600080fd5b506108866004803603602081101561087057600080fd5b8101908080359060200190929190505050611ea0565b005b34801561089457600080fd5b506108c1600480360360208110156108ab57600080fd5b81019080803590602001909291905050506128d1565b6040518082815260200191505060405180910390f35b3480156108e357600080fd5b50610930600480360360408110156108fa57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612911565b604051808b81526020018a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200189151515158152602001888152602001878152602001868152602001858152602001848152602001838152602001821515151581526020019a505050505050505050505060405180910390f35b3480156109c557600080fd5b506109f2600480360360208110156109dc57600080fd5b81019080803590602001909291905050506129ac565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018415151515815260200183815260200182815260200194505050505060405180910390f35b348015610a5957600080fd5b50610a8660048036036020811015610a7057600080fd5b8101908080359060200190929190505050612b3e565b6040518082815260200191505060405180910390f35b348015610aa857600080fd5b50610aeb60048036036020811015610abf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b7e565b005b610b44600480360360a0811015610b0357600080fd5b810190808035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050612d7c565b005b348015610b5257600080fd5b50610b7f60048036036020811015610b6957600080fd5b8101908080359060200190929190505050613909565b60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b348015610bc457600080fd5b50610c2960048036036080811015610bdb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035151590602001909291908035151590602001909291905050506139ca565b005b348015610c3757600080fd5b50610ca0600480360360e0811015610c4e57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050613b20565b005b348015610cae57600080fd5b50610cf160048036036020811015610cc557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c81565b005b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d895780601f10610d5e57610100808354040283529160200191610d89565b820191906000526020600020905b815481529060010190602001808311610d6c57829003601f168201915b505050505081565b6000806000806004600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160149054906101000a900460ff166004600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546004600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154600460008a815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154935093509350935092959194509250565b610f0d611da9565b610f7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b82518110156111bc5781600460008481526020019081526020016000206000858481518110610fb057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555082818151811061100557fe5b602002602001015160046000848152602001908152602001600020600085848151811061102e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016004600084815260200190815260200160002060008584815181106110d457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160146101000a81548160ff021916908315150217905550600160046000848152602001908152602001600020600085848151811061115357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080160006101000a81548160ff0219169083151502179055508080600101915050610f85565b505050565b6111c9611da9565b61123b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000479050600081116112b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f7420656e6f7567682066756e64000000000000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561131e573d6000803e3d6000fd5b5050565b600080611339600184613d0790919063ffffffff16565b90506000611346846128d1565b9050806005838154811061135657fe5b90600052602060002090600e0201600c01541115611379576000925050506113af565b6113aa6005838154811061138957fe5b90600052602060002090600e0201600c015482613d0790919063ffffffff16565b925050505b919050565b6113bc611da9565b61142e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b85600660008381526020019081526020016000206000018190555086600660008381526020019081526020016000206001018190555083600660008381526020019081526020016000206002018190555084600660008381526020019081526020016000206003018190555081600660008381526020019081526020016000206004018190555082600660008381526020019081526020016000206005018190555050505050505050565b60008060008060008060006114f8600189613d0790919063ffffffff16565b90506005818154811061150757fe5b90600052602060002090600e0201600101546005828154811061152657fe5b90600052602060002090600e0201600201546005838154811061154557fe5b90600052602060002090600e0201600301546005848154811061156457fe5b90600052602060002090600e0201600b01546005858154811061158357fe5b90600052602060002090600e0201600c0154600586815481106115a257fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169650965096509650965096505091939550919395565b600080611601600185613d0790919063ffffffff16565b905060016005828154811061161257fe5b90600052602060002090600e020160030154141561163457600191505061173b565b60026005828154811061164357fe5b90600052602060002090600e0201600301541415611694576005818154811061166857fe5b90600052602060002090600e0201600d0154831061168a57600191505061173b565b600091505061173b565b6003600582815481106116a357fe5b90600052602060002090600e0201600301541415611735576004600082815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160149054906101000a900460ff161561172b57600191505061173b565b600091505061173b565b60009150505b9392505050565b61174a611da9565b6117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006117d260018f613d0790919063ffffffff16565b905060008d1115611801578c600582815481106117eb57fe5b90600052602060002090600e0201600101819055505b60008c111561182e578b6005828154811061181857fe5b90600052602060002090600e0201600201819055505b60008b111561185b578a6005828154811061184557fe5b90600052602060002090600e0201600501819055505b60008a111561188857896005828154811061187257fe5b90600052602060002090600e0201600601819055505b60008911156118b557886005828154811061189f57fe5b90600052602060002090600e0201600701819055505b60008811156118e25787600582815481106118cc57fe5b90600052602060002090600e0201600801819055505b600087111561190f5786600582815481106118f957fe5b90600052602060002090600e0201600a01819055505b600086111561193c57856005828154811061192657fe5b90600052602060002090600e0201600b01819055505b600082111561196957816005828154811061195357fe5b90600052602060002090600e0201600d01819055505b600084111561199657836005828154811061198057fe5b90600052602060002090600e0201600901819055505b60008311156119c35782600582815481106119ad57fe5b90600052602060002090600e0201600301819055505b84600582815481106119d157fe5b90600052602060002090600e020160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050505050505050565b611a38611da9565b611aaa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611ac56001600580549050613d5190919063ffffffff16565b90506005604051806101c001604052808381526020018f81526020018e81526020018d81526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a8152602001898152602001888152602001858152602001878152602001868152602001600081526020018481525090806001815401808255809150506001900390600052602060002090600e02016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d0155505050505050505050505050505050565b611c4f611da9565b611cc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611deb613dd9565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b60066020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154905086565b60006004600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b60026001541415611f19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060646004600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006015410611fea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f796f75206861766520636c61696d656420656e6f75676800000000000000000081525060200191505060405180910390fd5b6000611ff582611e43565b90506000811161206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636c61696d0000000000000000000000000000000000000081525060200191505060405180910390fd5b6000612083600184613d0790919063ffffffff16565b905060006004600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015414156122e957600660008281526020019081526020016000206000015442101561216d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612211336121ad606461219f600660008781526020019081526020016000206001015487613de190919063ffffffff16565b613e6790919063ffffffff16565b600584815481106121ba57fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613eb19092919063ffffffff16565b61228d60066000838152602001908152602001600020600101546004600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154613d5190919063ffffffff16565b6004600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506127af565b60016004600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154141561254d5760066000828152602001908152602001600020600201544210156123d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612475336124116064612403600660008781526020019081526020016000206003015487613de190919063ffffffff16565b613e6790919063ffffffff16565b6005848154811061241e57fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613eb19092919063ffffffff16565b6124f160066000838152602001908152602001600020600301546004600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154613d5190919063ffffffff16565b6004600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506127ae565b60026004600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015414156127ad576006600082815260200190815260200160002060040154421015612635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b6126d9336126756064612667600660008781526020019081526020016000206005015487613de190919063ffffffff16565b613e6790919063ffffffff16565b6005848154811061268257fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613eb19092919063ffffffff16565b61275560066000838152602001908152602001600020600501546004600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154613d5190919063ffffffff16565b6004600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055505b5b5b426004600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005018190555061286e60016004600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154613d5190919063ffffffff16565b6004600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555050506001808190555050565b6000806128e8600184613d0790919063ffffffff16565b9050600581815481106128f757fe5b90600052602060002090600e0201600a0154915050919050565b6004602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160149054906101000a900460ff16908060020154908060030154908060040154908060050154908060060154908060070154908060080160009054906101000a900460ff1690508a565b6000806000806004600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160149054906101000a900460ff166004600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546004600089815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015493509350935093509193509193565b600080612b55600184613d0790919063ffffffff16565b905060058181548110612b6457fe5b90600052602060002090600e0201600c0154915050919050565b612b86611da9565b612bf8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612c1c611d80565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c9957600080fd5b505afa158015612cad573d6000803e3d6000fd5b505050506040513d6020811015612cc357600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612d3d57600080fd5b505af1158015612d51573d6000803e3d6000fd5b505050506040513d6020811015612d6757600080fd5b81019080805190602001909291905050505050565b60026001541415612df5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000612e13600186613d0790919063ffffffff16565b9050600260058281548110612e2457fe5b90600052602060002090600e0201600301541415612fbc5760003387604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401828152602001925050506040516020818303038152906040528051906020012090506000612ea982613f69565b905060018187878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612f08573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16612f30611d80565b73ffffffffffffffffffffffffffffffffffffffff1614612fb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6f776e65722073686f756c64207369676e20707572636861736520696e666f0081525060200191505060405180910390fd5b50505b60058181548110612fc957fe5b90600052602060002090600e0201600101544210158015613008575060058181548110612ff257fe5b90600052602060002090600e0201600201544211155b61307a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b6130853386886115ea565b6130f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642075736572000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000349050613162816004600089815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154613d5190919063ffffffff16565b6004600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506002600583815481106131c857fe5b90600052602060002090600e020160030154141561348657685150ae84a8cdf000008710156132c057600582815481106131fe57fe5b90600052602060002090600e0201600501546004600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156132bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061458b6022913960400191505060405180910390fd5b613481565b685150ae84a8cdf0000087101580156132e1575068a2a15d09519be0000087105b156133b557600582815481106132f357fe5b90600052602060002090600e0201600601546004600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156133b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806145486022913960400191505060405180910390fd5b613480565b600582815481106133c257fe5b90600052602060002090600e0201600701546004600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154111561347f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806145ad6022913960400191505060405180910390fd5b5b5b613682565b60016005838154811061349557fe5b90600052602060002090600e020160030154141561359957600582815481106134ba57fe5b90600052602060002090600e0201600601546004600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301541115613594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f696e76616c6964206d6178696d756d20636f6e7472696275746500000000000081525060200191505060405180910390fd5b613681565b600582815481106135a657fe5b90600052602060002090600e0201600701546004600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301541115613680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f696e76616c6964206d6178696d756d20636f6e7472696275746500000000000081525060200191505060405180910390fd5b5b5b60006136cf670de0b6b3a76400006136c1600586815481106136a057fe5b90600052602060002090600e0201600b015485613de190919063ffffffff16565b613e6790919063ffffffff16565b905060006136dc88611322565b9050600584815481106136eb57fe5b90600052602060002090600e0201600901548111613771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f49444f20736f6c64206f7574000000000000000000000000000000000000000081525060200191505060405180910390fd5b818110156137e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f49444f20736f6c64206f7574000000000000000000000000000000000000000081525060200191505060405180910390fd5b61384d82600460008b815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154613d5190919063ffffffff16565b600460008a815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506138d582600586815481106138b557fe5b90600052602060002090600e0201600c0154613d5190919063ffffffff16565b600585815481106138e257fe5b90600052602060002090600e0201600c018190555050505050600180819055505050505050565b6000806000806000806000613928600189613d0790919063ffffffff16565b90506006600082815260200190815260200160002060000154600660008381526020019081526020016000206001015460066000848152602001908152602001600020600201546006600085815260200190815260200160002060030154600660008681526020019081526020016000206004015460066000878152602001908152602001600020600501549650965096509650965096505091939550919395565b6139d2611da9565b613a44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b816004600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160146101000a81548160ff021916908315150217905550806004600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080160006101000a81548160ff02191690831515021790555050505050565b613b28611da9565b613b9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000861115613bbf578560066000838152602001908152602001600020600001819055505b6000871115613be4578660066000838152602001908152602001600020600101819055505b6000841115613c09578360066000838152602001908152602001600020600201819055505b6000851115613c2e578460066000838152602001908152602001600020600301819055505b6000821115613c53578160066000838152602001908152602001600020600401819055505b6000831115613c78578260066000838152602001908152602001600020600501819055505b50505050505050565b613c89611da9565b613cfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b613d0481613fc1565b50565b6000613d4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614105565b905092915050565b600080828401905083811015613dcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600080831415613df45760009050613e61565b6000828402905082848281613e0557fe5b0414613e5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061456a6021913960400191505060405180910390fd5b809150505b92915050565b6000613ea983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506141c5565b905092915050565b613f648363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061428b565b505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614047576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806145226026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008383111582906141b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561417757808201518184015260208101905061415c565b50505050905090810190601f1680156141a45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290614271576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561423657808201518184015260208101905061421b565b50505050905090810190601f1680156142635780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161427d57fe5b049050809150509392505050565b6142aa8273ffffffffffffffffffffffffffffffffffffffff166144d6565b61431c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b6020831061436b5780518252602082019150602081019050602083039250614348565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146143cd576040519150601f19603f3d011682016040523d82523d6000602084013e6143d2565b606091505b50915091508161444a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b6000815111156144d05780806020019051602081101561446957600080fd5b81019080805190602001909291905050506144cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806145cf602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561451857506000801b8214155b9250505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373696e76616c6964206d6178696d756d20707572636861736520666f72207469657232536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77696e76616c6964206d6178696d756d20707572636861736520666f72207469657231696e76616c6964206d6178696d756d20707572636861736520666f722074696572335361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220f4288d8ec076c6c77fda502c1961ccc61b936ef5033a8f3876416a71b469812964736f6c6343000602003300000000000000000000000057866ed63ca5f9744cef9aa270bd1f1dce935831

Deployed Bytecode

0x6080604052600436106101815760003560e01c806396f5fef5116100d1578063c734e2531161008a578063d207019311610064578063d207019314610b46578063d70c33c814610bb8578063dac9540b14610c2b578063f2fde38b14610ca257610181565b8063c734e25314610a4d578063c7e42b1b14610a9c578063d0d5527514610aed57610181565b806396f5fef51461078c578063a48ebe82146107fe578063a9e7c2e51461084d578063b7de030314610888578063b9d02df4146108d7578063c30ef487146109b957610181565b80632f380b351161013e57806350933d4d1161011857806350933d4d1461062f578063715018a6146106ef5780638da5cb5b146107065780638f32d59b1461075d57610181565b80632f380b351461044a57806336c287f9146104e85780634365295e1461056557610181565b806306fdde03146101865780631069f3b5146102165780631a1d69ec1461029e5780631f4552cb1461036d5780632561ae02146103845780632f270438146103d3575b600080fd5b34801561019257600080fd5b5061019b610cf3565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101db5780820151818401526020810190506101c0565b50505050905090810190601f1680156102085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022257600080fd5b5061026f6004803603604081101561023957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d91565b604051808515151515815260200184815260200183815260200182815260200194505050505060405180910390f35b3480156102aa57600080fd5b5061036b600480360360408110156102c157600080fd5b81019080803590602001906401000000008111156102de57600080fd5b8201836020820111156102f057600080fd5b8035906020019184602083028401116401000000008311171561031257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050610f05565b005b34801561037957600080fd5b506103826111c1565b005b34801561039057600080fd5b506103bd600480360360208110156103a757600080fd5b8101908080359060200190929190505050611322565b6040518082815260200191505060405180910390f35b3480156103df57600080fd5b50610448600480360360e08110156103f657600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506113b4565b005b34801561045657600080fd5b506104836004803603602081101561046d57600080fd5b81019080803590602001909291905050506114d9565b604051808781526020018681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001965050505050505060405180910390f35b3480156104f457600080fd5b5061054b6004803603606081101561050b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506115ea565b604051808215151515815260200191505060405180910390f35b34801561057157600080fd5b5061062d60048036036101a081101561058957600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611742565b005b34801561063b57600080fd5b506106ed600480360361018081101561065357600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611a30565b005b3480156106fb57600080fd5b50610704611c47565b005b34801561071257600080fd5b5061071b611d80565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561076957600080fd5b50610772611da9565b604051808215151515815260200191505060405180910390f35b34801561079857600080fd5b506107c5600480360360208110156107af57600080fd5b8101908080359060200190929190505050611e07565b60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b34801561080a57600080fd5b506108376004803603602081101561082157600080fd5b8101908080359060200190929190505050611e43565b6040518082815260200191505060405180910390f35b34801561085957600080fd5b506108866004803603602081101561087057600080fd5b8101908080359060200190929190505050611ea0565b005b34801561089457600080fd5b506108c1600480360360208110156108ab57600080fd5b81019080803590602001909291905050506128d1565b6040518082815260200191505060405180910390f35b3480156108e357600080fd5b50610930600480360360408110156108fa57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612911565b604051808b81526020018a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200189151515158152602001888152602001878152602001868152602001858152602001848152602001838152602001821515151581526020019a505050505050505050505060405180910390f35b3480156109c557600080fd5b506109f2600480360360208110156109dc57600080fd5b81019080803590602001909291905050506129ac565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018415151515815260200183815260200182815260200194505050505060405180910390f35b348015610a5957600080fd5b50610a8660048036036020811015610a7057600080fd5b8101908080359060200190929190505050612b3e565b6040518082815260200191505060405180910390f35b348015610aa857600080fd5b50610aeb60048036036020811015610abf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b7e565b005b610b44600480360360a0811015610b0357600080fd5b810190808035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050612d7c565b005b348015610b5257600080fd5b50610b7f60048036036020811015610b6957600080fd5b8101908080359060200190929190505050613909565b60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b348015610bc457600080fd5b50610c2960048036036080811015610bdb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035151590602001909291908035151590602001909291905050506139ca565b005b348015610c3757600080fd5b50610ca0600480360360e0811015610c4e57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050613b20565b005b348015610cae57600080fd5b50610cf160048036036020811015610cc557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c81565b005b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d895780601f10610d5e57610100808354040283529160200191610d89565b820191906000526020600020905b815481529060010190602001808311610d6c57829003601f168201915b505050505081565b6000806000806004600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160149054906101000a900460ff166004600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546004600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154600460008a815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154935093509350935092959194509250565b610f0d611da9565b610f7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b82518110156111bc5781600460008481526020019081526020016000206000858481518110610fb057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555082818151811061100557fe5b602002602001015160046000848152602001908152602001600020600085848151811061102e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016004600084815260200190815260200160002060008584815181106110d457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160146101000a81548160ff021916908315150217905550600160046000848152602001908152602001600020600085848151811061115357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080160006101000a81548160ff0219169083151502179055508080600101915050610f85565b505050565b6111c9611da9565b61123b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000479050600081116112b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f7420656e6f7567682066756e64000000000000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561131e573d6000803e3d6000fd5b5050565b600080611339600184613d0790919063ffffffff16565b90506000611346846128d1565b9050806005838154811061135657fe5b90600052602060002090600e0201600c01541115611379576000925050506113af565b6113aa6005838154811061138957fe5b90600052602060002090600e0201600c015482613d0790919063ffffffff16565b925050505b919050565b6113bc611da9565b61142e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b85600660008381526020019081526020016000206000018190555086600660008381526020019081526020016000206001018190555083600660008381526020019081526020016000206002018190555084600660008381526020019081526020016000206003018190555081600660008381526020019081526020016000206004018190555082600660008381526020019081526020016000206005018190555050505050505050565b60008060008060008060006114f8600189613d0790919063ffffffff16565b90506005818154811061150757fe5b90600052602060002090600e0201600101546005828154811061152657fe5b90600052602060002090600e0201600201546005838154811061154557fe5b90600052602060002090600e0201600301546005848154811061156457fe5b90600052602060002090600e0201600b01546005858154811061158357fe5b90600052602060002090600e0201600c0154600586815481106115a257fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169650965096509650965096505091939550919395565b600080611601600185613d0790919063ffffffff16565b905060016005828154811061161257fe5b90600052602060002090600e020160030154141561163457600191505061173b565b60026005828154811061164357fe5b90600052602060002090600e0201600301541415611694576005818154811061166857fe5b90600052602060002090600e0201600d0154831061168a57600191505061173b565b600091505061173b565b6003600582815481106116a357fe5b90600052602060002090600e0201600301541415611735576004600082815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160149054906101000a900460ff161561172b57600191505061173b565b600091505061173b565b60009150505b9392505050565b61174a611da9565b6117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006117d260018f613d0790919063ffffffff16565b905060008d1115611801578c600582815481106117eb57fe5b90600052602060002090600e0201600101819055505b60008c111561182e578b6005828154811061181857fe5b90600052602060002090600e0201600201819055505b60008b111561185b578a6005828154811061184557fe5b90600052602060002090600e0201600501819055505b60008a111561188857896005828154811061187257fe5b90600052602060002090600e0201600601819055505b60008911156118b557886005828154811061189f57fe5b90600052602060002090600e0201600701819055505b60008811156118e25787600582815481106118cc57fe5b90600052602060002090600e0201600801819055505b600087111561190f5786600582815481106118f957fe5b90600052602060002090600e0201600a01819055505b600086111561193c57856005828154811061192657fe5b90600052602060002090600e0201600b01819055505b600082111561196957816005828154811061195357fe5b90600052602060002090600e0201600d01819055505b600084111561199657836005828154811061198057fe5b90600052602060002090600e0201600901819055505b60008311156119c35782600582815481106119ad57fe5b90600052602060002090600e0201600301819055505b84600582815481106119d157fe5b90600052602060002090600e020160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050505050505050565b611a38611da9565b611aaa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611ac56001600580549050613d5190919063ffffffff16565b90506005604051806101c001604052808381526020018f81526020018e81526020018d81526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a8152602001898152602001888152602001858152602001878152602001868152602001600081526020018481525090806001815401808255809150506001900390600052602060002090600e02016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d0155505050505050505050505050505050565b611c4f611da9565b611cc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611deb613dd9565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b60066020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154905086565b60006004600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b60026001541415611f19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060646004600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006015410611fea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f796f75206861766520636c61696d656420656e6f75676800000000000000000081525060200191505060405180910390fd5b6000611ff582611e43565b90506000811161206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636c61696d0000000000000000000000000000000000000081525060200191505060405180910390fd5b6000612083600184613d0790919063ffffffff16565b905060006004600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015414156122e957600660008281526020019081526020016000206000015442101561216d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612211336121ad606461219f600660008781526020019081526020016000206001015487613de190919063ffffffff16565b613e6790919063ffffffff16565b600584815481106121ba57fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613eb19092919063ffffffff16565b61228d60066000838152602001908152602001600020600101546004600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154613d5190919063ffffffff16565b6004600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506127af565b60016004600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154141561254d5760066000828152602001908152602001600020600201544210156123d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612475336124116064612403600660008781526020019081526020016000206003015487613de190919063ffffffff16565b613e6790919063ffffffff16565b6005848154811061241e57fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613eb19092919063ffffffff16565b6124f160066000838152602001908152602001600020600301546004600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154613d5190919063ffffffff16565b6004600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506127ae565b60026004600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015414156127ad576006600082815260200190815260200160002060040154421015612635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b6126d9336126756064612667600660008781526020019081526020016000206005015487613de190919063ffffffff16565b613e6790919063ffffffff16565b6005848154811061268257fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613eb19092919063ffffffff16565b61275560066000838152602001908152602001600020600501546004600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154613d5190919063ffffffff16565b6004600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055505b5b5b426004600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005018190555061286e60016004600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154613d5190919063ffffffff16565b6004600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555050506001808190555050565b6000806128e8600184613d0790919063ffffffff16565b9050600581815481106128f757fe5b90600052602060002090600e0201600a0154915050919050565b6004602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160149054906101000a900460ff16908060020154908060030154908060040154908060050154908060060154908060070154908060080160009054906101000a900460ff1690508a565b6000806000806004600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160149054906101000a900460ff166004600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546004600089815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015493509350935093509193509193565b600080612b55600184613d0790919063ffffffff16565b905060058181548110612b6457fe5b90600052602060002090600e0201600c0154915050919050565b612b86611da9565b612bf8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612c1c611d80565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c9957600080fd5b505afa158015612cad573d6000803e3d6000fd5b505050506040513d6020811015612cc357600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612d3d57600080fd5b505af1158015612d51573d6000803e3d6000fd5b505050506040513d6020811015612d6757600080fd5b81019080805190602001909291905050505050565b60026001541415612df5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000612e13600186613d0790919063ffffffff16565b9050600260058281548110612e2457fe5b90600052602060002090600e0201600301541415612fbc5760003387604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401828152602001925050506040516020818303038152906040528051906020012090506000612ea982613f69565b905060018187878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612f08573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16612f30611d80565b73ffffffffffffffffffffffffffffffffffffffff1614612fb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6f776e65722073686f756c64207369676e20707572636861736520696e666f0081525060200191505060405180910390fd5b50505b60058181548110612fc957fe5b90600052602060002090600e0201600101544210158015613008575060058181548110612ff257fe5b90600052602060002090600e0201600201544211155b61307a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b6130853386886115ea565b6130f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642075736572000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000349050613162816004600089815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154613d5190919063ffffffff16565b6004600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506002600583815481106131c857fe5b90600052602060002090600e020160030154141561348657685150ae84a8cdf000008710156132c057600582815481106131fe57fe5b90600052602060002090600e0201600501546004600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156132bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061458b6022913960400191505060405180910390fd5b613481565b685150ae84a8cdf0000087101580156132e1575068a2a15d09519be0000087105b156133b557600582815481106132f357fe5b90600052602060002090600e0201600601546004600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156133b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806145486022913960400191505060405180910390fd5b613480565b600582815481106133c257fe5b90600052602060002090600e0201600701546004600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154111561347f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806145ad6022913960400191505060405180910390fd5b5b5b613682565b60016005838154811061349557fe5b90600052602060002090600e020160030154141561359957600582815481106134ba57fe5b90600052602060002090600e0201600601546004600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301541115613594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f696e76616c6964206d6178696d756d20636f6e7472696275746500000000000081525060200191505060405180910390fd5b613681565b600582815481106135a657fe5b90600052602060002090600e0201600701546004600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301541115613680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f696e76616c6964206d6178696d756d20636f6e7472696275746500000000000081525060200191505060405180910390fd5b5b5b60006136cf670de0b6b3a76400006136c1600586815481106136a057fe5b90600052602060002090600e0201600b015485613de190919063ffffffff16565b613e6790919063ffffffff16565b905060006136dc88611322565b9050600584815481106136eb57fe5b90600052602060002090600e0201600901548111613771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f49444f20736f6c64206f7574000000000000000000000000000000000000000081525060200191505060405180910390fd5b818110156137e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f49444f20736f6c64206f7574000000000000000000000000000000000000000081525060200191505060405180910390fd5b61384d82600460008b815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154613d5190919063ffffffff16565b600460008a815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506138d582600586815481106138b557fe5b90600052602060002090600e0201600c0154613d5190919063ffffffff16565b600585815481106138e257fe5b90600052602060002090600e0201600c018190555050505050600180819055505050505050565b6000806000806000806000613928600189613d0790919063ffffffff16565b90506006600082815260200190815260200160002060000154600660008381526020019081526020016000206001015460066000848152602001908152602001600020600201546006600085815260200190815260200160002060030154600660008681526020019081526020016000206004015460066000878152602001908152602001600020600501549650965096509650965096505091939550919395565b6139d2611da9565b613a44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b816004600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160146101000a81548160ff021916908315150217905550806004600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080160006101000a81548160ff02191690831515021790555050505050565b613b28611da9565b613b9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000861115613bbf578560066000838152602001908152602001600020600001819055505b6000871115613be4578660066000838152602001908152602001600020600101819055505b6000841115613c09578360066000838152602001908152602001600020600201819055505b6000851115613c2e578460066000838152602001908152602001600020600301819055505b6000821115613c53578160066000838152602001908152602001600020600401819055505b6000831115613c78578260066000838152602001908152602001600020600501819055505b50505050505050565b613c89611da9565b613cfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b613d0481613fc1565b50565b6000613d4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614105565b905092915050565b600080828401905083811015613dcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600080831415613df45760009050613e61565b6000828402905082848281613e0557fe5b0414613e5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061456a6021913960400191505060405180910390fd5b809150505b92915050565b6000613ea983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506141c5565b905092915050565b613f648363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061428b565b505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614047576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806145226026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008383111582906141b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561417757808201518184015260208101905061415c565b50505050905090810190601f1680156141a45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290614271576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561423657808201518184015260208101905061421b565b50505050905090810190601f1680156142635780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161427d57fe5b049050809150509392505050565b6142aa8273ffffffffffffffffffffffffffffffffffffffff166144d6565b61431c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b6020831061436b5780518252602082019150602081019050602083039250614348565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146143cd576040519150601f19603f3d011682016040523d82523d6000602084013e6143d2565b606091505b50915091508161444a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b6000815111156144d05780806020019051602081101561446957600080fd5b81019080805190602001909291905050506144cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806145cf602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561451857506000801b8214155b9250505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373696e76616c6964206d6178696d756d20707572636861736520666f72207469657232536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77696e76616c6964206d6178696d756d20707572636861736520666f72207469657231696e76616c6964206d6178696d756d20707572636861736520666f722074696572335361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220f4288d8ec076c6c77fda502c1961ccc61b936ef5033a8f3876416a71b469812964736f6c63430006020033

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


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.