Contract 0x59e68d828ebfccbca51a8223f6a69ccba03b250f

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x59158b187a1addada5f116df69a5f4ae412f14f689f4a9575f778d59bc6658f0Approve130601142021-11-29 21:46:578 days 14 hrs ago0x3878a2c4b6767db09bf2255a69012f23f687099e IN  NanoEth: NETH Token0 BNB0.00007227
0xcbd91ac66925cf322c4b5f5bc5de6db82b7b6c78ea6f4e632f1c597d0d732e94Approve128260232021-11-21 5:43:4917 days 6 hrs ago0x4721f227c17b9827726d86647dbc921e546c45a5 IN  NanoEth: NETH Token0 BNB0.000265746
0xd22336e70c12687e42a5e51eb9e0ccc572aad21cfe2a3bf3a34840b391dbfdc6Approve127626342021-11-18 22:50:5119 days 12 hrs ago0xb9a3b19340d1058b5b4345267707c3f6586bf381 IN  NanoEth: NETH Token0 BNB0.00007227
0x658da8c47baf2249b81829c93220863ef58eacf0a668e6dee02881f07c44f6abApprove126865562021-11-16 3:40:4422 days 8 hrs ago0x153b991e92679742149043a4ed79a9024e20bbc4 IN  NanoEth: NETH Token0 BNB0.000086724
0x024809ee03af48d389ccd1a05ed3c3adfbc9df7f71b2c5ddf812d9724501f8dfApprove126601622021-11-15 4:26:3223 days 7 hrs ago0x6915b504d4439f9191fe43db22b1270942987ec0 IN  NanoEth: NETH Token0 BNB0.000221455
0xe2aa073f857f28c25fc282584ae7361e26e601f6188e4e374f9a45a50d9ddc99Approve124136622021-11-06 9:56:5432 days 1 hr ago0x29c96932857e9c97da7473cd22589880ed98c774 IN  NanoEth: NETH Token0 BNB0.00007227
0xc8534776504a6c5b49650ff29a2df8b37c14ae010fe79a0ad92bded7b3222d9bApprove121952962021-10-29 15:08:2239 days 20 hrs ago0x79a5af49d2fe49f7c85147f3494edcea1ee449b2 IN  NanoEth: NETH Token0 BNB0.000221455
0xea6584aae96c3637ab89da2eedda8208e47c55a44a708cc09907d8cd991efe1cApprove120848442021-10-25 18:00:2943 days 17 hrs ago0x816fb4211adda7a2e19bf7eb73cfe61166ad26fe IN  NanoEth: NETH Token0 BNB0.000221455
0xcc84d31d8b7c397e0ef2350a93cc9d45cd381e67abe4376f6b6b656c462e351dApprove120283772021-10-23 18:24:4345 days 17 hrs ago0x9f66f2b7f8fb8893b248369b6ce11b77a2d9e873 IN  NanoEth: NETH Token0 BNB0.000221455
0x9e14c93b54a46ab7cbcbd6541e7f94f401b0cd5c03d96b93f4dd7d93d461f067Transfer119878152021-10-22 8:17:2847 days 3 hrs ago0xfa8860258615b4a7fb520dd406381623a0abda12 IN  NanoEth: NETH Token0 BNB0.001533615
0x88b783b1866c04375b0e61049d49c2425e7b47ecf4906deb0aea9b29f0b1f46aTransfer119678022021-10-21 15:08:5747 days 20 hrs ago0xd68c374f84d55c4d079b13aa03692d11c15906bd IN  NanoEth: NETH Token0 BNB0.00092881
0x5b821529c4a6bd44c1bf2bc679b71ff389590947fb4df6611414838ea0929fe6Approve119422952021-10-20 17:25:2948 days 18 hrs ago0x02100194a72da4092500a2aa153e109b45a9f134 IN  NanoEth: NETH Token0 BNB0.000086724
0x21d10be2571b5e486f5b3831c263addaa65c7b10bbf3e50748d816e5632ecc04Approve118354572021-10-16 23:26:0552 days 12 hrs ago0x5f85559f9a2b07f8a5f49aaae170c072209d00d3 IN  NanoEth: NETH Token0 BNB0.000265746
0x6e6565d38739957439be3493e937421184eac4aba5f4091452f3fe2818780b88Approve117436612021-10-13 18:35:2255 days 17 hrs ago0x1dcfe8c0e21a1ec7843cc533a3495265eb959d96 IN  NanoEth: NETH Token0 BNB0.00007227
0xb762fa194c3f2bb576b1230c90633cc6a98342b376c7e1b85238d899bdae32e1Transfer117412802021-10-13 16:35:5155 days 19 hrs ago0x1dcfe8c0e21a1ec7843cc533a3495265eb959d96 IN  NanoEth: NETH Token0 BNB0.00012762
0xd4a5cceb1905bf65bef894acabbba69f27cd7f0433134af99a8bec260baedb1aApprove117412102021-10-13 16:32:2155 days 19 hrs ago0x1dcfe8c0e21a1ec7843cc533a3495265eb959d96 IN  NanoEth: NETH Token0 BNB0.000221455
0x517e6b2de756cf2414b1b1d576daa37a46feb58f842fce07a98f073dec736b3fApprove117242742021-10-13 2:00:3856 days 9 hrs ago0xf13c4e78f3846c2e6c1a645e6eb2ef33b796e8f7 IN  NanoEth: NETH Token0 BNB0.000265746
0x75ec281fd948b0743472552c6e311a19548ed662f0b550c241d28c9a3fbdb53bTransfer116932912021-10-12 0:04:1057 days 11 hrs ago0x6edfe624ca436a9617dcc068e36b5964eea23a73 IN  NanoEth: NETH Token0 BNB0.000154485
0x782c3844efcb787a5b0e512ae37f77ba1f9f043337f18aa1a28d268cd968948dApprove116827762021-10-11 14:37:5857 days 21 hrs ago0xac52f000fd3707c5a9f8d05d4c004ce0c3f7e407 IN  NanoEth: NETH Token0 BNB0.000221455
0xa010733db809f9ba5be9c77c4c69ff7a21a27f878ef27c3f65eb72684e06c429Approve116335552021-10-09 21:28:4459 days 14 hrs ago0x17a9aedc0d608620c8b535fda2d7a6816dc3d850 IN  NanoEth: NETH Token0 BNB0.000221455
0x85fdc1414b78e4a54c35c57f770f03f17933ae1118a8f5adc760bd3ef8036182Transfer116297242021-10-09 18:17:1159 days 17 hrs ago0x570df59184e78cb0d06f372933a6f58051b55183 IN  NanoEth: NETH Token0 BNB0.00153344
0x2c025c22d13da32e738033672e85c447a6f8d4c5d6975a3f8340fcf9fd2541ebAuthorize116296412021-10-09 18:13:0259 days 17 hrs agoNanoEth: Deployer IN  NanoEth: NETH Token0 BNB0.00021762
0x08fcc71adb0cce6bbb324ef0e010fd2e643a6889699efb8d4f4c4b6b30a38d9eTransfer116289102021-10-09 17:36:2759 days 18 hrs ago0x570df59184e78cb0d06f372933a6f58051b55183 IN  NanoEth: NETH Token0 BNB0.000154425
0x0ad606ac0e3dbb629f5a7a2bc47bc141a53aa36c17b3df3b38d9d5eb284c8763Approve116286872021-10-09 17:25:1859 days 18 hrs ago0x868b7326a9dab844644274ef084e27a6cd215a5a IN  NanoEth: NETH Token0 BNB0.000221455
0x0a63a2ae1a788043def5e4ad82e5c9863a6832534bf4beeede08555dbe94c045Transfer116280692021-10-09 16:54:2459 days 18 hrs ago0x8708e715ba7905065cc81ac8484ac38e7ffb43a2 IN  NanoEth: NETH Token0 BNB0.00092881
[ Download CSV Export 

OVERVIEW

NanoEth - A fair launched Ethereum rewarding token combining passive rewards, exciting P2E games, competitions and NFTs.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x6de52a09736b9eb871f9a3990945350bc643aab801e17e81e322e503615b586f115703862021-10-07 16:42:2261 days 19 hrs ago NanoEth: NETH TokenNanoEth: Deployer0.016874566889063385 BNB
0x6de52a09736b9eb871f9a3990945350bc643aab801e17e81e322e503615b586f115703862021-10-07 16:42:2261 days 19 hrs ago NanoEth: NETH Token 0x2cd08598fbb329a2148864fdc4644eede0911e170.016874566889063385 BNB
0x6de52a09736b9eb871f9a3990945350bc643aab801e17e81e322e503615b586f115703862021-10-07 16:42:2261 days 19 hrs ago PancakeSwap: Router v2 NanoEth: NETH Token0.050623700667190155 BNB
0x66c68ae5af2edc56c34c2664e9c674cdf69e6a5cbd6ab7a84d85fcc23e3ac605115238712021-10-06 1:53:2463 days 9 hrs ago NanoEth: NETH TokenNanoEth: Deployer0.017096888734309601 BNB
0x66c68ae5af2edc56c34c2664e9c674cdf69e6a5cbd6ab7a84d85fcc23e3ac605115238712021-10-06 1:53:2463 days 9 hrs ago NanoEth: NETH Token 0x2cd08598fbb329a2148864fdc4644eede0911e170.017096888734309601 BNB
0x66c68ae5af2edc56c34c2664e9c674cdf69e6a5cbd6ab7a84d85fcc23e3ac605115238712021-10-06 1:53:2463 days 9 hrs ago PancakeSwap: Router v2 NanoEth: NETH Token0.051290666202928805 BNB
0x4d6476136d70dca658d5c4bc1d157c2d8fbf479e4597ab07efbd0db02e3b2e9f115212612021-10-05 23:42:4563 days 12 hrs ago NanoEth: NETH TokenNanoEth: Deployer0.017323635220382235 BNB
0x4d6476136d70dca658d5c4bc1d157c2d8fbf479e4597ab07efbd0db02e3b2e9f115212612021-10-05 23:42:4563 days 12 hrs ago NanoEth: NETH Token 0x2cd08598fbb329a2148864fdc4644eede0911e170.017323635220382235 BNB
0x4d6476136d70dca658d5c4bc1d157c2d8fbf479e4597ab07efbd0db02e3b2e9f115212612021-10-05 23:42:4563 days 12 hrs ago PancakeSwap: Router v2 NanoEth: NETH Token0.051970905661146707 BNB
0x5171b08689c241a7d3f6d88e77e4354cf82be845489373f162c393a1bd99d162115083582021-10-05 12:56:2963 days 22 hrs ago NanoEth: NETH TokenNanoEth: Deployer0.017554924568738691 BNB
0x5171b08689c241a7d3f6d88e77e4354cf82be845489373f162c393a1bd99d162115083582021-10-05 12:56:2963 days 22 hrs ago NanoEth: NETH Token 0x2cd08598fbb329a2148864fdc4644eede0911e170.017554924568738691 BNB
0x5171b08689c241a7d3f6d88e77e4354cf82be845489373f162c393a1bd99d162115083582021-10-05 12:56:2963 days 22 hrs ago PancakeSwap: Router v2 NanoEth: NETH Token0.052664773706216073 BNB
0x6e704eeaedda3c42e61f37f2b0dc83c7489ecf75f9c3f4f513a870a3715abc09115066392021-10-05 11:30:3064 days 16 mins ago NanoEth: NETH TokenNanoEth: Deployer0.017790878976333557 BNB
0x6e704eeaedda3c42e61f37f2b0dc83c7489ecf75f9c3f4f513a870a3715abc09115066392021-10-05 11:30:3064 days 16 mins ago NanoEth: NETH Token 0x2cd08598fbb329a2148864fdc4644eede0911e170.017790878976333557 BNB
0x6e704eeaedda3c42e61f37f2b0dc83c7489ecf75f9c3f4f513a870a3715abc09115066392021-10-05 11:30:3064 days 16 mins ago PancakeSwap: Router v2 NanoEth: NETH Token0.053372636929000672 BNB
0xb49589697fb93aafdcc7bd1a65fd31b99ec6f36e7dd210dd74feedac59ef9995114332352021-10-02 22:09:2166 days 13 hrs ago NanoEth: NETH Token PancakeSwap: Router v20.021769318613916066 BNB
0xb49589697fb93aafdcc7bd1a65fd31b99ec6f36e7dd210dd74feedac59ef9995114332352021-10-02 22:09:2166 days 13 hrs ago NanoEth: NETH TokenNanoEth: Deployer0.043538637227832133 BNB
0xb49589697fb93aafdcc7bd1a65fd31b99ec6f36e7dd210dd74feedac59ef9995114332352021-10-02 22:09:2166 days 13 hrs ago NanoEth: NETH Token 0x2cd08598fbb329a2148864fdc4644eede0911e170.043538637227832133 BNB
0xb49589697fb93aafdcc7bd1a65fd31b99ec6f36e7dd210dd74feedac59ef9995114332352021-10-02 22:09:2166 days 13 hrs ago PancakeSwap: Router v2 NanoEth: NETH Token0.1306159116834964 BNB
0x2dce10ba7c27adb014bc332746c7fe404710e30583972cd8e0f44474e2435898114331532021-10-02 22:05:1566 days 13 hrs ago NanoEth: NETH Token PancakeSwap: Router v20.022193158022227958 BNB
0x2dce10ba7c27adb014bc332746c7fe404710e30583972cd8e0f44474e2435898114331532021-10-02 22:05:1566 days 13 hrs ago NanoEth: NETH TokenNanoEth: Deployer0.044386316044455917 BNB
0x2dce10ba7c27adb014bc332746c7fe404710e30583972cd8e0f44474e2435898114331532021-10-02 22:05:1566 days 13 hrs ago NanoEth: NETH Token 0x2cd08598fbb329a2148864fdc4644eede0911e170.044386316044455917 BNB
0x2dce10ba7c27adb014bc332746c7fe404710e30583972cd8e0f44474e2435898114331532021-10-02 22:05:1566 days 13 hrs ago PancakeSwap: Router v2 NanoEth: NETH Token0.133158948133367751 BNB
0x769a564640476be21f3dcbb8884e343803690b7965e122832e88cf2b4e254c55114331352021-10-02 22:04:2166 days 13 hrs ago NanoEth: NETH Token PancakeSwap: Router v20.022630224710339022 BNB
0x769a564640476be21f3dcbb8884e343803690b7965e122832e88cf2b4e254c55114331352021-10-02 22:04:2166 days 13 hrs ago NanoEth: NETH TokenNanoEth: Deployer0.045260449420678044 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NanoEth

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-08-16
*/

/**

███    ██  █████  ███    ██  ██████  ███████ ████████ ██   ██ 
████   ██ ██   ██ ████   ██ ██    ██ ██         ██    ██   ██ 
██ ██  ██ ███████ ██ ██  ██ ██    ██ █████      ██    ███████ 
██  ██ ██ ██   ██ ██  ██ ██ ██    ██ ██         ██    ██   ██ 
██   ████ ██   ██ ██   ████  ██████  ███████    ██    ██   ██ 

Earn Ethereum the premium way

TG: https://t.me/nanoethbsc
Website: https://www.nanoethbsc.com

*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.7.4;


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

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

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

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

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // 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;
    }
}

/**
 * BEP20 standard interface.
 */
interface IBEP20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * Allows for contract ownership along with multi-address authorization
 */
abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IBEP20 BETH = IBEP20(0x2170Ed0880ac9A755fd29B2688956BD959F933F8);
    address WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    IDEXRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    //SETMEUP, change this to 1 hour instead of 10mins
    uint256 public minPeriod = 30 * 60;
    uint256 public minDistribution = 1 * (10 ** 12);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0)
            ? IDEXRouter(_router)
            : IDEXRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = BETH.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(BETH);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = BETH.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            BETH.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend() external {
        distributeDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

contract NanoEth is IBEP20, Auth {
    using SafeMath for uint256;

    address BETH = 0x2170Ed0880ac9A755fd29B2688956BD959F933F8;
    address WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "NanoEth";
    string constant _symbol = "NETH";
    uint8 constant _decimals = 2;

    uint256 _totalSupply = 2 * 10**12 * (10 ** _decimals);
    uint256 public _maxTxAmount = _totalSupply * 1 / 100;

    //max wallet holding of 2% 
    uint256 public _maxWalletToken = ( _totalSupply * 2 ) / 100;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isTimelockExempt;
    mapping (address => bool) isDividendExempt;

    uint256 liquidityFee    = 5;
    uint256 reflectionFee   = 5;
    uint256 marketingFee    = 5;
    uint256 public totalFee = 15;
    uint256 feeDenominator  = 100;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    uint256 public launchedAt;
    bool public tradingOpen = false;

    DividendDistributor distributor;
    uint256 distributorGas = 500000;

    // Cooldown & timer functionality
    bool public buyCooldownEnabled = true;
    uint8 public cooldownTimerInterval = 45;
    mapping (address => uint) private cooldownTimer;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 10 / 10000; // 0.01% of supply
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        pair = IDEXFactory(router.factory()).createPair(WBNB, address(this));
        _allowances[address(this)][address(router)] = uint256(-1);

        distributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;

        // No timelock for these people
        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        // NICE!
        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = msg.sender;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, uint256(-1));
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != uint256(-1)){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    //settting the maximum permitted wallet holding (percent of total supply)
     function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() {
        _maxWalletToken = (_totalSupply * maxWallPercent ) / 100;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen,"Trading not open yet");
        }

        // max wallet code
        if (!authorizations[sender] && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != autoLiquidityReceiver){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");}
        

        
        // cooldown timer, so a bot doesnt do quick trades! 1min gap between 2 trades.
        if (sender == pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]) {
            require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }


        // Checks max transaction limit
        checkTxLimit(sender, amount);

        // Liquidity, Maintained at 25%
        if(shouldSwapBack()){ swapBack(); }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try distributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

        try distributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function takeFee(address sender, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = amount.mul(totalFee).div(feeDenominator);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function clearStuckBalance(uint256 amountPercentage) external onlyOwner {
        uint256 amountBNB = address(this).balance;
        payable(marketingFeeReceiver).transfer(amountBNB * amountPercentage / 100);
    }


    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    // enable cooldown between trades
    function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }



    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WBNB;

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountBNB = address(this).balance.sub(balanceBefore);

        uint256 totalBNBFee = totalFee.sub(dynamicLiquidityFee.div(2));
        
        uint256 amountBNBLiquidity = amountBNB.mul(dynamicLiquidityFee).div(totalBNBFee).div(2);
        uint256 amountBNBReflection = amountBNB.mul(reflectionFee).div(totalBNBFee);
        uint256 amountBNBMarketing = amountBNB.mul(marketingFee).div(totalBNBFee);

        try distributor.deposit{value: amountBNBReflection}() {} catch {}
        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountBNBMarketing, gas: 30000}("");
        
        // only to supress warning msg
        tmpSuccess = false;

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountBNBLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountBNBLiquidity, amountToLiquify);
        }
    }


    function setTxLimit(uint256 amount) external authorized {
        _maxTxAmount = amount;
    }

    function setIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

    function setIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }

    function setIsTimelockExempt(address holder, bool exempt) external authorized {
        isTimelockExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        totalFee = _liquidityFee.add(_reflectionFee).add(_marketingFee);
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator/4);
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }



/* Airdrop Begins */


 function airdrop(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

    uint256 SCCC = 0;

    require(addresses.length == tokens.length,"Mismatch between Address and token count");

    for(uint i=0; i < addresses.length; i++){
        SCCC = SCCC + tokens[i];
    }

    require(balanceOf(from) >= SCCC, "Not enough tokens in wallet for airdrop");

    for(uint i=0; i < addresses.length; i++){
        _basicTransfer(from,addresses[i],tokens[i]);
        if(!isDividendExempt[addresses[i]]) {
            try distributor.setShare(addresses[i], _balances[addresses[i]]) {} catch {} 
        }
    }

    // Dividend tracker
    if(!isDividendExempt[from]) {
        try distributor.setShare(from, _balances[from]) {} catch {}
    }
}

    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b0319908116732170ed0880ac9a755fd29b2688956bd959f933f81790915560038054821673bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c17905560048054821661dead17905560058054909116815565b5e620f480006006556501d1a94a20006007556503a352944000600855600f8181556010829055601191909155601255606460138190556014601655601755601b805460ff199081169091556207a120601c55601d80548216600190811761ff001916612d0017909155601f8054909216179055642e90edd000602055348015620000eb57600080fd5b50600080546001600160a01b0319908116339081178355825260016020818152604093849020805460ff1916909217909155601880549092167310ed43c718714eb63d5aa57b78b54704e256024e1791829055825163c45a015560e01b815292516001600160a01b03929092169263c45a01559260048083019392829003018186803b1580156200017b57600080fd5b505afa15801562000190573d6000803e3d6000fd5b505050506040513d6020811015620001a757600080fd5b5051600354604080516364e329cb60e11b81526001600160a01b0392831660048201523060248201529051919092169163c9c653969160448083019260209291908290030181600087803b158015620001ff57600080fd5b505af115801562000214573d6000803e3d6000fd5b505050506040513d60208110156200022b57600080fd5b5051601980546001600160a01b0319166001600160a01b03928316179055306000908152600a60209081526040808320601880548616855292529182902060001990555490519116906200027f90620003d1565b6001600160a01b03909116815260405190819003602001906000f080158015620002ad573d6000803e3d6000fd5b50601b8054610100600160a81b0319166101006001600160a01b0393841602179055336000818152600b60209081526040808320805460ff199081166001908117909255600c84528285208054821683179055600d845282852080548216831790556004805488168652838620805483168417905530808752848720805484168517905560195489168752600e8652848720805484168517905586528386208054831684179055549096168452818420805490961617909455601480546001600160a01b0319908116851790915560158054909116841790556006548383526009825284832081905584519081529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3620003df565b610ebf8062002e2e83390190565b612a3f80620003ef6000396000f3fe6080604052600436106103175760003560e01c8063722b62ad1161019a578063ca33e64c116100e1578063f2fde38b1161008a578063f887ea4011610064578063f887ea4014610bb0578063fe9fbb8014610bc5578063ffb54a9914610bf85761031e565b8063f2fde38b14610b07578063f708a64f14610b3a578063f84ba65d14610b755761031e565b8063df20fd49116100bb578063df20fd4914610a8d578063e96fada214610abf578063f0b37c0414610ad45761031e565b8063ca33e64c14610a13578063d51ed1c814610a28578063dd62ed3e14610a525761031e565b80639d1944f511610143578063a9059cbb1161011d578063a9059cbb14610992578063b6a5d7de146109cb578063bf56b371146109fe5761031e565b80639d1944f514610918578063a4b45c0014610942578063a8aa1b311461097d5761031e565b806382bf293c1161017457806382bf293c146108a8578063893d20e8146108d257806395d89b41146109035761031e565b8063722b62ad1461086957806378109e541461087e5780637d1db4a5146108935761031e565b80632d48e8961161025e5780635c85974f116102075780636ddd1713116101e15780636ddd1713146107e55780636fcba377146107fa57806370a08231146108365761031e565b80635c85974f1461076b578063617fe0ed14610795578063658d4b7f146107aa5761031e565b8063313ce56711610238578063313ce567146106d257806350db71fb146106fd578063571ac8b0146107385761031e565b80632d48e8961461063a5780632d5945671461066a5780632f54bf6e1461069f5761031e565b806318160ddd116102c0578063201e79911161029a578063201e7991146105b257806323b872dd146105e25780632b112e49146106255761031e565b806318160ddd1461055e5780631da1db5e146105735780631df4ccfc1461059d5761031e565b8063095ea7b3116102f1578063095ea7b3146104b55780630d295980146105025780631161ae391461052e5761031e565b8063025ff12f146103235780630445b6671461040457806306fdde031461042b5761031e565b3661031e57005b600080fd5b34801561032f57600080fd5b506104026004803603606081101561034657600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561037157600080fd5b82018360208201111561038357600080fd5b803590602001918460208302840111640100000000831117156103a557600080fd5b9193909290916020810190356401000000008111156103c357600080fd5b8201836020820111156103d557600080fd5b803590602001918460208302840111640100000000831117156103f757600080fd5b509092509050610c0d565b005b34801561041057600080fd5b50610419610ef9565b60408051918252519081900360200190f35b34801561043757600080fd5b50610440610eff565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561047a578181015183820152602001610462565b50505050905090810190601f1680156104a75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104c157600080fd5b506104ee600480360360408110156104d857600080fd5b506001600160a01b038135169060200135610f20565b604080519115158252519081900360200190f35b34801561050e57600080fd5b506104026004803603602081101561052557600080fd5b50351515610f87565b34801561053a57600080fd5b506104ee6004803603604081101561055157600080fd5b5080359060200135610fdd565b34801561056a57600080fd5b50610419610ff1565b34801561057f57600080fd5b506104026004803603602081101561059657600080fd5b5035610ff7565b3480156105a957600080fd5b5061041961107d565b3480156105be57600080fd5b50610402600480360360408110156105d557600080fd5b5080359060200135611083565b3480156105ee57600080fd5b506104ee6004803603606081101561060557600080fd5b506001600160a01b038135811691602081013590911690604001356110d6565b34801561063157600080fd5b5061041961119f565b34801561064657600080fd5b506104026004803603604081101561065d57600080fd5b50803590602001356111e8565b34801561067657600080fd5b506104026004803603604081101561068d57600080fd5b5080351515906020013560ff166112a7565b3480156106ab57600080fd5b506104ee600480360360208110156106c257600080fd5b50356001600160a01b0316611310565b3480156106de57600080fd5b506106e7611324565b6040805160ff9092168252519081900360200190f35b34801561070957600080fd5b506104026004803603604081101561072057600080fd5b506001600160a01b0381351690602001351515611329565b34801561074457600080fd5b506104ee6004803603602081101561075b57600080fd5b50356001600160a01b031661139c565b34801561077757600080fd5b506104026004803603602081101561078e57600080fd5b50356113aa565b3480156107a157600080fd5b506104ee6113f7565b3480156107b657600080fd5b50610402600480360360408110156107cd57600080fd5b506001600160a01b0381351690602001351515611400565b3480156107f157600080fd5b506104ee611473565b34801561080657600080fd5b506104026004803603608081101561081d57600080fd5b508035906020810135906040810135906060013561147c565b34801561084257600080fd5b506104196004803603602081101561085957600080fd5b50356001600160a01b0316611506565b34801561087557600080fd5b506106e7611521565b34801561088a57600080fd5b5061041961152f565b34801561089f57600080fd5b50610419611535565b3480156108b457600080fd5b50610402600480360360208110156108cb57600080fd5b503561153b565b3480156108de57600080fd5b506108e7611593565b604080516001600160a01b039092168252519081900360200190f35b34801561090f57600080fd5b506104406115a2565b34801561092457600080fd5b506104026004803603602081101561093b57600080fd5b50356115c0565b34801561094e57600080fd5b506104026004803603604081101561096557600080fd5b506001600160a01b038135811691602001351661161c565b34801561098957600080fd5b506108e761169f565b34801561099e57600080fd5b506104ee600480360360408110156109b557600080fd5b506001600160a01b0381351690602001356116ae565b3480156109d757600080fd5b50610402600480360360208110156109ee57600080fd5b50356001600160a01b03166116bb565b348015610a0a57600080fd5b50610419611725565b348015610a1f57600080fd5b506108e761172b565b348015610a3457600080fd5b5061041960048036036020811015610a4b57600080fd5b503561173a565b348015610a5e57600080fd5b5061041960048036036040811015610a7557600080fd5b506001600160a01b038135811691602001351661177a565b348015610a9957600080fd5b5061040260048036036040811015610ab057600080fd5b508035151590602001356117a5565b348015610acb57600080fd5b506108e7611804565b348015610ae057600080fd5b5061040260048036036020811015610af757600080fd5b50356001600160a01b0316611813565b348015610b1357600080fd5b5061040260048036036020811015610b2a57600080fd5b50356001600160a01b0316611877565b348015610b4657600080fd5b5061040260048036036040811015610b5d57600080fd5b506001600160a01b0381351690602001351515611935565b348015610b8157600080fd5b5061040260048036036040811015610b9857600080fd5b506001600160a01b0381351690602001351515611ab9565b348015610bbc57600080fd5b506108e7611b2c565b348015610bd157600080fd5b506104ee60048036036020811015610be857600080fd5b50356001600160a01b0316611b3b565b348015610c0457600080fd5b506104ee611b59565b610c1633611310565b610c50576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6000838214610c905760405162461bcd60e51b81526004018080602001828103825260288152602001806129376028913960400191505060405180910390fd5b60005b84811015610cbd57838382818110610ca757fe5b6020029190910135929092019150600101610c93565b5080610cc887611506565b1015610d055760405162461bcd60e51b81526004018080602001828103825260278152602001806129846027913960400191505060405180910390fd5b60005b84811015610e5757610d4887878784818110610d2057fe5b905060200201356001600160a01b0316868685818110610d3c57fe5b90506020020135611b62565b50600e6000878784818110610d5957fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff16610e4f57601b5461010090046001600160a01b03166314b6ca96878784818110610da557fe5b905060200201356001600160a01b0316600960008a8a87818110610dc557fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020546040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610e3c57600080fd5b505af1925050508015610e4d575060015b505b600101610d08565b506001600160a01b0386166000908152600e602052604090205460ff16610ef157601b546001600160a01b03878116600081815260096020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b158015610ede57600080fd5b505af1925050508015610eef575060015b505b505050505050565b60205481565b60408051808201909152600781526609cc2dcde8ae8d60cb1b602082015290565b336000818152600a602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b610f9033611310565b610fca576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601b805460ff1916911515919091179055565b600082610fe98361173a565b119392505050565b60065490565b61100033611310565b61103a576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b60155460405147916001600160a01b03169060648484020480156108fc02916000818181858888f19350505050158015611078573d6000803e3d6000fd5b505050565b60125481565b61108c33611b3b565b6110cb576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601691909155601755565b6001600160a01b0383166000908152600a602090815260408083203384529091528120546000191461118a57604080518082018252601681527f496e73756666696369656e7420416c6c6f77616e6365000000000000000000006020808301919091526001600160a01b0387166000908152600a82528381203382529091529190912054611165918490611c43565b6001600160a01b0385166000908152600a602090815260408083203384529091529020555b611195848484611cda565b90505b9392505050565b6005546000906111e3906111bb906001600160a01b0316611506565b6004546111dd906111d4906001600160a01b0316611506565b6006549061222b565b9061222b565b905090565b6111f133611b3b565b611230576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601b60019054906101000a90046001600160a01b03166001600160a01b0316632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561129357600080fd5b505af1158015610ef1573d6000803e3d6000fd5b6112b033611310565b6112ea576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601d805460ff19169215159290921761ff00191661010060ff9290921691909102179055565b6000546001600160a01b0390811691161490565b600290565b61133233611b3b565b611371576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000610f8182600019610f20565b6113b333611b3b565b6113f2576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600755565b601d5460ff1681565b61140933611b3b565b611448576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b601f5460ff1681565b61148533611b3b565b6114c4576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600f849055601083905560118290556114e7826114e1868661226d565b9061226d565b6012556013819055600481046012541061150057600080fd5b50505050565b6001600160a01b031660009081526009602052604090205490565b601d54610100900460ff1681565b60085481565b60075481565b61154433611310565b61157e576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b606481600654028161158c57fe5b0460085550565b6000546001600160a01b031690565b60408051808201909152600481526309c8aa8960e31b602082015290565b6115c933611b3b565b611608576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b620b71b0811061161757600080fd5b601c55565b61162533611b3b565b611664576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601480546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560158054929093169116179055565b6019546001600160a01b031681565b6000611198338484611cda565b6116c433611310565b6116fe576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b601a5481565b6014546001600160a01b031681565b6000610f8161174761119f565b6019546117749061176d90600290611767906001600160a01b0316611506565b906122c7565b85906122c7565b90612320565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6117ae33611b3b565b6117ed576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601f805460ff191692151592909217909155602055565b6015546001600160a01b031681565b61181c33611310565b611856576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600160205260409020805460ff19169055565b61188033611310565b6118ba576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825580825260016020818152604093849020805460ff1916909217909155825191825291517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163929181900390910190a150565b61193e33611b3b565b61197d576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03821630148015906119a457506019546001600160a01b03838116911614155b6119ad57600080fd5b6001600160a01b0382166000908152600e60205260409020805460ff19168215801591909117909155611a4f57601b5460408051630a5b654b60e11b81526001600160a01b038581166004830152600060248301819052925161010090940416926314b6ca969260448084019391929182900301818387803b158015611a3257600080fd5b505af1158015611a46573d6000803e3d6000fd5b50505050611ab5565b601b546001600160a01b03838116600081815260096020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b15801561129357600080fd5b5050565b611ac233611b3b565b611b01576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6018546001600160a01b031681565b6001600160a01b031660009081526001602052604090205460ff1690565b601b5460ff1681565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600990915291822054611bb3918490611c43565b6001600160a01b038086166000908152600960205260408082209390935590851681522054611be2908361226d565b6001600160a01b0380851660008181526009602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b60008184841115611cd25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611c97578181015183820152602001611c7f565b50505050905090810190601f168015611cc45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60215460009060ff1615611cfa57611cf3848484611b62565b9050611198565b6001600160a01b03841660009081526001602052604090205460ff16158015611d3c57506001600160a01b03831660009081526001602052604090205460ff16155b15611d9857601b5460ff16611d98576040805162461bcd60e51b815260206004820152601460248201527f54726164696e67206e6f74206f70656e20796574000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03841660009081526001602052604090205460ff16158015611dca57506001600160a01b0383163014155b8015611de457506004546001600160a01b03848116911614155b8015611dfe57506019546001600160a01b03848116911614155b8015611e1857506015546001600160a01b03848116911614155b8015611e3257506014546001600160a01b03848116911614155b15611e89576000611e4284611506565b90506008548382011115611e875760405162461bcd60e51b815260040180806020018281038252603e8152602001806129cc603e913960400191505060405180910390fd5b505b6019546001600160a01b038581169116148015611ea85750601d5460ff165b8015611ecd57506001600160a01b0383166000908152600d602052604090205460ff16155b15611f51576001600160a01b0383166000908152601e60205260409020544211611f285760405162461bcd60e51b815260040180806020018281038252602581526020018061295f6025913960400191505060405180910390fd5b601d546001600160a01b0384166000908152601e6020526040902061010090910460ff16420190555b611f5b8483612362565b611f636123dc565b15611f7057611f7061242d565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260099091529190912054611fc2918490611c43565b6001600160a01b038516600090815260096020526040812091909155611fe785612810565b611ff15782611ffb565b611ffb858461282f565b6001600160a01b038516600090815260096020526040902054909150612021908261226d565b6001600160a01b038086166000908152600960209081526040808320949094559188168152600e909152205460ff166120cd57601b546001600160a01b03868116600081815260096020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b1580156120ba57600080fd5b505af19250505080156120cb575060015b505b6001600160a01b0384166000908152600e602052604090205460ff1661216657601b546001600160a01b03858116600081815260096020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b15801561215357600080fd5b505af1925050508015612164575060015b505b601b60019054906101000a90046001600160a01b03166001600160a01b031663ffb2c479601c546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156121c357600080fd5b505af19250505080156121d4575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b600061119883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c43565b600082820183811015611198576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826122d657506000610f81565b828202828482816122e357fe5b04146111985760405162461bcd60e51b81526004018080602001828103825260218152602001806129ab6021913960400191505060405180910390fd5b600061119883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506128d1565b6007548111158061238b57506001600160a01b0382166000908152600c602052604090205460ff165b611ab5576040805162461bcd60e51b815260206004820152601160248201527f5458204c696d6974204578636565646564000000000000000000000000000000604482015290519081900360640190fd5b6019546000906001600160a01b031633148015906123fd575060215460ff16155b801561240b5750601f5460ff165b80156111e3575050602080543060009081526009909252604090912054101590565b6021805460ff1916600117905560165460175460009161244c91610fdd565b61245857600f5461245b565b60005b9050600061247f6002611774601254611774866020546122c790919063ffffffff16565b905060006124988260205461222b90919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106124cc57fe5b6001600160a01b0392831660209182029290920101526003548251911690829060019081106124f757fe5b6001600160a01b0392831660209182029290920181019190915260185460405163791ac94760e01b8152600481018681526000602483018190523060648401819052426084850181905260a060448601908152895160a487015289514799979097169763791ac947978c9795968c9690939260c49091019187820191028083838b5b83811015612591578181015183820152602001612579565b505050509050019650505050505050600060405180830381600087803b1580156125ba57600080fd5b505af11580156125ce573d6000803e3d6000fd5b5050505060006125e7824761222b90919063ffffffff16565b905060006126026125f9886002612320565b6012549061222b565b9050600061261760026117748481878d6122c7565b9050600061263483611774601054876122c790919063ffffffff16565b9050600061265184611774601154886122c790919063ffffffff16565b9050601b60019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156126a357600080fd5b505af1935050505080156126b5575060015b506015546040516000916001600160a01b03169061753090849084818181858888f193505050503d8060008114612708576040519150601f19603f3d011682016040523d82523d6000602084013e61270d565b606091505b5060009250508a1590506127f9576018546014546040805163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991879160c48082019260609290919082900301818588803b15801561279057600080fd5b505af11580156127a4573d6000803e3d6000fd5b50505050506040513d60608110156127bb57600080fd5b505060408051858152602081018c905281517f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506929181900390910190a15b50506021805460ff19169055505050505050505050565b6001600160a01b03166000908152600b602052604090205460ff161590565b60008061284d601354611774601254866122c790919063ffffffff16565b3060009081526009602052604090205490915061286a908261226d565b30600081815260096020908152604091829020939093558051848152905191926001600160a01b038816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a36128c9838261222b565b949350505050565b600081836129205760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611c97578181015183820152602001611c7f565b50600083858161292c57fe5b049594505050505056fe4d69736d61746368206265747765656e204164647265737320616e6420746f6b656e20636f756e74506c65617365207761697420666f7220316d696e206265747765656e2074776f20627579734e6f7420656e6f75676820746f6b656e7320696e2077616c6c657420666f722061697264726f70536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77546f74616c20486f6c64696e672069732063757272656e746c79206c696d697465642c20796f752063616e206e6f74206275792074686174206d7563682ea26469706673582212204a89b0747c8cbb7d3fecd689bbf83fab632c430b492023dca9861dda0cea122f64736f6c634300070600336080604052600180546001600160a01b0319908116732170ed0880ac9a755fd29b2688956bd959f933f8179091556002805490911673bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c1790556ec097ce7bc90715b34b9f1000000000600c55610708600d5564e8d4a51000600e5534801561007a57600080fd5b50604051610ebf380380610ebf8339818101604052602081101561009d57600080fd5b50516001600160a01b0381166100c7577310ed43c718714eb63d5aa57b78b54704e256024e6100c9565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610dbc806101036000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610254578063f0fc6bca14610269578063ffb2c4791461027e578063ffd49c84146102a8576100dd565b8063ce7c2ac2146101e6578063d0e30db014610237578063e2d2e2191461023f576100dd565b80632d48e896116100bb5780632d48e896146101775780633a98ef39146101a75780634fab0ae8146101bc578063997664d7146101d1576100dd565b806311ce023d146100e257806314b6ca961461010957806328fd319814610144575b600080fd5b3480156100ee57600080fd5b506100f76102bd565b60408051918252519081900360200190f35b34801561011557600080fd5b506101426004803603604081101561012c57600080fd5b506001600160a01b0381351690602001356102c3565b005b34801561015057600080fd5b506100f76004803603602081101561016757600080fd5b50356001600160a01b03166103e8565b34801561018357600080fd5b506101426004803603604081101561019a57600080fd5b5080359060200135610474565b3480156101b357600080fd5b506100f7610496565b3480156101c857600080fd5b506100f761049c565b3480156101dd57600080fd5b506100f76104a2565b3480156101f257600080fd5b506102196004803603602081101561020957600080fd5b50356001600160a01b03166104a8565b60408051938452602084019290925282820152519081900360600190f35b6101426104c9565b34801561024b57600080fd5b506100f761075b565b34801561026057600080fd5b506100f7610761565b34801561027557600080fd5b50610142610767565b34801561028a57600080fd5b50610142600480360360208110156102a157600080fd5b5035610772565b3480156102b457600080fd5b506100f7610854565b600c5481565b6000546001600160a01b031633146102da57600080fd5b6001600160a01b03821660009081526007602052604090205415610301576103018261085a565b60008111801561032757506001600160a01b038216600090815260076020526040902054155b1561033a5761033582610982565b61036d565b8015801561035f57506001600160a01b03821660009081526007602052604090205415155b1561036d5761036d826109e3565b6001600160a01b03821660009081526007602052604090205460085461039e91839161039891610ad0565b90610b1b565b6008556001600160a01b03821660009081526007602052604090208190556103c581610b75565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b03811660009081526007602052604081205461040d5750600061046f565b6001600160a01b03821660009081526007602052604081205461042f90610b75565b6001600160a01b0384166000908152600760205260409020600101549091508082116104605760009250505061046f565b61046a8282610ad0565b925050505b919050565b6000546001600160a01b0316331461048b57600080fd5b600d91909155600e55565b60085481565b600e5481565b60095481565b60076020526000908152604090208054600182015460029092015490919083565b6000546001600160a01b031633146104e057600080fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561052b57600080fd5b505afa15801561053f573d6000803e3d6000fd5b505050506040513d602081101561055557600080fd5b50516040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061059757fe5b6001600160a01b03928316602091820292909201015260018054835192169183919081106105c157fe5b6001600160a01b0392831660209182029290920181019190915260035460405163b6f9de9560e01b815260006004820181815230604484018190524260648501819052608060248601908152895160848701528951969098169763b6f9de9597349795968b969495939460a49091019187810191028083838b5b8381101561065357818101518382015260200161063b565b50505050905001955050505050506000604051808303818588803b15801561067a57600080fd5b505af115801561068e573d6000803e3d6000fd5b5050600154604080516370a0823160e01b815230600482015290516000955061071994508793506001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156106e757600080fd5b505afa1580156106fb573d6000803e3d6000fd5b505050506040513d602081101561071157600080fd5b505190610ad0565b6009549091506107299082610b1b565b600955600854600c546107539161074a916107449085610b92565b90610beb565b600b5490610b1b565b600b55505050565b600b5481565b600a5481565b6107703361085a565b565b6000546001600160a01b0316331461078957600080fd5b600454806107975750610851565b6000805a905060005b84831080156107ae57508381105b1561084c5783600f54106107c2576000600f555b6107ee6004600f54815481106107d457fe5b6000918252602090912001546001600160a01b0316610c2d565b1561081f5761081f6004600f548154811061080557fe5b6000918252602090912001546001600160a01b031661085a565b61083461082d5a8490610ad0565b8490610b1b565b92505a600f80546001908101909155909250016107a0565b505050505b50565b600d5481565b6001600160a01b03811660009081526007602052604090205461087c57610851565b6000610887826103e8565b9050801561097e57600a5461089c9082610b1b565b600a556001546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156108f557600080fd5b505af1158015610909573d6000803e3d6000fd5b505050506040513d602081101561091f57600080fd5b50506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546109549082610b1b565b6001600160a01b03831660009081526007602052604090206002810191909155546103c590610b75565b5050565b600480546001600160a01b039092166000818152600560205260408120849055600184018355919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90910180546001600160a01b0319169091179055565b6004805460001981019081106109f557fe5b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610a2d57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916000198101908110610a7b57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610aab57fe5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610b1283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c69565b90505b92915050565b600082820183811015610b12576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000610b15600c54610744600b5485610b9290919063ffffffff16565b600082610ba157506000610b15565b82820282848281610bae57fe5b0414610b125760405162461bcd60e51b8152600401808060200182810382526021815260200180610d666021913960400191505060405180910390fd5b6000610b1283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610d00565b600d546001600160a01b0382166000908152600660205260408120549091429101108015610b155750600e54610c62836103e8565b1192915050565b60008184841115610cf85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610cbd578181015183820152602001610ca5565b50505050905090810190601f168015610cea5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183610d4f5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610cbd578181015183820152602001610ca5565b506000838581610d5b57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212203e556e4eefe8341bca67af551892f4ba66868ac76fdb908b50d8c4fc7536ef6e64736f6c63430007060033

Deployed ByteCode Sourcemap

12313:13909:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25353:800;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25353:800:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25353:800:0;;-1:-1:-1;25353:800:0;-1:-1:-1;25353:800:0;:::i;:::-;;14068:56;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15494:80;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15916:216;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15916:216:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20528:94;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20528:94:0;;;;:::i;25168:150::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25168:150:0;;;;;;;:::i;15224:88::-;;;;;;;;;;;;;:::i;20278:217::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20278:217:0;;:::i;13393:28::-;;;;;;;;;;;;;:::i;24313:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24313:183:0;;;;;;;:::i;16428:364::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16428:364:0;;;;;;;;;;;;;;;;;:::i;24843:142::-;;;;;;;;;;;;;:::i;24504:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24504:183:0;;;;;;;:::i;20669:164::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20669:164:0;;;;;;;;;;;:::i;4129:103::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4129:103:0;-1:-1:-1;;;;;4129:103:0;;:::i;15318:80::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23344:130;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23344:130:0;;;;;;;;;;:::i;16140:116::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16140:116:0;-1:-1:-1;;;;;16140:116:0;;:::i;22621:96::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22621:96:0;;:::i;13885:37::-;;;;;;;;;;;;;:::i;23080:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23080:120:0;;;;;;;;;;:::i;14031:30::-;;;;;;;;;;;;;:::i;23482:423::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23482:423:0;;;;;;;;;;;;;;;;;:::i;15664:105::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15664:105:0;-1:-1:-1;;;;;15664:105:0;;:::i;13929:39::-;;;;;;;;;;;;;:::i;12916:59::-;;;;;;;;;;;;;:::i;12822:52::-;;;;;;;;;;;;;:::i;16880:149::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16880:149:0;;:::i;15580:78::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;15580:78:0;;;;;;;;;;;;;;15404:84;;;;;;;;;;;;;:::i;24695:136::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24695:136:0;;:::i;23913:228::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23913:228:0;;;;;;;;;;:::i;13668:19::-;;;;;;;;;;;;;:::i;16264:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16264:156:0;;;;;;;;:::i;3802:94::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3802:94:0;-1:-1:-1;;;;;3802:94:0;;:::i;13696:25::-;;;;;;;;;;;;;:::i;13466:36::-;;;;;;;;;;;;;:::i;24993:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24993:167:0;;:::i;15775:133::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15775:133:0;;;;;;;;;;:::i;24149:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24149:156:0;;;;;;;;;:::i;13509:35::-;;;;;;;;;;;;;:::i;3972:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3972:97:0;-1:-1:-1;;;;;3972:97:0;;:::i;4529:173::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4529:173:0;-1:-1:-1;;;;;4529:173:0;;:::i;22725:347::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22725:347:0;;;;;;;;;;:::i;23208:128::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23208:128:0;;;;;;;;;;:::i;13637:24::-;;;;;;;;;;;;;:::i;4303:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4303:107:0;-1:-1:-1;;;;;4303:107:0;;:::i;13728:31::-;;;;;;;;;;;;;:::i;25353:800::-;3518:19;3526:10;3518:7;:19::i;:::-;3510:38;;;;;-1:-1:-1;;;3510:38:0;;;;;;;;;;;;-1:-1:-1;;;3510:38:0;;;;;;;;;;;;;;;25469:12:::1;25502:33:::0;;::::1;25494:85;;;;-1:-1:-1::0;;;25494:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25592:6;25588:82;25602:20:::0;;::::1;25588:82;;;25653:6;;25660:1;25653:9;;;;;;;;;::::0;;;::::1;;25646:16:::0;;;::::1;::::0;-1:-1:-1;25624:3:0::1;;25588:82;;;;25705:4;25686:15;25696:4;25686:9;:15::i;:::-;:23;;25678:75;;;;-1:-1:-1::0;;;25678:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25766:6;25762:250;25776:20:::0;;::::1;25762:250;;;25813:43;25828:4;25833:9;;25843:1;25833:12;;;;;;;;;;;;;-1:-1:-1::0;;;;;25833:12:0::1;25846:6;;25853:1;25846:9;;;;;;;;;;;;;25813:14;:43::i;:::-;;25871:16;:30;25888:9;;25898:1;25888:12;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;25888:12:0::1;25871:30:::0;;-1:-1:-1;25871:30:0;::::1;::::0;;;;;;-1:-1:-1;25871:30:0;;::::1;;25867:138;;25922:11;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;25922:11:0::1;:20;25943:9:::0;;25953:1;25943:12;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;25943:12:0::1;25957:9;:23;25967:9;;25977:1;25967:12;;;;;;;;;;;;;-1:-1:-1::0;;;;;25967:12:0::1;-1:-1:-1::0;;;;;25957:23:0::1;-1:-1:-1::0;;;;;25957:23:0::1;;;;;;;;;;;;;25922:59;;;;;;;;;;;;;-1:-1:-1::0;;;;;25922:59:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;25918:75:::0;::::1;25798:3;;25762:250;;;-1:-1:-1::0;;;;;;26049:22:0;::::1;;::::0;;;:16:::1;:22;::::0;;;;;::::1;;26045:105;;26088:11;::::0;-1:-1:-1;;;;;26115:15:0;;::::1;;::::0;;;:9:::1;:15;::::0;;;;;;26088:43;;-1:-1:-1;;;26088:43:0;;::::1;::::0;::::1;::::0;;;;;;;;;:11:::1;::::0;;::::1;::::0;;::::1;::::0;:20:::1;::::0;:43;;;;;26115:15;;26088:43;;;;;;26115:15;26088:11;:43;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;;;;;26084:59:::0;::::1;3550:1;25353:800:::0;;;;;:::o;14068:56::-;;;;:::o;15494:80::-;15566:5;;;;;;;;;;;;-1:-1:-1;;;15566:5:0;;;;15494:80;:::o;15916:216::-;16020:10;15991:4;16008:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16008:32:0;;;;;;;;;;;:41;;;16065:37;;;;;;;15991:4;;16008:32;;16020:10;;16065:37;;;;;;;;-1:-1:-1;16120:4:0;15916:216;;;;;:::o;20528:94::-;3518:19;3526:10;3518:7;:19::i;:::-;3510:38;;;;;-1:-1:-1;;;3510:38:0;;;;;;;;;;;;-1:-1:-1;;;3510:38:0;;;;;;;;;;;;;;;20593:11:::1;:21:::0;;-1:-1:-1;;20593:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20528:94::o;25168:150::-;25248:4;25304:6;25272:29;25292:8;25272:19;:29::i;:::-;:38;;25168:150;-1:-1:-1;;;25168:150:0:o;15224:88::-;15297:12;;15224:88;:::o;20278:217::-;3518:19;3526:10;3518:7;:19::i;:::-;3510:38;;;;;-1:-1:-1;;;3510:38:0;;;;;;;;;;;;-1:-1:-1;;;3510:38:0;;;;;;;;;;;;;;;20421:20:::1;::::0;20413:74:::1;::::0;20381:21:::1;::::0;-1:-1:-1;;;;;20421:20:0::1;::::0;20483:3:::1;20452:28:::0;;::::1;:34;20413:74:::0;::::1;;;::::0;::::1;::::0;;;20452:34;20421:20;20413:74;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;3550:1;20278:217:::0;:::o;13393:28::-;;;;:::o;24313:183::-;3687:24;3700:10;3687:12;:24::i;:::-;3679:48;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;;;;24411:15:::1;:25:::0;;;;24447:26:::1;:41:::0;24313:183::o;16428:364::-;-1:-1:-1;;;;;16548:19:0;;16528:4;16548:19;;;:11;:19;;;;;;;;16568:10;16548:31;;;;;;;;-1:-1:-1;;16548:46:0;16545:180;;16644:69;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16644:19:0;;-1:-1:-1;16644:19:0;;;:11;:19;;;;;16664:10;16644:31;;;;;;;;;;:69;;16680:6;;16644:35;:69::i;:::-;-1:-1:-1;;;;;16610:19:0;;;;;;:11;:19;;;;;;;;16630:10;16610:31;;;;;;;:103;16545:180;16744:40;16758:6;16766:9;16777:6;16744:13;:40::i;:::-;16737:47;;16428:364;;;;;;:::o;24843:142::-;24971:4;;24896:7;;24923:54;;24961:15;;-1:-1:-1;;;;;24971:4:0;24961:9;:15::i;:::-;24950:4;;24923:33;;24940:15;;-1:-1:-1;;;;;24950:4:0;24940:9;:15::i;:::-;24923:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;24916:61;;24843:142;:::o;24504:183::-;3687:24;3700:10;3687:12;:24::i;:::-;3679:48;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;;;;24614:11:::1;;;;;;;;;-1:-1:-1::0;;;;;24614:11:0::1;-1:-1:-1::0;;;;;24614:35:0::1;;24650:10;24662:16;24614:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;20669:164:::0;3518:19;3526:10;3518:7;:19::i;:::-;3510:38;;;;;-1:-1:-1;;;3510:38:0;;;;;;;;;;;;-1:-1:-1;;;3510:38:0;;;;;;;;;;;;;;;20753:18:::1;:28:::0;;-1:-1:-1;;20753:28:0::1;::::0;::::1;;::::0;;;::::1;-1:-1:-1::0;;20792:33:0::1;20753:28;;20792:33:::0;;;::::1;::::0;;;::::1;;::::0;;20669:164::o;4129:103::-;4184:4;4219:5;-1:-1:-1;;;;;4219:5:0;;;4208:16;;;;4129:103::o;15318:80::-;12752:1;15318:80;:::o;23344:130::-;3687:24;3700:10;3687:12;:24::i;:::-;3679:48;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23433:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;23433:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23344:130::o;16140:116::-;16195:4;16219:29;16227:7;-1:-1:-1;;16219:7:0;:29::i;22621:96::-;3687:24;3700:10;3687:12;:24::i;:::-;3679:48;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;;;;22688:12:::1;:21:::0;22621:96::o;13885:37::-;;;;;;:::o;23080:120::-;3687:24;3700:10;3687:12;:24::i;:::-;3679:48;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23164:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;23164:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23080:120::o;14031:30::-;;;;;;:::o;23482:423::-;3687:24;3700:10;3687:12;:24::i;:::-;3679:48;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;;;;23625:12:::1;:28:::0;;;23664:13:::1;:30:::0;;;23705:12:::1;:28:::0;;;23755:52:::1;23720:13:::0;23755:33:::1;23640:13:::0;23680:14;23755:17:::1;:33::i;:::-;:37:::0;::::1;:52::i;:::-;23744:8;:63:::0;23818:14:::1;:32:::0;;;23895:1:::1;23835:15:::0;23880:16:::1;23869:8;;:27;23861:36;;;::::0;::::1;;23482:423:::0;;;;:::o;15664:105::-;-1:-1:-1;;;;;15748:18:0;15730:7;15748:18;;;:9;:18;;;;;;;15664:105::o;13929:39::-;;;;;;;;;:::o;12916:59::-;;;;:::o;12822:52::-;;;;:::o;16880:149::-;3518:19;3526:10;3518:7;:19::i;:::-;3510:38;;;;;-1:-1:-1;;;3510:38:0;;;;;;;;;;;;-1:-1:-1;;;3510:38:0;;;;;;;;;;;;;;;17018:3:::1;16999:14;16984:12;;:29;16983:38;;;;;;16965:15;:56:::0;-1:-1:-1;16880:149:0:o;15580:78::-;15632:7;15650:5;-1:-1:-1;;;;;15650:5:0;15580:78;:::o;15404:84::-;15478:7;;;;;;;;;;;;-1:-1:-1;;;15478:7:0;;;;15404:84;:::o;24695:136::-;3687:24;3700:10;3687:12;:24::i;:::-;3679:48;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;;;;24785:6:::1;24779:3;:12;24771:21;;;::::0;::::1;;24803:14;:20:::0;24695:136::o;23913:228::-;3687:24;3700:10;3687:12;:24::i;:::-;3679:48;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;;;;24032:21:::1;:46:::0;;-1:-1:-1;;;;;24032:46:0;;::::1;-1:-1:-1::0;;24032:46:0;;::::1;;::::0;;;24089:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;23913:228::o;13668:19::-;;;-1:-1:-1;;;;;13668:19:0;;:::o;16264:156::-;16344:4;16368:44;16382:10;16394:9;16405:6;16368:13;:44::i;3802:94::-;3518:19;3526:10;3518:7;:19::i;:::-;3510:38;;;;;-1:-1:-1;;;3510:38:0;;;;;;;;;;;;-1:-1:-1;;;3510:38:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3862:19:0::1;;::::0;;;3884:4:::1;3862:19;::::0;;;;;;;:26;;-1:-1:-1;;3862:26:0::1;::::0;;::::1;::::0;;3802:94::o;13696:25::-;;;;:::o;13466:36::-;;;-1:-1:-1;;;;;13466:36:0;;:::o;24993:167::-;25061:7;25088:64;25129:22;:20;:22::i;:::-;25111:4;;25088:36;;25101:22;;25121:1;;25101:15;;-1:-1:-1;;;;;25111:4:0;25101:9;:15::i;:::-;:19;;:22::i;:::-;25088:8;;:12;:36::i;:::-;:40;;:64::i;15775:133::-;-1:-1:-1;;;;;15877:19:0;;;15859:7;15877:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15775:133::o;24149:156::-;3687:24;3700:10;3687:12;:24::i;:::-;3679:48;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;;;;24241:11:::1;:22:::0;;-1:-1:-1;;24241:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;24274:13:::1;:23:::0;24149:156::o;13509:35::-;;;-1:-1:-1;;;;;13509:35:0;;:::o;3972:97::-;3518:19;3526:10;3518:7;:19::i;:::-;3510:38;;;;;-1:-1:-1;;;3510:38:0;;;;;;;;;;;;-1:-1:-1;;;3510:38:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;4034:19:0::1;4056:5;4034:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;4034:27:0::1;::::0;;3972:97::o;4529:173::-;3518:19;3526:10;3518:7;:19::i;:::-;3510:38;;;;;-1:-1:-1;;;3510:38:0;;;;;;;;;;;;-1:-1:-1;;;3510:38:0;;;;;;;;;;;;;;;4605:5:::1;:11:::0;;-1:-1:-1;;4605:11:0::1;-1:-1:-1::0;;;;;4605:11:0;::::1;::::0;;::::1;::::0;;4627:19;;;-1:-1:-1;4627:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;4627:26:0::1;::::0;;::::1;::::0;;;4669:25;;;;;;;::::1;::::0;;;;;;;;;::::1;4529:173:::0;:::o;22725:347::-;3687:24;3700:10;3687:12;:24::i;:::-;3679:48;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22822:23:0;::::1;22840:4;22822:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;22859:4:0::1;::::0;-1:-1:-1;;;;;22849:14:0;;::::1;22859:4:::0;::::1;22849:14;;22822:41;22814:50;;;::::0;::::1;;-1:-1:-1::0;;;;;22875:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;22875:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;22919:146:::1;;22944:11;::::0;:31:::1;::::0;;-1:-1:-1;;;22944:31:0;;-1:-1:-1;;;;;22944:31:0;;::::1;;::::0;::::1;::::0;22973:1:::1;22944:31:::0;;;;;;;;:11:::1;::::0;;::::1;;::::0;:20:::1;::::0;:31;;;;;22973:1;;22944:31;;;;;;22973:1;22944:11;:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22919:146;;;23006:11;::::0;-1:-1:-1;;;;;23035:17:0;;::::1;;::::0;;;:9:::1;:17;::::0;;;;;;23006:47;;-1:-1:-1;;;23006:47:0;;::::1;::::0;::::1;::::0;;;;;;;;;:11:::1;::::0;;::::1;::::0;;::::1;::::0;:20:::1;::::0;:47;;;;;23035:17;;23006:47;;;;;;23035:17;23006:11;:47;::::1;;::::0;::::1;;;;::::0;::::1;22919:146;22725:347:::0;;:::o;23208:128::-;3687:24;3700:10;3687:12;:24::i;:::-;3679:48;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;-1:-1:-1;;;3679:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23296:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;23296:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23208:128::o;13637:24::-;;;-1:-1:-1;;;;;13637:24:0;;:::o;4303:107::-;-1:-1:-1;;;;;4383:19:0;4359:4;4383:19;;;:14;:19;;;;;;;;;4303:107::o;13728:31::-;;;;;;:::o;19098:330::-;19228:53;;;;;;;;;;;-1:-1:-1;;;19228:53:0;;;;;;;;-1:-1:-1;;;;;19228:17:0;;19191:4;19228:17;;;:9;:17;;;;;;;:53;;19250:6;;19228:21;:53::i;:::-;-1:-1:-1;;;;;19208:17:0;;;;;;;:9;:17;;;;;;:73;;;;19315:20;;;;;;;:32;;19340:6;19315:24;:32::i;:::-;-1:-1:-1;;;;;19292:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;19363:35;;;;;;;19292:20;;19363:35;;;;;;;;;;;;;-1:-1:-1;19416:4:0;19098:330;;;;;:::o;1188:192::-;1274:7;1310:12;1302:6;;;;1294:29;;;;-1:-1:-1;;;1294:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1346:5:0;;;1188:192::o;17037:2049::-;17149:6;;17129:4;;17149:6;;17146:63;;;17165:41;17180:6;17188:9;17199:6;17165:14;:41::i;:::-;17158:48;;;;17146:63;-1:-1:-1;;;;;17225:22:0;;;;;;:14;:22;;;;;;;;17224:23;:53;;;;-1:-1:-1;;;;;;17252:25:0;;;;;;:14;:25;;;;;;;;17251:26;17224:53;17221:127;;;17301:11;;;;17293:43;;;;;-1:-1:-1;;;17293:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17393:22:0;;;;;;:14;:22;;;;;;;;17392:23;:53;;;;-1:-1:-1;;;;;;17419:26:0;;17440:4;17419:26;;17392:53;:84;;;;-1:-1:-1;17471:4:0;;-1:-1:-1;;;;;17450:26:0;;;17471:4;;17450:26;;17392:84;:105;;;;-1:-1:-1;17493:4:0;;-1:-1:-1;;;;;17480:17:0;;;17493:4;;17480:17;;17392:105;:142;;;;-1:-1:-1;17514:20:0;;-1:-1:-1;;;;;17501:33:0;;;17514:20;;17501:33;;17392:142;:180;;;;-1:-1:-1;17551:21:0;;-1:-1:-1;;;;;17538:34:0;;;17551:21;;17538:34;;17392:180;17388:372;;;17588:18;17609:20;17619:9;17609;:20::i;:::-;17588:41;;17677:15;;17666:6;17653:10;:19;17652:40;;17644:114;;;;-1:-1:-1;;;17644:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17388:372;;17894:4;;-1:-1:-1;;;;;17884:14:0;;;17894:4;;17884:14;:49;;;;-1:-1:-1;17915:18:0;;;;17884:49;:94;;;;-1:-1:-1;;;;;;17951:27:0;;;;;;:16;:27;;;;;;;;17950:28;17884:94;17880:299;;;-1:-1:-1;;;;;18003:24:0;;;;;;:13;:24;;;;;;18030:15;-1:-1:-1;17995:91:0;;;;-1:-1:-1;;;17995:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18146:21;;-1:-1:-1;;;;;18101:24:0;;;;;;:13;:24;;;;;18146:21;;;;;;18128:15;:39;18101:66;;17880:299;18234:28;18247:6;18255;18234:12;:28::i;:::-;18319:16;:14;:16::i;:::-;18316:35;;;18338:10;:8;:10::i;:::-;18410:53;;;;;;;;;;;-1:-1:-1;;;18410:53:0;;;;;;;;-1:-1:-1;;;;;18410:17:0;;-1:-1:-1;18410:17:0;;;:9;:17;;;;;;;;:53;;18432:6;;18410:21;:53::i;:::-;-1:-1:-1;;;;;18390:17:0;;;;;;:9;:17;;;;;:73;;;;18501:21;18400:6;18501:13;:21::i;:::-;:56;;18551:6;18501:56;;;18525:23;18533:6;18541;18525:7;:23::i;:::-;-1:-1:-1;;;;;18591:20:0;;;;;;:9;:20;;;;;;18476:81;;-1:-1:-1;18591:40:0;;18476:81;18591:24;:40::i;:::-;-1:-1:-1;;;;;18568:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;18677:24;;;;;:16;:24;;;;;;;18673:119;;18722:11;;-1:-1:-1;;;;;18751:17:0;;;;;;;:9;:17;;;;;;;18722:47;;-1:-1:-1;;;18722:47:0;;;;;;;;;;;;;;:11;;;;;;;;:20;;:47;;;;;18751:17;;18722:47;;;;;;18751:17;18722:11;:47;;;;;;;;;;;;;;;;;;;;;;;;;18718:63;;-1:-1:-1;;;;;18808:27:0;;;;;;:16;:27;;;;;;;;18804:129;;18856:11;;-1:-1:-1;;;;;18888:20:0;;;;;;;:9;:20;;;;;;;18856:53;;-1:-1:-1;;;18856:53:0;;;;;;;;;;;;;;:11;;;;;;;;:20;;:53;;;;;18888:20;;18856:53;;;;;;18888:20;18856:11;:53;;;;;;;;;;;;;;;;;;;;;;;;;18852:69;;18949:11;;;;;;;;;-1:-1:-1;;;;;18949:11:0;-1:-1:-1;;;;;18949:19:0;;18969:14;;18949:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18945:51;19030:9;-1:-1:-1;;;;;19013:43:0;19022:6;-1:-1:-1;;;;;19013:43:0;;19041:14;19013:43;;;;;;;;;;;;;;;;;;-1:-1:-1;19074:4:0;;17037:2049;-1:-1:-1;;;;17037:2049:0:o;1046:136::-;1104:7;1131:43;1135:1;1138;1131:43;;;;;;;;;;;;;;;;;:3;:43::i;859:181::-;917:7;949:5;;;973:6;;;;965:46;;;;;-1:-1:-1;;;965:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1386:250;1444:7;1468:6;1464:47;;-1:-1:-1;1498:1:0;1491:8;;1464:47;1535:5;;;1539:1;1535;:5;:1;1559:5;;;;;:10;1551:56;;;;-1:-1:-1;;;1551:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1642:132;1700:7;1727:39;1731:1;1734;1727:39;;;;;;;;;;;;;;;;;:3;:39::i;19436:166::-;19533:12;;19523:6;:22;;:49;;;-1:-1:-1;;;;;;19549:23:0;;;;;;:15;:23;;;;;;;;19523:49;19515:79;;;;;-1:-1:-1;;;19515:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20073:197;20160:4;;20122;;-1:-1:-1;;;;;20160:4:0;20146:10;:18;;;;:38;;-1:-1:-1;20178:6:0;;;;20177:7;20146:38;:62;;;;-1:-1:-1;20197:11:0;;;;20146:62;:116;;;;-1:-1:-1;;20249:13:0;;;20239:4;20221:24;;;;:9;:24;;;;;;;;:41;;;20073:197::o;20845:1766::-;14190:6;:13;;-1:-1:-1;;14190:13:0;14199:4;14190:13;;;20940:15:::1;::::0;20957:26:::1;::::0;14190:6;;20924:60:::1;::::0;:15:::1;:60::i;:::-;:79;;20991:12;;20924:79;;;20987:1;20924:79;20894:109;;21014:23;21040:59;21097:1;21040:52;21083:8;;21040:38;21058:19;21040:13;;:17;;:38;;;;:::i;:59::-;21014:85;;21110:20;21133:34;21151:15;21133:13;;:17;;:34;;;;:::i;:::-;21204:16;::::0;;21218:1:::1;21204:16:::0;;;;;::::1;::::0;;21110:57;;-1:-1:-1;21180:21:0::1;::::0;21204:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21204:16:0::1;21180:40;;21249:4;21231;21236:1;21231:7;;;;;;;;-1:-1:-1::0;;;;;21231:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;21275:4:::1;::::0;21265:7;;21275:4;::::1;::::0;21265;;21275;;21265:7;::::1;;;;;-1:-1:-1::0;;;;;21265:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:14;;;;21350:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;21350:188:0;;::::1;::::0;::::1;::::0;;;21292:21:::1;21350:188:::0;;;;;;21492:4:::1;21350:188:::0;;;;;;21512:15:::1;21350:188:::0;;;;;;;;;;;;;;;;;;;;;21316:21:::1;::::0;21350:6;;;::::1;::::0;:57:::1;::::0;21422:12;;21292:21;;21465:4;;21350:188;;;;;;;;;;::::1;::::0;::::1;::::0;;;21292:21;21350:188:::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21551:17;21571:40;21597:13;21571:21;:25;;:40;;;;:::i;:::-;21551:60:::0;-1:-1:-1;21624:19:0::1;21646:40;21659:26;:19:::0;21683:1:::1;21659:23;:26::i;:::-;21646:8;::::0;;:12:::1;:40::i;:::-;21624:62:::0;-1:-1:-1;21707:26:0::1;21736:58;21792:1;21736:51;21624:62:::0;21736:51;:9;21750:19;21736:13:::1;:34::i;:58::-;21707:87;;21805:27;21835:45;21868:11;21835:28;21849:13;;21835:9;:13;;:28;;;;:::i;:45::-;21805:75;;21891:26;21920:44;21952:11;21920:27;21934:12;;21920:9;:13;;:27;;;;:::i;:44::-;21891:73;;21981:11;;;;;;;;;-1:-1:-1::0;;;;;21981:11:0::1;-1:-1:-1::0;;;;;21981:19:0::1;;22008;21981:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;21977:65:::0;22081:20:::1;::::0;22073:77:::1;::::0;22053:15:::1;::::0;-1:-1:-1;;;;;22081:20:0::1;::::0;22140:5:::1;::::0;22115:18;;22053:15;22073:77;22053:15;22073:77;22115:18;22081:20;22140:5;22073:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;22224:5:0::1;::::0;-1:-1:-1;;22245:19:0;;;-1:-1:-1;22242:362:0::1;;22280:6;::::0;22454:21:::1;::::0;22280:244:::1;::::0;;-1:-1:-1;;;22280:244:0;;22356:4:::1;22280:244;::::0;::::1;::::0;;;;;;;:6:::1;:244:::0;;;;;;;;;;-1:-1:-1;;;;;22454:21:0;;::::1;22280:244:::0;;;;22494:15:::1;22280:244:::0;;;;;;:6;;;::::1;::::0;:22:::1;::::0;22310:18;;22280:244;;;;;::::1;::::0;;;;;;;;;22310:18;22280:6;:244;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;22280:244:0;22544:48;;;;;22280:244:::1;22544:48:::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;22242:362;-1:-1:-1::0;;14208:6:0;:14;;-1:-1:-1;;14208:14:0;;;-1:-1:-1;;;;;;;;;20845:1766:0:o;19610:114::-;-1:-1:-1;;;;;19697:19:0;19672:4;19697:19;;;:11;:19;;;;;;;;19696:20;;19610:114::o;19732:333::-;19799:7;19819:17;19839:40;19864:14;;19839:20;19850:8;;19839:6;:10;;:20;;;;:::i;:40::-;19937:4;19919:24;;;;:9;:24;;;;;;19819:60;;-1:-1:-1;19919:39:0;;19819:60;19919:28;:39::i;:::-;19910:4;19892:24;;;;:9;:24;;;;;;;;;:66;;;;19974:42;;;;;;;19910:4;;-1:-1:-1;;;;;19974:42:0;;;;;;;;;;;;;20036:21;:6;20047:9;20036:10;:21::i;:::-;20029:28;19732:333;-1:-1:-1;;;;19732:333:0:o;1780:345::-;1866:7;1968:12;1961:5;1953:28;;;;-1:-1:-1;;;1953:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1992:9;2008:1;2004;:5;;;;;;;1780:345;-1:-1:-1;;;;;1780:345:0:o

Swarm Source

ipfs://3e556e4eefe8341bca67af551892f4ba66868ac76fdb908b50d8c4fc7536ef6e
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.