ETH Price: $2,508.80 (-5.54%)

Contract

0x1D6B585caCF421DFE3BE66D73FB8EE141e3db6F1
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim210888152024-10-31 23:09:234 hrs ago1730416163IN
0x1D6B585c...41e3db6F1
0 ETH0.000858497.87766598
Claim210888102024-10-31 23:08:234 hrs ago1730416103IN
0x1D6B585c...41e3db6F1
0 ETH0.001333438.16399609
Claim210884832024-10-31 22:02:355 hrs ago1730412155IN
0x1D6B585c...41e3db6F1
0 ETH0.000880378.05821922
Claim210884132024-10-31 21:48:355 hrs ago1730411315IN
0x1D6B585c...41e3db6F1
0 ETH0.001089358.05281148
Claim210881662024-10-31 20:59:116 hrs ago1730408351IN
0x1D6B585c...41e3db6F1
0 ETH0.002679718.98182616
Claim210849642024-10-31 10:17:2317 hrs ago1730369843IN
0x1D6B585c...41e3db6F1
0 ETH0.0012139111.13905163
Claim210786192024-10-30 13:00:4738 hrs ago1730293247IN
0x1D6B585c...41e3db6F1
0 ETH0.0022502318.3220136
Claim210762662024-10-30 5:06:3546 hrs ago1730264795IN
0x1D6B585c...41e3db6F1
0 ETH0.0020149315.072114
Claim210762172024-10-30 4:56:4746 hrs ago1730264207IN
0x1D6B585c...41e3db6F1
0 ETH0.0018703811.24711222
Claim210757982024-10-30 3:32:352 days ago1730259155IN
0x1D6B585c...41e3db6F1
0 ETH0.0020177712.01869789
Claim210757672024-10-30 3:26:232 days ago1730258783IN
0x1D6B585c...41e3db6F1
0 ETH0.0014114311.55755011
Claim210749042024-10-30 0:33:112 days ago1730248391IN
0x1D6B585c...41e3db6F1
0 ETH0.001450727.57263516
Claim210700402024-10-29 8:16:592 days ago1730189819IN
0x1D6B585c...41e3db6F1
0 ETH0.001274558.81696357
Claim210695342024-10-29 6:34:352 days ago1730183675IN
0x1D6B585c...41e3db6F1
0 ETH0.0017630414.91880034
Claim210695252024-10-29 6:32:472 days ago1730183567IN
0x1D6B585c...41e3db6F1
0 ETH0.0017939213.26121209
Claim210624472024-10-28 6:49:353 days ago1730098175IN
0x1D6B585c...41e3db6F1
0 ETH0.000767697.59519442
Claim210619602024-10-28 5:11:113 days ago1730092271IN
0x1D6B585c...41e3db6F1
0 ETH0.000534194.88952388
Claim210619542024-10-28 5:09:593 days ago1730092199IN
0x1D6B585c...41e3db6F1
0 ETH0.000545355.0042336
Claim210609602024-10-28 1:49:594 days ago1730080199IN
0x1D6B585c...41e3db6F1
0 ETH0.000669466.62338499
Claim210596612024-10-27 21:29:234 days ago1730064563IN
0x1D6B585c...41e3db6F1
0 ETH0.002104667.05438861
Claim210478092024-10-26 5:48:235 days ago1729921703IN
0x1D6B585c...41e3db6F1
0 ETH0.000556084.40108032
Claim210477912024-10-26 5:44:475 days ago1729921487IN
0x1D6B585c...41e3db6F1
0 ETH0.000388413.55518556
Claim210400462024-10-25 3:49:596 days ago1729828199IN
0x1D6B585c...41e3db6F1
0 ETH0.000782194.55933158
Claim210359432024-10-24 14:05:237 days ago1729778723IN
0x1D6B585c...41e3db6F1
0 ETH0.0022666918.91307246
Claim210328652024-10-24 3:47:357 days ago1729741655IN
0x1D6B585c...41e3db6F1
0 ETH0.0014426114.27254276
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
210888152024-10-31 23:09:234 hrs ago1730416163
0x1D6B585c...41e3db6F1
0 ETH
210888152024-10-31 23:09:234 hrs ago1730416163
0x1D6B585c...41e3db6F1
0 ETH
210888152024-10-31 23:09:234 hrs ago1730416163
0x1D6B585c...41e3db6F1
0 ETH
210888102024-10-31 23:08:234 hrs ago1730416103
0x1D6B585c...41e3db6F1
0 ETH
210888102024-10-31 23:08:234 hrs ago1730416103
0x1D6B585c...41e3db6F1
0 ETH
210888102024-10-31 23:08:234 hrs ago1730416103
0x1D6B585c...41e3db6F1
0 ETH
210884832024-10-31 22:02:355 hrs ago1730412155
0x1D6B585c...41e3db6F1
0 ETH
210884832024-10-31 22:02:355 hrs ago1730412155
0x1D6B585c...41e3db6F1
0 ETH
210884832024-10-31 22:02:355 hrs ago1730412155
0x1D6B585c...41e3db6F1
0 ETH
210884832024-10-31 22:02:355 hrs ago1730412155
0x1D6B585c...41e3db6F1
0 ETH
210884132024-10-31 21:48:355 hrs ago1730411315
0x1D6B585c...41e3db6F1
0 ETH
210884132024-10-31 21:48:355 hrs ago1730411315
0x1D6B585c...41e3db6F1
0 ETH
210884132024-10-31 21:48:355 hrs ago1730411315
0x1D6B585c...41e3db6F1
0 ETH
210881662024-10-31 20:59:116 hrs ago1730408351
0x1D6B585c...41e3db6F1
0 ETH
210881662024-10-31 20:59:116 hrs ago1730408351
0x1D6B585c...41e3db6F1
0 ETH
210881662024-10-31 20:59:116 hrs ago1730408351
0x1D6B585c...41e3db6F1
0 ETH
210849642024-10-31 10:17:2317 hrs ago1730369843
0x1D6B585c...41e3db6F1
0 ETH
210849642024-10-31 10:17:2317 hrs ago1730369843
0x1D6B585c...41e3db6F1
0 ETH
210849642024-10-31 10:17:2317 hrs ago1730369843
0x1D6B585c...41e3db6F1
0 ETH
210786192024-10-30 13:00:4738 hrs ago1730293247
0x1D6B585c...41e3db6F1
0 ETH
210786192024-10-30 13:00:4738 hrs ago1730293247
0x1D6B585c...41e3db6F1
0 ETH
210786192024-10-30 13:00:4738 hrs ago1730293247
0x1D6B585c...41e3db6F1
0 ETH
210762662024-10-30 5:06:3546 hrs ago1730264795
0x1D6B585c...41e3db6F1
0 ETH
210762662024-10-30 5:06:3546 hrs ago1730264795
0x1D6B585c...41e3db6F1
0 ETH
210762662024-10-30 5:06:3546 hrs ago1730264795
0x1D6B585c...41e3db6F1
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EsgSHIPV2

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 300 runs

Other Settings:
default evmVersion
File 1 of 3 : EsgSHIPV2.sol
pragma solidity >=0.5.16;
pragma experimental ABIEncoderV2;

import "./EIP20Interface.sol";
import "./SafeMath.sol";

contract EsgSHIPV2{
    using SafeMath for uint256;
    /// @notice ESG token
    EIP20Interface public esg;

    /// @notice Emitted when referral set invitee
    event SetInvitee(address inviteeAddress);

    /// @notice Emitted when owner set referral
    event SetInviteeByOwner(address referralAddress);

    /// @notice Emitted when ESG is invest  
    event EsgInvest(address account, uint amount, uint month, bool useInterest);

    /// @notice Emitted when ESG is invest by owner  
    event EsgInvestByOwner(address account, uint amount, uint month, uint starttime, uint endtime);

    /// @notice Emitted when ESG is withdrawn 
    event EsgWithdraw(address account, uint amount);

    /// @notice Emitted when ESG is claimed 
    event EsgClaimed(address account, uint amount);

    /// @notice Emitted when change referral info
    event EsgChangeReferrerInfo(address referralAddress, address inviteeAddress, address newInviteeAddress);

    /// @notice Emitted when change Lock info
    event EsgChangeLockInfo(address _user, uint256 _amount, uint256 _start, uint256 _end, uint256 _month, uint256 i);

    struct Lock {
        uint256 amount;
        uint256 start;
        uint256 end;
        uint256 month;
    }

    mapping(uint256 => uint256) public lockRates;

    mapping(address => Lock[]) public locks;

    mapping(address => uint256) public interests;

    address public owner;

    modifier onlyOwner() {
        require(msg.sender == owner, "Only owner can call this function.");
        _;
    }

    struct Referrer {
        address[] referrals;
        uint256 totalInvestment;
        bool dynamicReward;
    }

    mapping(address => Referrer) public referrers;

    struct User {
        address referrer_addr;
    }

    mapping (address => User) public referrerlist;

    uint256 public referralThreshold = 3000 * 1e18;

    uint256 public dynamicRewardThreshold = 100000 * 1e18;

    uint256 public onetimeRewardPercentage = 7;

    uint256 public dynamicRewardPercentage = 4;

    uint256 public dynamicRewardPercentageEvery = 10;

    uint256 public burnPercentage = 5;

    uint256 public total_deposited;

    uint256 public total_user;

    bool public allow_get_esg = true;

    constructor(address esgAddress) public {
        owner = msg.sender;
        lockRates[9] = 50;
        lockRates[12] = 60;
        lockRates[18] = 100;
        esg = EIP20Interface(esgAddress);
    }

    function setLockRate(uint256 _months, uint256 _rate) public onlyOwner {
        lockRates[_months] = _rate;
    }

    function setReferralThreshold(uint256 _amount) public onlyOwner {
        referralThreshold = _amount;
    }

    function setDynamicRewardThreshold(uint256 _amount) public onlyOwner {
        dynamicRewardThreshold = _amount;
    }

    function setOnetimeRewardPercentage(uint256 _percentage) public onlyOwner {
        onetimeRewardPercentage = _percentage;
    }

    function setDynamicRewardPercentage(uint256 _percentage) public onlyOwner {
        dynamicRewardPercentage = _percentage;
    }

    function setDynamicRewardPercentageEvery(uint256 _percentage) public onlyOwner {
        dynamicRewardPercentageEvery = _percentage;
    }

    function setBurnPercentage(uint256 _percentage) public onlyOwner {
        burnPercentage = _percentage;
    }

    function setInvitee(address inviteeAddress) public returns (bool) {
        require(inviteeAddress != address(0), "inviteeAddress cannot be 0x0.");

        User storage user = referrerlist[inviteeAddress];
        require(user.referrer_addr == address(0), "This account had been invited!");

        Lock[] storage referrerLocks = locks[msg.sender];
        require(referrerLocks.length > 0, "Referrer has no locked amount.");

        uint256 referrerAmount = 0;

        for (uint256 i = 0; i < referrerLocks.length; i++) {
            Lock storage lock = referrerLocks[i];
            referrerAmount += lock.amount;
        }

        require(referrerAmount >= referralThreshold,"Referrer has no referral qualification.");

        Lock[] storage inviteeLocks = locks[inviteeAddress];
        require(inviteeLocks.length == 0, "This account had staked!");

        Referrer storage referrer = referrers[msg.sender];
        referrer.referrals.push(inviteeAddress);

        User storage _user = referrerlist[inviteeAddress];
        _user.referrer_addr = msg.sender;

        emit SetInvitee(inviteeAddress);
        return true;   
    }

    function setInviteeByOwner(address referrerAddress, address[] memory inviteeAddress) public onlyOwner returns (bool) {
        require(referrerAddress != address(0), "referrerAddress cannot be 0x0.");
        require(inviteeAddress.length > 0, "inviteeAddress cannot be 0.");

        Referrer storage referrer = referrers[referrerAddress];
        referrer.referrals = inviteeAddress;

        for(uint256 i = 0; i < inviteeAddress.length; i++){
            address _inviteeAddress = inviteeAddress[i];
            User storage _user = referrerlist[_inviteeAddress];
            if(_user.referrer_addr == address(0)){
                _user.referrer_addr = referrerAddress;
            }
        }

        emit SetInviteeByOwner(referrerAddress);
        return true;   
    }

    function getInviteelist(address referrerAddress) public view returns (address[] memory) {
        require(referrerAddress != address(0), "referrerAddress cannot be 0x0.");
        Referrer storage referrer = referrers[referrerAddress];
        return referrer.referrals;
    }

    function getReferrer(address inviteeAddress) public view returns (address) {
        require(inviteeAddress != address(0), "inviteeAddress cannot be 0x0.");
        User storage user = referrerlist[inviteeAddress];
        return user.referrer_addr;
    }

    function invest(uint256 _months, uint256 _amount, bool _useInterest) public returns (bool) {
        require(allow_get_esg == true, "No invest allowed!");
        require(lockRates[_months] > 0, "Invalid lock period.");
        require(_amount > 0, "Invalid amount.");

        if (_useInterest) {
            uint256 interest = calculateInterest(msg.sender);
            require(interest >= _amount, "Insufficient interest.");
            interests[msg.sender] -= _amount;
        } else {
            esg.transferFrom(msg.sender, address(this), _amount);
        }

        locks[msg.sender].push(
            Lock(
                _amount,
                block.timestamp,
                block.timestamp + _months * 30 days,
                _months
            )
        );

        total_deposited = total_deposited + _amount;
        total_user = total_user + 1;
            
        User storage user = referrerlist[msg.sender];

        if(user.referrer_addr != address(0)){
            referrers[user.referrer_addr].totalInvestment += _amount;

            if (referrers[user.referrer_addr].totalInvestment >= dynamicRewardThreshold) {
                referrers[user.referrer_addr].dynamicReward = true;
            }
            uint256 onetimeTotalReward = _amount.mul(lockRates[_months]).div(100).mul(onetimeRewardPercentage).div(100);
            uint256 onetimeReward = onetimeTotalReward.div(12).mul(_months);
            esg.transfer(user.referrer_addr, onetimeReward);
        }

        emit EsgInvest(msg.sender, _amount, _months, _useInterest);
        return true;
    }

    function investByOwner(uint256 start, uint256 end, uint256 _amount, uint256 month, address inviteeAddress) public onlyOwner returns (bool) {
        require(start > 0, "start cannot be 0.");
        require(end > 0, "start cannot be 0.");
        require(_amount > 0, "Invalid amount.");
        require(month > 0, "month cannot be 0.");
        require(inviteeAddress != address(0), "inviteeAddress cannot be 0x0.");

        locks[inviteeAddress].push(
            Lock(
                _amount,
                start,
                end,
                month
            )
        );

        total_deposited = total_deposited + _amount;
        total_user = total_user + 1;
            
        User storage user = referrerlist[inviteeAddress];

        if(user.referrer_addr != address(0)){
            referrers[user.referrer_addr].totalInvestment += _amount;

            if (referrers[user.referrer_addr].totalInvestment >= dynamicRewardThreshold) {
                referrers[user.referrer_addr].dynamicReward = true;
            }
        }

        emit EsgInvestByOwner(inviteeAddress, _amount, month, start, end);
        return true;
    }

    function withdraw() public returns (bool) {
        require(allow_get_esg == true, "No withdrawal allowed!");
        Lock[] storage userLocks = locks[msg.sender];
        require(userLocks.length > 0, "No locked amount.");

        uint256 totalAmount = 0;
        uint256 index = 0;
        uint256 totalInterest = interests[msg.sender];

        while (index < userLocks.length) {
            Lock storage lock = userLocks[index];
            if (block.timestamp >= lock.end) {
                totalAmount += lock.amount;
                userLocks[index] = userLocks[userLocks.length - 1];
                userLocks.pop();
                uint256 interest = (block.timestamp.sub(lock.start)).mul(lock.amount).mul(lockRates[lock.month]).div(100).div(360).div(86400);
                if (interest > 0) {
                    totalInterest += interest;
                    lock.start = block.timestamp;
                    totalAmount += totalInterest;
                }
            } else {
                index++;
            }
        }

        require(totalAmount > 0, "No amount to withdraw.");

        esg.transfer(msg.sender, totalAmount);

        interests[msg.sender] = 0;
        total_deposited -= totalAmount;

        User storage user = referrerlist[msg.sender];

        if (user.referrer_addr != address(0)) {
            referrers[user.referrer_addr].totalInvestment -= totalAmount;

            if (referrers[user.referrer_addr].totalInvestment < dynamicRewardThreshold) {
                referrers[user.referrer_addr].dynamicReward = false;
            }
        }

        uint256 userAmount = 0;

        for (uint256 i = 0; i < userLocks.length; i++) {
            Lock storage lock = userLocks[i];
            userAmount += lock.amount;
        }

        if (userAmount < referralThreshold) {
            Referrer storage referrer = referrers[msg.sender];
            if(referrer.referrals.length > 0){
                for(uint256 i = 0; i < referrer.referrals.length; i++){
                    address invitee_add = referrer.referrals[i];
                    delete referrerlist[invitee_add];
                }
            }
            delete referrers[msg.sender].referrals;
        }

        emit EsgWithdraw(msg.sender, totalAmount); 
        return true;
    }

    function claim() public returns (bool) {
        require(allow_get_esg == true, "No claim allowed!");
        Lock[] storage userLocks = locks[msg.sender];
        require(userLocks.length > 0, "No locked amount.");

        uint256 totalInterest = interests[msg.sender];

        for (uint256 i = 0; i < userLocks.length; i++) {
            Lock storage lock = userLocks[i];
            uint256 interest = (block.timestamp.sub(lock.start)).mul(lock.amount).mul(lockRates[lock.month]).div(100).div(360).div(86400);
            if (interest > 0) {
                totalInterest += interest;
                lock.start = block.timestamp;
            }
        }

        require(totalInterest > 0, "No interest to claim.");

        interests[msg.sender] = 0;

        uint256 burnAmount = totalInterest.mul(burnPercentage).div(1000);
        esg.transfer(address(esg), burnAmount);
        totalInterest -= burnAmount;

        esg.transfer(msg.sender, totalInterest);

        Referrer storage referrer = referrers[msg.sender];
        User storage user = referrerlist[msg.sender];

        if (user.referrer_addr != address(0)) {
            uint256 dynamicRewardEvery = totalInterest.mul(dynamicRewardPercentageEvery).div(100);
            esg.transfer(user.referrer_addr, dynamicRewardEvery);
            if (referrers[user.referrer_addr].dynamicReward) {
                uint256 dynamicReward = totalInterest.mul(dynamicRewardPercentage).div(100);
                esg.transfer(user.referrer_addr, dynamicReward);
            }
        }

        emit EsgClaimed (msg.sender, totalInterest); 
        return true;
    }

    function calculateInterest(address _user) public view returns (uint256) {
        Lock[] storage userLocks = locks[_user];
        if (userLocks.length == 0) {
            return 0;
        }
        uint256 totalInterest = interests[_user];

        for (uint256 i = 0; i < userLocks.length; i++) {
            Lock storage lock = userLocks[i];
            uint256 interest = (block.timestamp.sub(lock.start)).mul(lock.amount).mul(lockRates[lock.month]).div(100).div(360).div(86400);
            if (interest > 0) {
                totalInterest += interest;
            }
        }

        return totalInterest;
    }

    function getLockInfo(address _user) public view returns (
            uint256[] memory,
            uint256[] memory,
            uint256[] memory,
            uint256[] memory,
            uint256[] memory
        )
    {
        Lock[] storage userLocks = locks[_user];
                uint256 length = userLocks.length;

        uint256[] memory amounts = new uint256[](length);
        uint256[] memory starts = new uint256[](length);
        uint256[] memory ends = new uint256[](length);
        uint256[] memory rates = new uint256[](length);
        uint256[] memory interest = new uint256[](length);

        for (uint256 i = 0; i < length; i++) {
            Lock storage lock = userLocks[i];
            amounts[i] = lock.amount;
            starts[i] = lock.start;
            ends[i] = lock.end;
            rates[i] = lockRates[lock.month];
            interest[i] = (block.timestamp.sub(lock.start)).mul(lock.amount).mul(lockRates[lock.month]).div(100).div(360).div(86400);
        }

        return (amounts, starts, ends, rates, interest);
    }

    function changeReferrerInfo(address referralAddress, address inviteeAddress, address newInviteeAddress) public onlyOwner returns (bool) {
        require(referralAddress != address(0), "referralAddress cannot be 0x0.");
        require(inviteeAddress != address(0), "inviteeAddress cannot be 0x0.");
        require(newInviteeAddress != address(0), "newInviteeAddress cannot be 0x0.");

        Referrer storage referrer = referrers[referralAddress];
        if(referrer.referrals.length > 0){
            for(uint256 i = 0; i < referrer.referrals.length; i++){
                address invitee_add = referrer.referrals[i];
                if(inviteeAddress == invitee_add){
                    referrer.referrals[i] = newInviteeAddress;
                    break;
                }
            }
        }

        delete referrerlist[inviteeAddress];
        User storage _user = referrerlist[newInviteeAddress];
        _user.referrer_addr = referralAddress;

        emit EsgChangeReferrerInfo(referralAddress, inviteeAddress, newInviteeAddress);
        return true;
    }

    function changeLockInfo(address _user, uint256 _amount, uint256 _start, uint256 _end, uint256 _month, uint256 i) public onlyOwner returns (bool) {
        require(_user != address(0), "_user cannot be 0x0.");
        Lock storage userLocks = locks[_user][i];
        userLocks.amount = _amount;
        userLocks.start = _start;
        userLocks.end = _end;
        userLocks.month = _month;

        emit EsgChangeLockInfo(_user, _amount, _start, _end, _month, i);
        return true;
    }

    function close() public onlyOwner {
        allow_get_esg = false;
    }

    function open() public onlyOwner {
        allow_get_esg = true;
    }

    function transferOwnership(address newOwner) onlyOwner public {
        if (newOwner != address(0)) {
        owner = newOwner;
      }
    }
}

File 2 of 3 : SafeMath.sol
pragma solidity ^0.5.16;

// From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/Math.sol
// Subject to the MIT license.

/**
 * @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 addition of two unsigned integers, reverting with custom message on overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, errorMessage);

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on underflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot underflow.
     */
    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 multiplication of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b, string memory errorMessage) 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, errorMessage);

        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.
     */
    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.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    /**
   * @dev gives square root of given x.
   */
  function sqrt(uint256 x) internal pure returns(uint256 y) {
        uint256 z = ((add(x, 1)) / 2);
        y = x;
        while (z < y) {
            y = z;
            z = ((add((x / z), z)) / 2);
        }
  }

  /**
   * @dev gives square. multiplies x by x
   */
  function sq(uint256 x) internal pure returns(uint256) {
       return (mul(x, x));
  }

  /**
   * @dev x to the power of y
   */
  function pwr(uint256 x, uint256 y) internal pure returns(uint256) {
    if (x == 0)
      return (0);
    else if (y == 0)
      return (1);
    else {
      uint256 z = x;
      for (uint256 i = 1; i < y; i++)
        z = mul(z, x);
      return (z);
    }
  }
}

File 3 of 3 : EIP20Interface.sol
pragma solidity ^0.5.16;

/**
 * @title ERC 20 Token Standard Interface
 *  https://eips.ethereum.org/EIPS/eip-20
 */
interface EIP20Interface {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

    /**
      * @notice Get the total number of tokens in circulation
      * @return The supply of tokens
      */
    function totalSupply() external view returns (uint256);

    /**
     * @notice Gets the balance of the specified address
     * @param owner The address from which the balance will be retrieved
     * @return The balance
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
      * @notice Transfer `amount` tokens from `msg.sender` to `dst`
      * @param dst The address of the destination account
      * @param amount The number of tokens to transfer
      * @return Whether or not the transfer succeeded
      */
    function transfer(address dst, uint256 amount) external returns (bool success);

    /**
      * @notice Transfer `amount` tokens from `src` to `dst`
      * @param src The address of the source account
      * @param dst The address of the destination account
      * @param amount The number of tokens to transfer
      * @return Whether or not the transfer succeeded
      */
    function transferFrom(address src, address dst, uint256 amount) external returns (bool success);

    /**
      * @notice Approve `spender` to transfer up to `amount` from `src`
      * @dev This will overwrite the approval amount for `spender`
      *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
      * @param spender The address of the account which may transfer tokens
      * @param amount The number of tokens that are approved (-1 means infinite)
      * @return Whether or not the approval succeeded
      */
    function approve(address spender, uint256 amount) external returns (bool success);

    /**
      * @notice Get the current allowance from `owner` for `spender`
      * @param owner The address of the account which owns the tokens to be spent
      * @param spender The address of the account which may transfer tokens
      * @return The number of tokens allowed to be spent (-1 means infinite)
      */
    function allowance(address owner, address spender) external view returns (uint256 remaining);

    event Transfer(address indexed from, address indexed to, uint256 amount);
    event Approval(address indexed owner, address indexed spender, uint256 amount);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"esgAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_start","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_end","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_month","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"i","type":"uint256"}],"name":"EsgChangeLockInfo","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"referralAddress","type":"address"},{"indexed":false,"internalType":"address","name":"inviteeAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newInviteeAddress","type":"address"}],"name":"EsgChangeReferrerInfo","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EsgClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"month","type":"uint256"},{"indexed":false,"internalType":"bool","name":"useInterest","type":"bool"}],"name":"EsgInvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"month","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"starttime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endtime","type":"uint256"}],"name":"EsgInvestByOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EsgWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"inviteeAddress","type":"address"}],"name":"SetInvitee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"referralAddress","type":"address"}],"name":"SetInviteeByOwner","type":"event"},{"constant":true,"inputs":[],"name":"allow_get_esg","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"burnPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"calculateInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_end","type":"uint256"},{"internalType":"uint256","name":"_month","type":"uint256"},{"internalType":"uint256","name":"i","type":"uint256"}],"name":"changeLockInfo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"referralAddress","type":"address"},{"internalType":"address","name":"inviteeAddress","type":"address"},{"internalType":"address","name":"newInviteeAddress","type":"address"}],"name":"changeReferrerInfo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"close","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dynamicRewardPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dynamicRewardPercentageEvery","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dynamicRewardThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"esg","outputs":[{"internalType":"contract EIP20Interface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"referrerAddress","type":"address"}],"name":"getInviteelist","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getLockInfo","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[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"inviteeAddress","type":"address"}],"name":"getReferrer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"interests","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_months","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_useInterest","type":"bool"}],"name":"invest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"month","type":"uint256"},{"internalType":"address","name":"inviteeAddress","type":"address"}],"name":"investByOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lockRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"locks","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"},{"internalType":"uint256","name":"month","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"onetimeRewardPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"open","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrerlist","outputs":[{"internalType":"address","name":"referrer_addr","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrers","outputs":[{"internalType":"uint256","name":"totalInvestment","type":"uint256"},{"internalType":"bool","name":"dynamicReward","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"setBurnPercentage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"setDynamicRewardPercentage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"setDynamicRewardPercentageEvery","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setDynamicRewardThreshold","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"inviteeAddress","type":"address"}],"name":"setInvitee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"referrerAddress","type":"address"},{"internalType":"address[]","name":"inviteeAddress","type":"address[]"}],"name":"setInviteeByOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_months","type":"uint256"},{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setLockRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"setOnetimeRewardPercentage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setReferralThreshold","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"total_deposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"total_user","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405268a2a15d09519be00000600790815569152d02c7e14af68000006008556009556004600a908155600b556005600c55600f805460ff191660011790553480156200004d57600080fd5b50604051620031973803806200319783398101604081905262000070916200012d565b60048054336001600160a01b031991821617909155600160205260327f74a5fbcb419ab7dbacbb2c92a4e163730f0da5c72b911deecf4f05a6b327d0a455603c7f23bf72df16f8335be9a3eddfb5ef1c739b12847d13a384ec83f578699d38eb89556012600090815260647f40165e7164257b249280bf839a50283d248062ed7b0e6d8820cb6c506bfcf7d35580549091166001600160a01b039290921691909117905562000182565b8051620001278162000168565b92915050565b6000602082840312156200014057600080fd5b60006200014e84846200011a565b949350505050565b60006001600160a01b03821662000127565b620001738162000156565b81146200017f57600080fd5b50565b61300580620001926000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80637c82391311610130578063c3f0d327116100b8578063e11932cf1161007c578063e11932cf14610496578063e9920181146104a9578063f01f20df146104bc578063f2fde38b146104c4578063fcfff16f146104d757610232565b8063c3f0d3271461044b578063cac065221461045e578063d604fbfd14610473578063dada7aff1461047b578063de560cca1461048e57610232565b8063a9859627116100ff578063a9859627146103dc578063ad82c254146103ef578063b425f80214610402578063b7ee446d14610425578063beafe3571461043857610232565b80637c8239131461039b5780638da5cb5b146103ae578063a129beba146103b6578063a30baee0146103c957610232565b806343d726d6116101be5780634fa77a48116101825780634fa77a481461034c5780635d91ba791461035f57806365ab4477146103675780636935a3491461036f5780637238ccdb1461037757610232565b806343d726d6146102f15780634706f9c9146102fb5780634a3b68cc146103035780634a9fefc7146103245780634e71d92d1461034457610232565b80633160c339116102055780633160c339146102a657806336d8a893146102b95780633bfe596d146102d95780633ccfd60b146102e157806340912990146102e957610232565b80630ef440461461023757806322d5c4e41461026057806324411d5f146102805780632e11930414610293575b600080fd5b61024a610245366004612256565b6104df565b6040516102579190612e7b565b60405180910390f35b61027361026e36600461242d565b6104f1565b6040516102579190612cde565b61027361028e3660046122c9565b610882565b61024a6102a13660046123f0565b6109d7565b6102736102b436600461234b565b6109e9565b6102cc6102c7366004612256565b610add565b6040516102579190612c6c565b61024a610b7f565b610273610b85565b61024a610f94565b6102f9610f9a565b005b61024a610fd0565b610316610311366004612256565b610fd6565b604051610257929190612e89565b610337610332366004612256565b610ff5565b6040516102579190612b14565b61027361103c565b61027361035a366004612256565b61147a565b61024a61163a565b61024a611640565b61024a611646565b61038a610385366004612256565b61164c565b604051610257959493929190612c7d565b6102736103a936600461227c565b61188e565b610337611a63565b6102f96103c43660046123f0565b611a72565b6102f96103d73660046123f0565b611aa1565b6102f96103ea3660046123f0565b611ad0565b6102f96103fd3660046123f0565b611aff565b61041561041036600461231b565b611b2e565b6040516102579493929190612ea4565b6102f96104333660046123f0565b611b71565b6102f961044636600461240e565b611ba0565b6102f96104593660046123f0565b611bdc565b610466611c0b565b6040516102579190612cec565b610273611c1a565b610273610489366004612470565b611c23565b61024a611e3a565b61024a6104a4366004612256565b611e40565b6103376104b7366004612256565b611f17565b61024a611f32565b6102f96104d2366004612256565b611f38565b6102f9611f90565b60036020526000908152604090205481565b600f5460009060ff1615156001146105245760405162461bcd60e51b815260040161051b90612d9b565b60405180910390fd5b60008481526001602052604090205461054f5760405162461bcd60e51b815260040161051b90612e2b565b6000831161056f5760405162461bcd60e51b815260040161051b90612d0b565b81156105be57600061058033611e40565b9050838110156105a25760405162461bcd60e51b815260040161051b90612e6b565b5033600090815260036020526040902080548490039055610646565b6000546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906105f290339030908890600401612b22565b602060405180830381600087803b15801561060c57600080fd5b505af1158015610620573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061064491908101906123d2565b505b33600081815260026020818152604080842081516080810183528981524281850181815262278d008d02909101828501908152606083018d8152845460018181018755958a52878a209451600490910290940193845591518385015551958201959095559351600390940193909355600d805489019055600e805490930190925592825260069092522080546001600160a01b0316156108385780546001600160a01b0390811660009081526005602052604080822060019081018054890190556008548554909416835291200154106107425780546001600160a01b03166000908152600560205260409020600201805460ff191660011790555b6000610792606461077a600954610786606461077a600160008e8152602001908152602001600020548c611fc990919063ffffffff16565b9063ffffffff61200316565b9063ffffffff611fc916565b905060006107ab8761078684600c63ffffffff61200316565b600054845460405163a9059cbb60e01b81529293506001600160a01b039182169263a9059cbb926107e29216908590600401612bc2565b602060405180830381600087803b1580156107fc57600080fd5b505af1158015610810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061083491908101906123d2565b5050505b7fb48e053ac948dab1b057e1de25bbb39ec896b21993328bab6d99fcbab29672263385878660405161086d9493929190612b65565b60405180910390a160019150505b9392505050565b6004546000906001600160a01b031633146108af5760405162461bcd60e51b815260040161051b90612d3b565b6001600160a01b0383166108d55760405162461bcd60e51b815260040161051b90612d8b565b60008251116108f65760405162461bcd60e51b815260040161051b90612e0b565b6001600160a01b0383166000908152600560209081526040909120835190916109239183918601906120ea565b5060005b835181101561099357600084828151811061093e57fe5b6020908102919091018101516001600160a01b03808216600090815260069093526040909220805491935091166109895780546001600160a01b0319166001600160a01b0388161781555b5050600101610927565b507f06f3518339fb540f090b0cb0d1f5a88467a417d64e9a6b51f0d814189bd2ca3e846040516109c39190612b14565b60405180910390a160019150505b92915050565b60016020526000908152604090205481565b6004546000906001600160a01b03163314610a165760405162461bcd60e51b815260040161051b90612d3b565b6001600160a01b038716610a3c5760405162461bcd60e51b815260040161051b90612e3b565b6001600160a01b0387166000908152600260205260408120805484908110610a6057fe5b600091825260209091206004909102018781556001810187905560028101869055600381018590556040519091507f810a7b2564f5e2fea29fc3b9f423eaf217f6e01e2372774d833f577cba3354d390610ac5908a908a908a908a908a908a90612c12565b60405180910390a160019150505b9695505050505050565b60606001600160a01b038216610b055760405162461bcd60e51b815260040161051b90612d8b565b6001600160a01b0382166000908152600560209081526040918290208054835181840281018401909452808452909291839190830182828015610b7157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b53575b50505050509150505b919050565b60095481565b600f5460009060ff161515600114610baf5760405162461bcd60e51b815260040161051b90612deb565b3360009081526002602052604090208054610bdc5760405162461bcd60e51b815260040161051b90612dcb565b3360009081526003602052604081205481905b8354821015610d46576000848381548110610c0657fe5b9060005260206000209060040201905080600201544210610d39578054855494019385906000198101908110610c3857fe5b9060005260206000209060040201858481548110610c5257fe5b90600052602060002090600402016000820154816000015560018201548160010155600282015481600201556003820154816003015590505084805480610c9557fe5b6001900381819060005260206000209060040201600080820160009055600182016000905560028201600090556003820160009055505090556000610d1c6201518061077a61016861077a606461077a600160008a600301548152602001908152602001600020546107868a600001546107868c600101544261204590919063ffffffff16565b90508015610d335742600183015591820193840193915b50610d40565b6001909201915b50610bef565b60008311610d665760405162461bcd60e51b815260040161051b90612d7b565b60005460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610d989033908790600401612b4a565b602060405180830381600087803b158015610db257600080fd5b505af1158015610dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dea91908101906123d2565b50336000908152600360209081526040808320839055600d805487900390556006909152902080546001600160a01b031615610e815780546001600160a01b0390811660009081526005602052604080822060019081018054899003905560085485549094168352912001541015610e815780546001600160a01b03166000908152600560205260409020600201805460ff191690555b6000805b8654811015610ebb576000878281548110610e9c57fe5b6000918252602090912060049091020154929092019150600101610e85565b50600754811015610f4d57336000908152600560205260409020805415610f335760005b8154811015610f31576000826000018281548110610ef957fe5b60009182526020808320909101546001600160a01b03168252600690526040902080546001600160a01b031916905550600101610edf565b505b336000908152600560205260408120610f4b9161214f565b505b7fbf6adc7ec30806901c5d6f55c580f0c6ae10fb8a01556ce59b99bfdae43c55e53386604051610f7e929190612b4a565b60405180910390a1600196505050505050505b90565b600e5481565b6004546001600160a01b03163314610fc45760405162461bcd60e51b815260040161051b90612d3b565b600f805460ff19169055565b600b5481565b6005602052600090815260409020600181015460029091015460ff1682565b60006001600160a01b03821661101d5760405162461bcd60e51b815260040161051b90612dfb565b506001600160a01b039081166000908152600660205260409020541690565b600f5460009060ff1615156001146110665760405162461bcd60e51b815260040161051b90612e5b565b33600090815260026020526040902080546110935760405162461bcd60e51b815260040161051b90612dcb565b33600090815260036020526040812054905b82548110156111375760008382815481106110bc57fe5b90600052602060002090600402019050600061111a6201518061077a61016861077a606461077a600160008a600301548152602001908152602001600020546107868a600001546107868c600101544261204590919063ffffffff16565b9050801561112d57426001830155928301925b50506001016110a5565b50600081116111585760405162461bcd60e51b815260040161051b90612d6b565b336000908152600360205260408120819055600c54611186906103e89061077a90859063ffffffff611fc916565b60005460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb906111b99083908590600401612bc2565b602060405180830381600087803b1580156111d357600080fd5b505af11580156111e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061120b91908101906123d2565b5060005460405163a9059cbb60e01b815292829003926001600160a01b039091169063a9059cbb906112439033908690600401612b4a565b602060405180830381600087803b15801561125d57600080fd5b505af1158015611271573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061129591908101906123d2565b50336000908152600560209081526040808320600690925290912080546001600160a01b0316156114355760006112dc606461077a600b5488611fc990919063ffffffff16565b600054835460405163a9059cbb60e01b81529293506001600160a01b039182169263a9059cbb926113139216908590600401612bc2565b602060405180830381600087803b15801561132d57600080fd5b505af1158015611341573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061136591908101906123d2565b5081546001600160a01b031660009081526005602052604090206002015460ff16156114335760006113a7606461077a600a5489611fc990919063ffffffff16565b600054845460405163a9059cbb60e01b81529293506001600160a01b039182169263a9059cbb926113de9216908590600401612bc2565b602060405180830381600087803b1580156113f857600080fd5b505af115801561140c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061143091908101906123d2565b50505b505b7f33fc5cbbab043468d397f2d10aea907885d46e24cdc8758828f08deb1738cf143385604051611466929190612b4a565b60405180910390a160019550505050505090565b60006001600160a01b0382166114a25760405162461bcd60e51b815260040161051b90612dfb565b6001600160a01b0380831660009081526006602052604090208054909116156114dd5760405162461bcd60e51b815260040161051b90612e4b565b336000908152600260205260409020805461150a5760405162461bcd60e51b815260040161051b90612d4b565b6000805b825481101561154457600083828154811061152557fe5b600091825260209091206004909102015492909201915060010161150e565b506007548110156115675760405162461bcd60e51b815260040161051b90612d1b565b6001600160a01b038516600090815260026020526040902080541561159e5760405162461bcd60e51b815260040161051b90612d5b565b33600081815260056020908152604080832080546001810182558185528385200180546001600160a01b038d166001600160a01b031991821681179092559085526006909352928190208054909216909317815591519091907f5460efa9aaef49adcbdec085b22993bea41d8d5abd3124de8faeea893ce9593a90611624908a90612b14565b60405180910390a1506001979650505050505050565b60085481565b60075481565b600a5481565b6001600160a01b0381166000908152600260209081526040918290208054835181815281840281019093019093526060928392839283928392839082801561169e578160200160208202803883390190505b5090506060826040519080825280602002602001820160405280156116cd578160200160208202803883390190505b5090506060836040519080825280602002602001820160405280156116fc578160200160208202803883390190505b50905060608460405190808252806020026020018201604052801561172b578160200160208202803883390190505b50905060608560405190808252806020026020018201604052801561175a578160200160208202803883390190505b50905060005b8681101561187957600088828154811061177657fe5b90600052602060002090600402019050806000015487838151811061179757fe5b60200260200101818152505080600101548683815181106117b457fe5b60200260200101818152505080600201548583815181106117d157fe5b60200260200101818152505060016000826003015481526020019081526020016000205484838151811061180157fe5b6020026020010181815250506118596201518061077a61016861077a606461077a60016000896003015481526020019081526020016000205461078689600001546107868b600101544261204590919063ffffffff16565b83838151811061186557fe5b602090810291909101015250600101611760565b50939c929b5090995097509095509350505050565b6004546000906001600160a01b031633146118bb5760405162461bcd60e51b815260040161051b90612d3b565b6001600160a01b0384166118e15760405162461bcd60e51b815260040161051b90612ddb565b6001600160a01b0383166119075760405162461bcd60e51b815260040161051b90612dfb565b6001600160a01b03821661192d5760405162461bcd60e51b815260040161051b90612d2b565b6001600160a01b03841660009081526005602052604090208054156119da5760005b81548110156119d857600082600001828154811061196957fe5b6000918252602090912001546001600160a01b03908116915086168114156119cf578483600001838154811061199b57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550506119d8565b5060010161194f565b505b6001600160a01b0384811660009081526006602052604080822080546001600160a01b0319908116909155868416835291819020805490921692881692909217815590517ff55dbaff7c5a77f4fe7c4ab048af1d720e433c55bf608dabc5931cf39003c92a90611a4f90889088908890612b9a565b60405180910390a150600195945050505050565b6004546001600160a01b031681565b6004546001600160a01b03163314611a9c5760405162461bcd60e51b815260040161051b90612d3b565b600955565b6004546001600160a01b03163314611acb5760405162461bcd60e51b815260040161051b90612d3b565b600855565b6004546001600160a01b03163314611afa5760405162461bcd60e51b815260040161051b90612d3b565b600a55565b6004546001600160a01b03163314611b295760405162461bcd60e51b815260040161051b90612d3b565b600755565b60026020528160005260406000208181548110611b4757fe5b60009182526020909120600490910201805460018201546002830154600390930154919450925084565b6004546001600160a01b03163314611b9b5760405162461bcd60e51b815260040161051b90612d3b565b600b55565b6004546001600160a01b03163314611bca5760405162461bcd60e51b815260040161051b90612d3b565b60009182526001602052604090912055565b6004546001600160a01b03163314611c065760405162461bcd60e51b815260040161051b90612d3b565b600c55565b6000546001600160a01b031681565b600f5460ff1681565b6004546000906001600160a01b03163314611c505760405162461bcd60e51b815260040161051b90612d3b565b60008611611c705760405162461bcd60e51b815260040161051b90612e1b565b60008511611c905760405162461bcd60e51b815260040161051b90612e1b565b60008411611cb05760405162461bcd60e51b815260040161051b90612d0b565b60008311611cd05760405162461bcd60e51b815260040161051b90612dab565b6001600160a01b038216611cf65760405162461bcd60e51b815260040161051b90612dfb565b6001600160a01b03808316600081815260026020818152604080842081516080810183528b81528084018e81528184018e8152606083018d8152845460018181018755958a52878a209451600490910290940193845591518385015551958201959095559351600390940193909355600d80548b019055600e8054909301909255928252600690925220805490911615611dec5780546001600160a01b03908116600090815260056020526040808220600190810180548a019055600854855490941683529120015410611dec5780546001600160a01b03166000908152600560205260409020600201805460ff191660011790555b7f1ee0b0302c2690702de1a72318614711ca5a237039c7afad048441a8c556b8888386868a8a604051611e23959493929190612bd0565b60405180910390a160019150505b95945050505050565b600d5481565b6001600160a01b03811660009081526002602052604081208054611e68576000915050610b7a565b6001600160a01b038316600090815260036020526040812054905b8254811015611f0f576000838281548110611e9a57fe5b906000526020600020906004020190506000611ef86201518061077a61016861077a606461077a600160008a600301548152602001908152602001600020546107868a600001546107868c600101544261204590919063ffffffff16565b90508015611f0557928301925b5050600101611e83565b509392505050565b6006602052600090815260409020546001600160a01b031681565b600c5481565b6004546001600160a01b03163314611f625760405162461bcd60e51b815260040161051b90612d3b565b6001600160a01b03811615611f8d57600480546001600160a01b0319166001600160a01b0383161790555b50565b6004546001600160a01b03163314611fba5760405162461bcd60e51b815260040161051b90612d3b565b600f805460ff19166001179055565b600082611fd8575060006109d1565b82820282848281611fe557fe5b041461087b5760405162461bcd60e51b815260040161051b90612dbb565b600061087b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612087565b600061087b83836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f77008152506120be565b600081836120a85760405162461bcd60e51b815260040161051b9190612cfa565b5060008385816120b457fe5b0495945050505050565b600081848411156120e25760405162461bcd60e51b815260040161051b9190612cfa565b505050900390565b82805482825590600052602060002090810192821561213f579160200282015b8281111561213f57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061210a565b5061214b92915061216d565b5090565b5080546000825590600052602060002090810190611f8d9190612191565b610f9191905b8082111561214b5780546001600160a01b0319168155600101612173565b610f9191905b8082111561214b5760008155600101612197565b80356109d181612f9c565b600082601f8301126121c757600080fd5b81356121da6121d582612f00565b612ed9565b915081818352602084019350602081019050838560208402820111156121ff57600080fd5b60005b8381101561222b578161221588826121ab565b8452506020928301929190910190600101612202565b5050505092915050565b80356109d181612fb0565b80516109d181612fb0565b80356109d181612fb9565b60006020828403121561226857600080fd5b600061227484846121ab565b949350505050565b60008060006060848603121561229157600080fd5b600061229d86866121ab565b93505060206122ae868287016121ab565b92505060406122bf868287016121ab565b9150509250925092565b600080604083850312156122dc57600080fd5b60006122e885856121ab565b925050602083013567ffffffffffffffff81111561230557600080fd5b612311858286016121b6565b9150509250929050565b6000806040838503121561232e57600080fd5b600061233a85856121ab565b92505060206123118582860161224b565b60008060008060008060c0878903121561236457600080fd5b600061237089896121ab565b965050602061238189828a0161224b565b955050604061239289828a0161224b565b94505060606123a389828a0161224b565b93505060806123b489828a0161224b565b92505060a06123c589828a0161224b565b9150509295509295509295565b6000602082840312156123e457600080fd5b60006122748484612240565b60006020828403121561240257600080fd5b6000612274848461224b565b6000806040838503121561242157600080fd5b600061233a858561224b565b60008060006060848603121561244257600080fd5b600061244e868661224b565b935050602061245f8682870161224b565b92505060406122bf86828701612235565b600080600080600060a0868803121561248857600080fd5b6000612494888861224b565b95505060206124a58882890161224b565b94505060406124b68882890161224b565b93505060606124c78882890161224b565b92505060806124d8888289016121ab565b9150509295509295909350565b60006124f18383612514565b505060200190565b60006124f18383612b0b565b61250e81612f50565b82525050565b61250e81612f34565b600061252882612f27565b6125328185612f2b565b935061253d83612f21565b8060005b8381101561256b57815161255588826124e5565b975061256083612f21565b925050600101612541565b509495945050505050565b600061258182612f27565b61258b8185612f2b565b935061259683612f21565b8060005b8381101561256b5781516125ae88826124f9565b97506125b983612f21565b92505060010161259a565b61250e81612f3f565b61250e81612f57565b60006125e182612f27565b6125eb8185612f2b565b93506125fb818560208601612f62565b61260481612f92565b9093019392505050565b600061261b600f83612f2b565b6e24b73b30b634b21030b6b7bab73a1760891b815260200192915050565b6000612646602783612f2b565b7f526566657272657220686173206e6f20726566657272616c207175616c69666981526631b0ba34b7b71760c91b602082015260400192915050565b600061268f602083612f2b565b7f6e6577496e7669746565416464726573732063616e6e6f74206265203078302e815260200192915050565b60006126c8602283612f2b565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f815261371760f11b602082015260400192915050565b600061270c601e83612f2b565b7f526566657272657220686173206e6f206c6f636b656420616d6f756e742e0000815260200192915050565b6000612745601883612f2b565b7f54686973206163636f756e7420686164207374616b6564210000000000000000815260200192915050565b600061277e601583612f2b565b7f4e6f20696e74657265737420746f20636c61696d2e0000000000000000000000815260200192915050565b60006127b7601683612f2b565b7f4e6f20616d6f756e7420746f2077697468647261772e00000000000000000000815260200192915050565b60006127f0601e83612f2b565b7f7265666572726572416464726573732063616e6e6f74206265203078302e0000815260200192915050565b6000612829601283612f2b565b714e6f20696e7665737420616c6c6f7765642160701b815260200192915050565b6000612857601283612f2b565b7136b7b73a341031b0b73737ba10313290181760711b815260200192915050565b6000612885602183612f2b565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b60006128c8601183612f2b565b702737903637b1b5b2b21030b6b7bab73a1760791b815260200192915050565b60006128f5601e83612f2b565b7f726566657272616c416464726573732063616e6e6f74206265203078302e0000815260200192915050565b600061292e601683612f2b565b7f4e6f207769746864726177616c20616c6c6f7765642100000000000000000000815260200192915050565b6000612967601d83612f2b565b7f696e7669746565416464726573732063616e6e6f74206265203078302e000000815260200192915050565b60006129a0601b83612f2b565b7f696e7669746565416464726573732063616e6e6f7420626520302e0000000000815260200192915050565b60006129d9601283612f2b565b7139ba30b93a1031b0b73737ba10313290181760711b815260200192915050565b6000612a07601483612f2b565b7f496e76616c6964206c6f636b20706572696f642e000000000000000000000000815260200192915050565b6000612a40601483612f2b565b7f5f757365722063616e6e6f74206265203078302e000000000000000000000000815260200192915050565b6000612a79601e83612f2b565b7f54686973206163636f756e7420686164206265656e20696e7669746564210000815260200192915050565b6000612ab2601183612f2b565b704e6f20636c61696d20616c6c6f7765642160781b815260200192915050565b6000612adf601683612f2b565b7f496e73756666696369656e7420696e7465726573742e00000000000000000000815260200192915050565b61250e81610f91565b602081016109d18284612514565b60608101612b308286612505565b612b3d6020830185612514565b6122746040830184612b0b565b60408101612b588285612505565b61087b6020830184612b0b565b60808101612b738287612505565b612b806020830186612b0b565b612b8d6040830185612b0b565b611e3160608301846125c4565b60608101612ba88286612514565b612bb56020830185612514565b6122746040830184612514565b60408101612b588285612514565b60a08101612bde8288612514565b612beb6020830187612b0b565b612bf86040830186612b0b565b612c056060830185612b0b565b610ad36080830184612b0b565b60c08101612c208289612514565b612c2d6020830188612b0b565b612c3a6040830187612b0b565b612c476060830186612b0b565b612c546080830185612b0b565b612c6160a0830184612b0b565b979650505050505050565b6020808252810161087b818461251d565b60a08082528101612c8e8188612576565b90508181036020830152612ca28187612576565b90508181036040830152612cb68186612576565b90508181036060830152612cca8185612576565b90508181036080830152612c618184612576565b602081016109d182846125c4565b602081016109d182846125cd565b6020808252810161087b81846125d6565b602080825281016109d18161260e565b602080825281016109d181612639565b602080825281016109d181612682565b602080825281016109d1816126bb565b602080825281016109d1816126ff565b602080825281016109d181612738565b602080825281016109d181612771565b602080825281016109d1816127aa565b602080825281016109d1816127e3565b602080825281016109d18161281c565b602080825281016109d18161284a565b602080825281016109d181612878565b602080825281016109d1816128bb565b602080825281016109d1816128e8565b602080825281016109d181612921565b602080825281016109d18161295a565b602080825281016109d181612993565b602080825281016109d1816129cc565b602080825281016109d1816129fa565b602080825281016109d181612a33565b602080825281016109d181612a6c565b602080825281016109d181612aa5565b602080825281016109d181612ad2565b602081016109d18284612b0b565b60408101612e978285612b0b565b61087b60208301846125c4565b60808101612eb28287612b0b565b612ebf6020830186612b0b565b612ecc6040830185612b0b565b611e316060830184612b0b565b60405181810167ffffffffffffffff81118282101715612ef857600080fd5b604052919050565b600067ffffffffffffffff821115612f1757600080fd5b5060209081020190565b60200190565b5190565b90815260200190565b60006109d182612f44565b151590565b6001600160a01b031690565b60006109d1825b60006109d182612f34565b60005b83811015612f7d578181015183820152602001612f65565b83811115612f8c576000848401525b50505050565b601f01601f191690565b612fa581612f34565b8114611f8d57600080fd5b612fa581612f3f565b612fa581610f9156fea365627a7a72315820fed87fda2380e5f00156eb5cbdd768834798dabafb2a0b21e3508e87decfcf696c6578706572696d656e74616cf564736f6c6343000510004000000000000000000000000020cd2e7ec8f5d8b337fe46a4f565ccef1561b9a9

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102325760003560e01c80637c82391311610130578063c3f0d327116100b8578063e11932cf1161007c578063e11932cf14610496578063e9920181146104a9578063f01f20df146104bc578063f2fde38b146104c4578063fcfff16f146104d757610232565b8063c3f0d3271461044b578063cac065221461045e578063d604fbfd14610473578063dada7aff1461047b578063de560cca1461048e57610232565b8063a9859627116100ff578063a9859627146103dc578063ad82c254146103ef578063b425f80214610402578063b7ee446d14610425578063beafe3571461043857610232565b80637c8239131461039b5780638da5cb5b146103ae578063a129beba146103b6578063a30baee0146103c957610232565b806343d726d6116101be5780634fa77a48116101825780634fa77a481461034c5780635d91ba791461035f57806365ab4477146103675780636935a3491461036f5780637238ccdb1461037757610232565b806343d726d6146102f15780634706f9c9146102fb5780634a3b68cc146103035780634a9fefc7146103245780634e71d92d1461034457610232565b80633160c339116102055780633160c339146102a657806336d8a893146102b95780633bfe596d146102d95780633ccfd60b146102e157806340912990146102e957610232565b80630ef440461461023757806322d5c4e41461026057806324411d5f146102805780632e11930414610293575b600080fd5b61024a610245366004612256565b6104df565b6040516102579190612e7b565b60405180910390f35b61027361026e36600461242d565b6104f1565b6040516102579190612cde565b61027361028e3660046122c9565b610882565b61024a6102a13660046123f0565b6109d7565b6102736102b436600461234b565b6109e9565b6102cc6102c7366004612256565b610add565b6040516102579190612c6c565b61024a610b7f565b610273610b85565b61024a610f94565b6102f9610f9a565b005b61024a610fd0565b610316610311366004612256565b610fd6565b604051610257929190612e89565b610337610332366004612256565b610ff5565b6040516102579190612b14565b61027361103c565b61027361035a366004612256565b61147a565b61024a61163a565b61024a611640565b61024a611646565b61038a610385366004612256565b61164c565b604051610257959493929190612c7d565b6102736103a936600461227c565b61188e565b610337611a63565b6102f96103c43660046123f0565b611a72565b6102f96103d73660046123f0565b611aa1565b6102f96103ea3660046123f0565b611ad0565b6102f96103fd3660046123f0565b611aff565b61041561041036600461231b565b611b2e565b6040516102579493929190612ea4565b6102f96104333660046123f0565b611b71565b6102f961044636600461240e565b611ba0565b6102f96104593660046123f0565b611bdc565b610466611c0b565b6040516102579190612cec565b610273611c1a565b610273610489366004612470565b611c23565b61024a611e3a565b61024a6104a4366004612256565b611e40565b6103376104b7366004612256565b611f17565b61024a611f32565b6102f96104d2366004612256565b611f38565b6102f9611f90565b60036020526000908152604090205481565b600f5460009060ff1615156001146105245760405162461bcd60e51b815260040161051b90612d9b565b60405180910390fd5b60008481526001602052604090205461054f5760405162461bcd60e51b815260040161051b90612e2b565b6000831161056f5760405162461bcd60e51b815260040161051b90612d0b565b81156105be57600061058033611e40565b9050838110156105a25760405162461bcd60e51b815260040161051b90612e6b565b5033600090815260036020526040902080548490039055610646565b6000546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906105f290339030908890600401612b22565b602060405180830381600087803b15801561060c57600080fd5b505af1158015610620573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061064491908101906123d2565b505b33600081815260026020818152604080842081516080810183528981524281850181815262278d008d02909101828501908152606083018d8152845460018181018755958a52878a209451600490910290940193845591518385015551958201959095559351600390940193909355600d805489019055600e805490930190925592825260069092522080546001600160a01b0316156108385780546001600160a01b0390811660009081526005602052604080822060019081018054890190556008548554909416835291200154106107425780546001600160a01b03166000908152600560205260409020600201805460ff191660011790555b6000610792606461077a600954610786606461077a600160008e8152602001908152602001600020548c611fc990919063ffffffff16565b9063ffffffff61200316565b9063ffffffff611fc916565b905060006107ab8761078684600c63ffffffff61200316565b600054845460405163a9059cbb60e01b81529293506001600160a01b039182169263a9059cbb926107e29216908590600401612bc2565b602060405180830381600087803b1580156107fc57600080fd5b505af1158015610810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061083491908101906123d2565b5050505b7fb48e053ac948dab1b057e1de25bbb39ec896b21993328bab6d99fcbab29672263385878660405161086d9493929190612b65565b60405180910390a160019150505b9392505050565b6004546000906001600160a01b031633146108af5760405162461bcd60e51b815260040161051b90612d3b565b6001600160a01b0383166108d55760405162461bcd60e51b815260040161051b90612d8b565b60008251116108f65760405162461bcd60e51b815260040161051b90612e0b565b6001600160a01b0383166000908152600560209081526040909120835190916109239183918601906120ea565b5060005b835181101561099357600084828151811061093e57fe5b6020908102919091018101516001600160a01b03808216600090815260069093526040909220805491935091166109895780546001600160a01b0319166001600160a01b0388161781555b5050600101610927565b507f06f3518339fb540f090b0cb0d1f5a88467a417d64e9a6b51f0d814189bd2ca3e846040516109c39190612b14565b60405180910390a160019150505b92915050565b60016020526000908152604090205481565b6004546000906001600160a01b03163314610a165760405162461bcd60e51b815260040161051b90612d3b565b6001600160a01b038716610a3c5760405162461bcd60e51b815260040161051b90612e3b565b6001600160a01b0387166000908152600260205260408120805484908110610a6057fe5b600091825260209091206004909102018781556001810187905560028101869055600381018590556040519091507f810a7b2564f5e2fea29fc3b9f423eaf217f6e01e2372774d833f577cba3354d390610ac5908a908a908a908a908a908a90612c12565b60405180910390a160019150505b9695505050505050565b60606001600160a01b038216610b055760405162461bcd60e51b815260040161051b90612d8b565b6001600160a01b0382166000908152600560209081526040918290208054835181840281018401909452808452909291839190830182828015610b7157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b53575b50505050509150505b919050565b60095481565b600f5460009060ff161515600114610baf5760405162461bcd60e51b815260040161051b90612deb565b3360009081526002602052604090208054610bdc5760405162461bcd60e51b815260040161051b90612dcb565b3360009081526003602052604081205481905b8354821015610d46576000848381548110610c0657fe5b9060005260206000209060040201905080600201544210610d39578054855494019385906000198101908110610c3857fe5b9060005260206000209060040201858481548110610c5257fe5b90600052602060002090600402016000820154816000015560018201548160010155600282015481600201556003820154816003015590505084805480610c9557fe5b6001900381819060005260206000209060040201600080820160009055600182016000905560028201600090556003820160009055505090556000610d1c6201518061077a61016861077a606461077a600160008a600301548152602001908152602001600020546107868a600001546107868c600101544261204590919063ffffffff16565b90508015610d335742600183015591820193840193915b50610d40565b6001909201915b50610bef565b60008311610d665760405162461bcd60e51b815260040161051b90612d7b565b60005460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610d989033908790600401612b4a565b602060405180830381600087803b158015610db257600080fd5b505af1158015610dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dea91908101906123d2565b50336000908152600360209081526040808320839055600d805487900390556006909152902080546001600160a01b031615610e815780546001600160a01b0390811660009081526005602052604080822060019081018054899003905560085485549094168352912001541015610e815780546001600160a01b03166000908152600560205260409020600201805460ff191690555b6000805b8654811015610ebb576000878281548110610e9c57fe5b6000918252602090912060049091020154929092019150600101610e85565b50600754811015610f4d57336000908152600560205260409020805415610f335760005b8154811015610f31576000826000018281548110610ef957fe5b60009182526020808320909101546001600160a01b03168252600690526040902080546001600160a01b031916905550600101610edf565b505b336000908152600560205260408120610f4b9161214f565b505b7fbf6adc7ec30806901c5d6f55c580f0c6ae10fb8a01556ce59b99bfdae43c55e53386604051610f7e929190612b4a565b60405180910390a1600196505050505050505b90565b600e5481565b6004546001600160a01b03163314610fc45760405162461bcd60e51b815260040161051b90612d3b565b600f805460ff19169055565b600b5481565b6005602052600090815260409020600181015460029091015460ff1682565b60006001600160a01b03821661101d5760405162461bcd60e51b815260040161051b90612dfb565b506001600160a01b039081166000908152600660205260409020541690565b600f5460009060ff1615156001146110665760405162461bcd60e51b815260040161051b90612e5b565b33600090815260026020526040902080546110935760405162461bcd60e51b815260040161051b90612dcb565b33600090815260036020526040812054905b82548110156111375760008382815481106110bc57fe5b90600052602060002090600402019050600061111a6201518061077a61016861077a606461077a600160008a600301548152602001908152602001600020546107868a600001546107868c600101544261204590919063ffffffff16565b9050801561112d57426001830155928301925b50506001016110a5565b50600081116111585760405162461bcd60e51b815260040161051b90612d6b565b336000908152600360205260408120819055600c54611186906103e89061077a90859063ffffffff611fc916565b60005460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb906111b99083908590600401612bc2565b602060405180830381600087803b1580156111d357600080fd5b505af11580156111e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061120b91908101906123d2565b5060005460405163a9059cbb60e01b815292829003926001600160a01b039091169063a9059cbb906112439033908690600401612b4a565b602060405180830381600087803b15801561125d57600080fd5b505af1158015611271573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061129591908101906123d2565b50336000908152600560209081526040808320600690925290912080546001600160a01b0316156114355760006112dc606461077a600b5488611fc990919063ffffffff16565b600054835460405163a9059cbb60e01b81529293506001600160a01b039182169263a9059cbb926113139216908590600401612bc2565b602060405180830381600087803b15801561132d57600080fd5b505af1158015611341573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061136591908101906123d2565b5081546001600160a01b031660009081526005602052604090206002015460ff16156114335760006113a7606461077a600a5489611fc990919063ffffffff16565b600054845460405163a9059cbb60e01b81529293506001600160a01b039182169263a9059cbb926113de9216908590600401612bc2565b602060405180830381600087803b1580156113f857600080fd5b505af115801561140c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061143091908101906123d2565b50505b505b7f33fc5cbbab043468d397f2d10aea907885d46e24cdc8758828f08deb1738cf143385604051611466929190612b4a565b60405180910390a160019550505050505090565b60006001600160a01b0382166114a25760405162461bcd60e51b815260040161051b90612dfb565b6001600160a01b0380831660009081526006602052604090208054909116156114dd5760405162461bcd60e51b815260040161051b90612e4b565b336000908152600260205260409020805461150a5760405162461bcd60e51b815260040161051b90612d4b565b6000805b825481101561154457600083828154811061152557fe5b600091825260209091206004909102015492909201915060010161150e565b506007548110156115675760405162461bcd60e51b815260040161051b90612d1b565b6001600160a01b038516600090815260026020526040902080541561159e5760405162461bcd60e51b815260040161051b90612d5b565b33600081815260056020908152604080832080546001810182558185528385200180546001600160a01b038d166001600160a01b031991821681179092559085526006909352928190208054909216909317815591519091907f5460efa9aaef49adcbdec085b22993bea41d8d5abd3124de8faeea893ce9593a90611624908a90612b14565b60405180910390a1506001979650505050505050565b60085481565b60075481565b600a5481565b6001600160a01b0381166000908152600260209081526040918290208054835181815281840281019093019093526060928392839283928392839082801561169e578160200160208202803883390190505b5090506060826040519080825280602002602001820160405280156116cd578160200160208202803883390190505b5090506060836040519080825280602002602001820160405280156116fc578160200160208202803883390190505b50905060608460405190808252806020026020018201604052801561172b578160200160208202803883390190505b50905060608560405190808252806020026020018201604052801561175a578160200160208202803883390190505b50905060005b8681101561187957600088828154811061177657fe5b90600052602060002090600402019050806000015487838151811061179757fe5b60200260200101818152505080600101548683815181106117b457fe5b60200260200101818152505080600201548583815181106117d157fe5b60200260200101818152505060016000826003015481526020019081526020016000205484838151811061180157fe5b6020026020010181815250506118596201518061077a61016861077a606461077a60016000896003015481526020019081526020016000205461078689600001546107868b600101544261204590919063ffffffff16565b83838151811061186557fe5b602090810291909101015250600101611760565b50939c929b5090995097509095509350505050565b6004546000906001600160a01b031633146118bb5760405162461bcd60e51b815260040161051b90612d3b565b6001600160a01b0384166118e15760405162461bcd60e51b815260040161051b90612ddb565b6001600160a01b0383166119075760405162461bcd60e51b815260040161051b90612dfb565b6001600160a01b03821661192d5760405162461bcd60e51b815260040161051b90612d2b565b6001600160a01b03841660009081526005602052604090208054156119da5760005b81548110156119d857600082600001828154811061196957fe5b6000918252602090912001546001600160a01b03908116915086168114156119cf578483600001838154811061199b57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550506119d8565b5060010161194f565b505b6001600160a01b0384811660009081526006602052604080822080546001600160a01b0319908116909155868416835291819020805490921692881692909217815590517ff55dbaff7c5a77f4fe7c4ab048af1d720e433c55bf608dabc5931cf39003c92a90611a4f90889088908890612b9a565b60405180910390a150600195945050505050565b6004546001600160a01b031681565b6004546001600160a01b03163314611a9c5760405162461bcd60e51b815260040161051b90612d3b565b600955565b6004546001600160a01b03163314611acb5760405162461bcd60e51b815260040161051b90612d3b565b600855565b6004546001600160a01b03163314611afa5760405162461bcd60e51b815260040161051b90612d3b565b600a55565b6004546001600160a01b03163314611b295760405162461bcd60e51b815260040161051b90612d3b565b600755565b60026020528160005260406000208181548110611b4757fe5b60009182526020909120600490910201805460018201546002830154600390930154919450925084565b6004546001600160a01b03163314611b9b5760405162461bcd60e51b815260040161051b90612d3b565b600b55565b6004546001600160a01b03163314611bca5760405162461bcd60e51b815260040161051b90612d3b565b60009182526001602052604090912055565b6004546001600160a01b03163314611c065760405162461bcd60e51b815260040161051b90612d3b565b600c55565b6000546001600160a01b031681565b600f5460ff1681565b6004546000906001600160a01b03163314611c505760405162461bcd60e51b815260040161051b90612d3b565b60008611611c705760405162461bcd60e51b815260040161051b90612e1b565b60008511611c905760405162461bcd60e51b815260040161051b90612e1b565b60008411611cb05760405162461bcd60e51b815260040161051b90612d0b565b60008311611cd05760405162461bcd60e51b815260040161051b90612dab565b6001600160a01b038216611cf65760405162461bcd60e51b815260040161051b90612dfb565b6001600160a01b03808316600081815260026020818152604080842081516080810183528b81528084018e81528184018e8152606083018d8152845460018181018755958a52878a209451600490910290940193845591518385015551958201959095559351600390940193909355600d80548b019055600e8054909301909255928252600690925220805490911615611dec5780546001600160a01b03908116600090815260056020526040808220600190810180548a019055600854855490941683529120015410611dec5780546001600160a01b03166000908152600560205260409020600201805460ff191660011790555b7f1ee0b0302c2690702de1a72318614711ca5a237039c7afad048441a8c556b8888386868a8a604051611e23959493929190612bd0565b60405180910390a160019150505b95945050505050565b600d5481565b6001600160a01b03811660009081526002602052604081208054611e68576000915050610b7a565b6001600160a01b038316600090815260036020526040812054905b8254811015611f0f576000838281548110611e9a57fe5b906000526020600020906004020190506000611ef86201518061077a61016861077a606461077a600160008a600301548152602001908152602001600020546107868a600001546107868c600101544261204590919063ffffffff16565b90508015611f0557928301925b5050600101611e83565b509392505050565b6006602052600090815260409020546001600160a01b031681565b600c5481565b6004546001600160a01b03163314611f625760405162461bcd60e51b815260040161051b90612d3b565b6001600160a01b03811615611f8d57600480546001600160a01b0319166001600160a01b0383161790555b50565b6004546001600160a01b03163314611fba5760405162461bcd60e51b815260040161051b90612d3b565b600f805460ff19166001179055565b600082611fd8575060006109d1565b82820282848281611fe557fe5b041461087b5760405162461bcd60e51b815260040161051b90612dbb565b600061087b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612087565b600061087b83836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f77008152506120be565b600081836120a85760405162461bcd60e51b815260040161051b9190612cfa565b5060008385816120b457fe5b0495945050505050565b600081848411156120e25760405162461bcd60e51b815260040161051b9190612cfa565b505050900390565b82805482825590600052602060002090810192821561213f579160200282015b8281111561213f57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061210a565b5061214b92915061216d565b5090565b5080546000825590600052602060002090810190611f8d9190612191565b610f9191905b8082111561214b5780546001600160a01b0319168155600101612173565b610f9191905b8082111561214b5760008155600101612197565b80356109d181612f9c565b600082601f8301126121c757600080fd5b81356121da6121d582612f00565b612ed9565b915081818352602084019350602081019050838560208402820111156121ff57600080fd5b60005b8381101561222b578161221588826121ab565b8452506020928301929190910190600101612202565b5050505092915050565b80356109d181612fb0565b80516109d181612fb0565b80356109d181612fb9565b60006020828403121561226857600080fd5b600061227484846121ab565b949350505050565b60008060006060848603121561229157600080fd5b600061229d86866121ab565b93505060206122ae868287016121ab565b92505060406122bf868287016121ab565b9150509250925092565b600080604083850312156122dc57600080fd5b60006122e885856121ab565b925050602083013567ffffffffffffffff81111561230557600080fd5b612311858286016121b6565b9150509250929050565b6000806040838503121561232e57600080fd5b600061233a85856121ab565b92505060206123118582860161224b565b60008060008060008060c0878903121561236457600080fd5b600061237089896121ab565b965050602061238189828a0161224b565b955050604061239289828a0161224b565b94505060606123a389828a0161224b565b93505060806123b489828a0161224b565b92505060a06123c589828a0161224b565b9150509295509295509295565b6000602082840312156123e457600080fd5b60006122748484612240565b60006020828403121561240257600080fd5b6000612274848461224b565b6000806040838503121561242157600080fd5b600061233a858561224b565b60008060006060848603121561244257600080fd5b600061244e868661224b565b935050602061245f8682870161224b565b92505060406122bf86828701612235565b600080600080600060a0868803121561248857600080fd5b6000612494888861224b565b95505060206124a58882890161224b565b94505060406124b68882890161224b565b93505060606124c78882890161224b565b92505060806124d8888289016121ab565b9150509295509295909350565b60006124f18383612514565b505060200190565b60006124f18383612b0b565b61250e81612f50565b82525050565b61250e81612f34565b600061252882612f27565b6125328185612f2b565b935061253d83612f21565b8060005b8381101561256b57815161255588826124e5565b975061256083612f21565b925050600101612541565b509495945050505050565b600061258182612f27565b61258b8185612f2b565b935061259683612f21565b8060005b8381101561256b5781516125ae88826124f9565b97506125b983612f21565b92505060010161259a565b61250e81612f3f565b61250e81612f57565b60006125e182612f27565b6125eb8185612f2b565b93506125fb818560208601612f62565b61260481612f92565b9093019392505050565b600061261b600f83612f2b565b6e24b73b30b634b21030b6b7bab73a1760891b815260200192915050565b6000612646602783612f2b565b7f526566657272657220686173206e6f20726566657272616c207175616c69666981526631b0ba34b7b71760c91b602082015260400192915050565b600061268f602083612f2b565b7f6e6577496e7669746565416464726573732063616e6e6f74206265203078302e815260200192915050565b60006126c8602283612f2b565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f815261371760f11b602082015260400192915050565b600061270c601e83612f2b565b7f526566657272657220686173206e6f206c6f636b656420616d6f756e742e0000815260200192915050565b6000612745601883612f2b565b7f54686973206163636f756e7420686164207374616b6564210000000000000000815260200192915050565b600061277e601583612f2b565b7f4e6f20696e74657265737420746f20636c61696d2e0000000000000000000000815260200192915050565b60006127b7601683612f2b565b7f4e6f20616d6f756e7420746f2077697468647261772e00000000000000000000815260200192915050565b60006127f0601e83612f2b565b7f7265666572726572416464726573732063616e6e6f74206265203078302e0000815260200192915050565b6000612829601283612f2b565b714e6f20696e7665737420616c6c6f7765642160701b815260200192915050565b6000612857601283612f2b565b7136b7b73a341031b0b73737ba10313290181760711b815260200192915050565b6000612885602183612f2b565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b60006128c8601183612f2b565b702737903637b1b5b2b21030b6b7bab73a1760791b815260200192915050565b60006128f5601e83612f2b565b7f726566657272616c416464726573732063616e6e6f74206265203078302e0000815260200192915050565b600061292e601683612f2b565b7f4e6f207769746864726177616c20616c6c6f7765642100000000000000000000815260200192915050565b6000612967601d83612f2b565b7f696e7669746565416464726573732063616e6e6f74206265203078302e000000815260200192915050565b60006129a0601b83612f2b565b7f696e7669746565416464726573732063616e6e6f7420626520302e0000000000815260200192915050565b60006129d9601283612f2b565b7139ba30b93a1031b0b73737ba10313290181760711b815260200192915050565b6000612a07601483612f2b565b7f496e76616c6964206c6f636b20706572696f642e000000000000000000000000815260200192915050565b6000612a40601483612f2b565b7f5f757365722063616e6e6f74206265203078302e000000000000000000000000815260200192915050565b6000612a79601e83612f2b565b7f54686973206163636f756e7420686164206265656e20696e7669746564210000815260200192915050565b6000612ab2601183612f2b565b704e6f20636c61696d20616c6c6f7765642160781b815260200192915050565b6000612adf601683612f2b565b7f496e73756666696369656e7420696e7465726573742e00000000000000000000815260200192915050565b61250e81610f91565b602081016109d18284612514565b60608101612b308286612505565b612b3d6020830185612514565b6122746040830184612b0b565b60408101612b588285612505565b61087b6020830184612b0b565b60808101612b738287612505565b612b806020830186612b0b565b612b8d6040830185612b0b565b611e3160608301846125c4565b60608101612ba88286612514565b612bb56020830185612514565b6122746040830184612514565b60408101612b588285612514565b60a08101612bde8288612514565b612beb6020830187612b0b565b612bf86040830186612b0b565b612c056060830185612b0b565b610ad36080830184612b0b565b60c08101612c208289612514565b612c2d6020830188612b0b565b612c3a6040830187612b0b565b612c476060830186612b0b565b612c546080830185612b0b565b612c6160a0830184612b0b565b979650505050505050565b6020808252810161087b818461251d565b60a08082528101612c8e8188612576565b90508181036020830152612ca28187612576565b90508181036040830152612cb68186612576565b90508181036060830152612cca8185612576565b90508181036080830152612c618184612576565b602081016109d182846125c4565b602081016109d182846125cd565b6020808252810161087b81846125d6565b602080825281016109d18161260e565b602080825281016109d181612639565b602080825281016109d181612682565b602080825281016109d1816126bb565b602080825281016109d1816126ff565b602080825281016109d181612738565b602080825281016109d181612771565b602080825281016109d1816127aa565b602080825281016109d1816127e3565b602080825281016109d18161281c565b602080825281016109d18161284a565b602080825281016109d181612878565b602080825281016109d1816128bb565b602080825281016109d1816128e8565b602080825281016109d181612921565b602080825281016109d18161295a565b602080825281016109d181612993565b602080825281016109d1816129cc565b602080825281016109d1816129fa565b602080825281016109d181612a33565b602080825281016109d181612a6c565b602080825281016109d181612aa5565b602080825281016109d181612ad2565b602081016109d18284612b0b565b60408101612e978285612b0b565b61087b60208301846125c4565b60808101612eb28287612b0b565b612ebf6020830186612b0b565b612ecc6040830185612b0b565b611e316060830184612b0b565b60405181810167ffffffffffffffff81118282101715612ef857600080fd5b604052919050565b600067ffffffffffffffff821115612f1757600080fd5b5060209081020190565b60200190565b5190565b90815260200190565b60006109d182612f44565b151590565b6001600160a01b031690565b60006109d1825b60006109d182612f34565b60005b83811015612f7d578181015183820152602001612f65565b83811115612f8c576000848401525b50505050565b601f01601f191690565b612fa581612f34565b8114611f8d57600080fd5b612fa581612f3f565b612fa581610f9156fea365627a7a72315820fed87fda2380e5f00156eb5cbdd768834798dabafb2a0b21e3508e87decfcf696c6578706572696d656e74616cf564736f6c63430005100040

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

00000000000000000000000020cd2e7ec8f5d8b337fe46a4f565ccef1561b9a9

-----Decoded View---------------
Arg [0] : esgAddress (address): 0x20cD2E7Ec8F5d8b337fe46a4F565Ccef1561b9a9

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000020cd2e7ec8f5d8b337fe46a4f565ccef1561b9a9


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  ]

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.