Contract 0x16a19ae876272fb9cc8df78a116c63cc1562270b

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xfc5f081244f30a602e8276b91ebd98bc8642c325021ecb420f0e7f5401c59107Approve140087852024-05-19 12:55:3614 hrs 58 mins ago0x0c72da1e0729f2ea4271d1e00ec9e314945b6276 IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.234325050
0x2af409eb809b85194a8d87a20005062e7637d58b10ec2ad45593982dbac26b36Approve139991832024-05-18 21:46:491 day 6 hrs ago0xdfc33a42214c149dd0e010d7c5ae69df8825a518 IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.234325050
0x827cd70dc3d51c5b9f3351de56c6031be80321daaa8fc50ae3a23001dfa9dca0Approve139967932024-05-18 17:59:061 day 9 hrs ago0x03e138509c111c761d92a71b036f457429722792 IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.2343160305 5,048.5
0x9f152fa2b54bc2cc446427801b8e58495d744e4e47209e29c7f3aaf8ea60a999Approve139808702024-05-17 16:43:352 days 11 hrs agoCronos ID Name prabhakerbalu.cro IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.146091450
0x1c730c294401b0d343caa199fd4118eaba6677698166d1aad1142f12fefaaed6Approve139808302024-05-17 16:39:452 days 11 hrs agoCronos ID Name prabhakerbalu.cro IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.26954349750
0x3ceeeef3d1c89489a59472910745bdc56a8f8e56d26d68944b48388c1853f524Approve139709602024-05-17 0:59:173 days 2 hrs agoCronos ID Name prabhakerbalu.cro IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.146091450
0x708ec1ae3addc0ff685c2bbb51a5013379dff66272b91b471b48c7144e3ab820Approve139626462024-05-16 11:48:193 days 16 hrs agoCronos ID Name prabhakerbalu.cro IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.26954349750
0x955747e5e16623449fc5b3637e47cf9e73e259f400e281b1fe83ede8571aea6eApprove139625602024-05-16 11:40:053 days 16 hrs agoCronos ID Name prabhakerbalu.cro IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.146091450
0x619741d41f0b4038b6757b782039df79481f48373d8faac7831fc1d6cafb9985Transfer139589932024-05-16 6:00:493 days 21 hrs ago0x36f263d5b497efddfb97424aa28a8c391e77ffcb IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO1.010
0x4133303773792833422cc4096edec07c6d0008b4d15556bce643917f17f74347Approve139571732024-05-16 3:08:164 days 45 mins agoCronos ID Name usearubber.cro IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.232870650
0x49c2c01472881cea71aa38505c90b5424058c62f98b9436ca57653362ba18f31Approve139569662024-05-16 2:48:404 days 1 hr agoCronos ID Name usearubber.cro IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.232870650
0xb3cea71301faecd7f55fa9c8a4d89128c2adc3cf43922e408a319517cdac47ddApprove139569582024-05-16 2:47:534 days 1 hr agoCronos ID Name usearubber.cro IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.131951450
0x0cd46faeeb5cba075c85c21411d68ff31bc453750fca2908adb01b6a03cda75aTransfer139483112024-05-15 13:05:254 days 14 hrs agoCronos ID Name greenstix.cro IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO1.256670562502 5,045.63365
0x554ae069d86ad7a151fdc834e936a21f16a56bf8d548dc4d78f18eb7c19d1f2bApprove139417142024-05-15 2:39:035 days 1 hr ago0x9f34752df45e27bb74fbcf3571afbde8f23a9273 IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.234325050
0xafc07e10ccb4f1559112b7352f1d2116e40295e45e2765190bd6d18c64005d1dApprove139344972024-05-14 15:13:275 days 12 hrs agoCronos ID Name prabhakerbalu.cro IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.26954349750
0xf8fc1be9167f10cd6016a9fd1cb729fdb981aa759ab2f716cbaa85c7377e7f8fApprove139344812024-05-14 15:11:545 days 12 hrs agoCronos ID Name sajan.cro IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.23432505 5,050
0x355c7dfad1f255e3a3925389e8fa09537aa70b64a20bb8c44cda732c86960a88Approve139264952024-05-14 2:33:486 days 1 hr ago0x0c72da1e0729f2ea4271d1e00ec9e314945b6276 IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.26954349750
0xea58d73a2f3a1e507cb94f367ae699e1540dde45e70e821a430cb8e84e081fabApprove139230542024-05-13 21:08:086 days 6 hrs ago0x8594bc4345570e6f0e9a4528d862d48f31280187 IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.234385650
0x02312d9d1188d201970b2eab2a7dc7608a55a1fb81b55d713cbc346e46edbd90Approve139230142024-05-13 21:04:216 days 6 hrs ago0x8594bc4345570e6f0e9a4528d862d48f31280187 IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.26954349750
0xbdedffb700aa40409d327db160adbd5d5b8af8b94fc824a30320e4a0fd459cd6Approve139106372024-05-13 1:31:017 days 2 hrs agoCronos ID Name bones.cro IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.234325050
0x746fc481450a8322236d7b5a4fd19e9d6da6939c8d4d81201cf9234624a86de4Approve139003182024-05-12 9:12:437 days 18 hrs agoCronos ID Name badbananas.cro IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.245487825 5,325
0xbb5fd42eb18e16190ac1824244af66b4dc551eaae4aa15308397be4ffcb3345eApprove138990092024-05-12 7:08:357 days 20 hrs agoCronos ID Name up0nly.cro IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.15326010
0x2502a89b92277c409c850ec5b9312999d6a9581f551cb417e3afea33ae8a4cabApprove138986082024-05-12 6:30:297 days 21 hrs ago0xbc4eb1fc180782740dede75bb1e546a01816f027 IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.232749450
0x661091faa839e360a00d2bc1ea81b7591a3f558d44745108956879422ca49acbApprove138926442024-05-11 21:04:008 days 6 hrs ago0xa94d87c05652ea90d8d2bc448cc2f06727e80af9 IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.14603085 5,050
0x0bd5884b1277330149f43dd731f8d1c7f0cb41e54b33a0ed3d65a8b2afa7ae1bApprove138617352024-05-09 20:02:3310 days 7 hrs ago0xc05f6e693a727aca4c605dd413a6b751b2ca87c3 IN  0x16a19ae876272fb9cc8df78a116c63cc1562270b0 CRO0.234385650
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x6a36f209fc63ed93c1c02a868f4a000863fb6ecb3ad5859220c0a11160aa3e04139569682024-05-16 2:48:514 days 1 hr ago 0x16a19ae876272fb9cc8df78a116c63cc1562270b 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be7.7625543467316744 CRO
0x6a36f209fc63ed93c1c02a868f4a000863fb6ecb3ad5859220c0a11160aa3e04139569682024-05-16 2:48:514 days 1 hr ago 0x16a19ae876272fb9cc8df78a116c63cc1562270b0x6f517e0885fc093c6caaea788b2c79d5676f20943.881277173365837201 CRO
0x6a36f209fc63ed93c1c02a868f4a000863fb6ecb3ad5859220c0a11160aa3e04139569682024-05-16 2:48:514 days 1 hr ago 0x16a19ae876272fb9cc8df78a116c63cc1562270bCronos ID Name greenstix.cro11.643831520097511601 CRO
0x6a36f209fc63ed93c1c02a868f4a000863fb6ecb3ad5859220c0a11160aa3e04139569682024-05-16 2:48:514 days 1 hr ago 0x16a19ae876272fb9cc8df78a116c63cc1562270b 0xfd2a584157b7c595e5b0146f92eeb50464a6ed2038.812771733658372001 CRO
0x6a36f209fc63ed93c1c02a868f4a000863fb6ecb3ad5859220c0a11160aa3e04139569682024-05-16 2:48:514 days 1 hr ago 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be 0x16a19ae876272fb9cc8df78a116c63cc1562270b62.100434773853395203 CRO
0x3687c73011e198357a62f0e5985fecf417b546b4326183768af5d8905e727c66139493172024-05-15 14:41:104 days 13 hrs ago 0x16a19ae876272fb9cc8df78a116c63cc1562270b 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be6.813298207576966497 CRO
0x3687c73011e198357a62f0e5985fecf417b546b4326183768af5d8905e727c66139493172024-05-15 14:41:104 days 13 hrs ago 0x16a19ae876272fb9cc8df78a116c63cc1562270b0x6f517e0885fc093c6caaea788b2c79d5676f20943.406649103788483249 CRO
0x3687c73011e198357a62f0e5985fecf417b546b4326183768af5d8905e727c66139493172024-05-15 14:41:104 days 13 hrs ago 0x16a19ae876272fb9cc8df78a116c63cc1562270bCronos ID Name greenstix.cro10.219947311365449747 CRO
0x3687c73011e198357a62f0e5985fecf417b546b4326183768af5d8905e727c66139493172024-05-15 14:41:104 days 13 hrs ago 0x16a19ae876272fb9cc8df78a116c63cc1562270b 0xfd2a584157b7c595e5b0146f92eeb50464a6ed2034.066491037884832486 CRO
0x3687c73011e198357a62f0e5985fecf417b546b4326183768af5d8905e727c66139493172024-05-15 14:41:104 days 13 hrs ago 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be 0x16a19ae876272fb9cc8df78a116c63cc1562270b54.506385660615731979 CRO
0xbd52f057ee6e4ae32db00d5727dd83e8f996132e3fe42573fd5d449e60bc6c31139091592024-05-12 23:11:077 days 4 hrs ago 0x16a19ae876272fb9cc8df78a116c63cc1562270b 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be19.229070579190592136 CRO
0xbd52f057ee6e4ae32db00d5727dd83e8f996132e3fe42573fd5d449e60bc6c31139091592024-05-12 23:11:077 days 4 hrs ago 0x16a19ae876272fb9cc8df78a116c63cc1562270b0x6f517e0885fc093c6caaea788b2c79d5676f20949.614535289595296069 CRO
0xbd52f057ee6e4ae32db00d5727dd83e8f996132e3fe42573fd5d449e60bc6c31139091592024-05-12 23:11:077 days 4 hrs ago 0x16a19ae876272fb9cc8df78a116c63cc1562270bCronos ID Name greenstix.cro28.843605868785888205 CRO
0xbd52f057ee6e4ae32db00d5727dd83e8f996132e3fe42573fd5d449e60bc6c31139091592024-05-12 23:11:077 days 4 hrs ago 0x16a19ae876272fb9cc8df78a116c63cc1562270b 0xfd2a584157b7c595e5b0146f92eeb50464a6ed2096.145352895952960681 CRO
0xbd52f057ee6e4ae32db00d5727dd83e8f996132e3fe42573fd5d449e60bc6c31139091592024-05-12 23:11:077 days 4 hrs ago 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be 0x16a19ae876272fb9cc8df78a116c63cc1562270b153.832564633524737091 CRO
0xbfcb81c0f1a349fb3194edd674393b9640f7fefcc29c69eb45d6952d597b76e9139090522024-05-12 23:00:597 days 4 hrs ago 0x16a19ae876272fb9cc8df78a116c63cc1562270b 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be20.552256576239926776 CRO
0xbfcb81c0f1a349fb3194edd674393b9640f7fefcc29c69eb45d6952d597b76e9139090522024-05-12 23:00:597 days 4 hrs ago 0x16a19ae876272fb9cc8df78a116c63cc1562270b0x6f517e0885fc093c6caaea788b2c79d5676f209410.276128288119963389 CRO
0xbfcb81c0f1a349fb3194edd674393b9640f7fefcc29c69eb45d6952d597b76e9139090522024-05-12 23:00:597 days 4 hrs ago 0x16a19ae876272fb9cc8df78a116c63cc1562270bCronos ID Name greenstix.cro30.828384864359890165 CRO
0xbfcb81c0f1a349fb3194edd674393b9640f7fefcc29c69eb45d6952d597b76e9139090522024-05-12 23:00:597 days 4 hrs ago 0x16a19ae876272fb9cc8df78a116c63cc1562270b 0xfd2a584157b7c595e5b0146f92eeb50464a6ed20102.761282881199633883 CRO
0xbfcb81c0f1a349fb3194edd674393b9640f7fefcc29c69eb45d6952d597b76e9139090522024-05-12 23:00:597 days 4 hrs ago 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be 0x16a19ae876272fb9cc8df78a116c63cc1562270b164.339124686842520389 CRO
0x7e85ddbf4075f52cfee34785e62c634a7cc2016bde6331e560f703b54b37f535139081122024-05-12 21:32:057 days 6 hrs ago 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be 0x16a19ae876272fb9cc8df78a116c63cc1562270b0.078927923076893824 CRO
0x7e85ddbf4075f52cfee34785e62c634a7cc2016bde6331e560f703b54b37f535139081122024-05-12 21:32:057 days 6 hrs ago 0x16a19ae876272fb9cc8df78a116c63cc1562270b 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be62.668022330990942486 CRO
0x7e85ddbf4075f52cfee34785e62c634a7cc2016bde6331e560f703b54b37f535139081122024-05-12 21:32:057 days 6 hrs ago 0x16a19ae876272fb9cc8df78a116c63cc1562270b0x6f517e0885fc093c6caaea788b2c79d5676f209431.334011165495471244 CRO
0x7e85ddbf4075f52cfee34785e62c634a7cc2016bde6331e560f703b54b37f535139081122024-05-12 21:32:057 days 6 hrs ago 0x16a19ae876272fb9cc8df78a116c63cc1562270bCronos ID Name greenstix.cro94.002033496486413729 CRO
0x7e85ddbf4075f52cfee34785e62c634a7cc2016bde6331e560f703b54b37f535139081122024-05-12 21:32:057 days 6 hrs ago 0x16a19ae876272fb9cc8df78a116c63cc1562270b 0xfd2a584157b7c595e5b0146f92eeb50464a6ed20313.34011165495471243 CRO
[ Download CSV Export 
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GreenStixV2

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-12-13
*/

//Follow on Twitter @StixGreen 
//Mint an NFT on corgistudio and get your own real tree

//SPDX-License-Identifier: Unlicensed
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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

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

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

    IDEXRouter router;
    address routerAddress = 0xeC0A7a0C2439E8Cb67b992b12ecd020Ea943c7Be;
    IBEP20 RewardToken = IBEP20(0xc21223249CA28397B4B6541dfFaEcC539BfF0c59);

    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;

    uint256 public minPeriod = 30 minutes ;
    uint256 public minDistribution = 1 / 100000 * (10 ** 18);

    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(routerAddress);
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    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 = RewardToken.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(RewardToken);

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

        uint256 amount = RewardToken.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 iterations = 0;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        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);
            RewardToken.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 {

        require(shouldDistribute(msg.sender), "Too soon. Need to wait!");
        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();
    }
}

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

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

    string constant _name = "GreenStix V2";
    string constant _symbol = "GRNSTX V2";
    uint8 constant _decimals = 9;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address routerAddress = 0xeC0A7a0C2439E8Cb67b992b12ecd020Ea943c7Be;
    address RewardToken = 0xc21223249CA28397B4B6541dfFaEcC539BfF0c59;

    uint256 _totalSupply = 10* 10**11 * (10 ** _decimals);
    uint256 public _maxTxAmount = 1 * 10**10 * (10 ** _decimals);
    uint256 public _walletMax = 1 * 10**10 * (10 ** _decimals);
    
    bool public restrictWhales = true;

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

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

    uint256 public liquidityFee = 2;
    uint256 public marketingFee = 2;
    uint256 public rewardsFee = 5;
    uint256 public extraFeeOnSell = 0;

    uint256 public totalFee = 0;
    uint256 public totalFeeIfSelling = 0;

    address public autoLiquidityReceiver;
    address public marketingWallet;
    address public devWallet;

    IDEXRouter public router;
    address public pair;

    uint256 public launchedAt;
    bool public tradingOpen = false;

    DividendDistributor public dividendDistributor;
    uint256 distributorGas = 300000;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    uint256 public swapThreshold = 1 * 10**9 * (10 ** _decimals);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

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

        dividendDistributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;

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

        isDividendExempt[pair] = true;
        isDividendExempt[msg.sender] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;

        // NICE!
        autoLiquidityReceiver = 0x6F517E0885fC093C6cAaEA788b2C79D5676f2094;
        marketingWallet = 0xcC1E00A7EC874282075Ac89Fd42e416294fa1d7b;
        devWallet = 0x6F517E0885fC093C6cAaEA788b2C79D5676f2094;
        
        totalFee = liquidityFee.add(marketingFee).add(rewardsFee);
        totalFeeIfSelling = totalFee.add(extraFeeOnSell);

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

    receive() external payable { }

    function name() external pure override returns (string memory) { return _name; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function getOwner() external view override returns (address) { return owner; }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    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 launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
    }

    function changeTxLimit(uint256 newLimit) external authorized {
        _maxTxAmount = newLimit;
    }

    function changeWalletLimit(uint256 newLimit) external authorized {
        _walletMax  = newLimit;
    }

    function changeRestrictWhales(bool newValue) external authorized {
       restrictWhales = newValue;
    }
    
    function changeIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

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

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

    function changeFees(uint256 newLiqFee, uint256 newRewardFee, uint256 newMarketingFee, uint256 newExtraSellFee) external authorized {
        liquidityFee = newLiqFee;
        rewardsFee = newRewardFee;
        marketingFee = newMarketingFee;
        extraFeeOnSell = newExtraSellFee;
        
        totalFee = liquidityFee.add(marketingFee).add(rewardsFee);
        totalFeeIfSelling = totalFee.add(extraFeeOnSell);
    }

    function changeFeeReceivers(address newLiquidityReceiver, address newMarketingWallet, address newDevWallet) external authorized {
        autoLiquidityReceiver = newLiquidityReceiver;
        marketingWallet = newMarketingWallet;
        devWallet = newDevWallet;
    }

    function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit, bool swapByLimitOnly) external authorized {
        swapAndLiquifyEnabled  = enableSwapBack;
        swapThreshold = newSwapBackLimit;
        swapAndLiquifyByLimitOnly = swapByLimitOnly;
    }

    function changeDistributionCriteria(uint256 newinPeriod, uint256 newMinDistribution) external authorized {
        dividendDistributor.setDistributionCriteria(newinPeriod, newMinDistribution);
    }

    function changeDistributorSettings(uint256 gas) external authorized {
        require(gas < 300000);
        distributorGas = gas;
    }
    
    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);
    }

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

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

        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");

        if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){ swapBack(); }

        if(!launched() && recipient == pair) {
            require(_balances[sender] > 0);
            launch();
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        
        if(!isTxLimitExempt[recipient] && restrictWhales)
        {
            require(_balances[recipient].add(amount) <= _walletMax);
        }

        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

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

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

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

        emit Transfer(sender, recipient, finalAmount);
        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 takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee;
        uint256 feeAmount = amount.mul(feeApplicable).div(100);

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

        return amount.sub(feeAmount);
    }

    function tradingStatus(bool newStatus) public onlyOwner {
        tradingOpen = newStatus;
    }

    function swapBack() internal lockTheSwap {
        
        uint256 tokensToLiquify = _balances[address(this)];
        uint256 amountToLiquify = tokensToLiquify.mul(liquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

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

        uint256 amountBNB = address(this).balance;

        uint256 totalBNBFee = totalFee.sub(liquidityFee.div(2));
        
        uint256 amountBNBLiquidity = amountBNB.mul(liquidityFee).div(totalBNBFee).div(2);
        uint256 amountBNBReflection = amountBNB.mul(rewardsFee).div(totalBNBFee);
        uint256 amountBNBMarketing = amountBNB.sub(amountBNBLiquidity).sub(amountBNBReflection);

        try dividendDistributor.deposit{value: amountBNBReflection}() {} catch {}
        
        uint256 marketingShare = amountBNBMarketing.mul(3).div(4);
        uint256 devShare = amountBNBMarketing.sub(marketingShare);
        
        (bool tmpSuccess,) = payable(marketingWallet).call{value: marketingShare, gas: 30000}("");
        (bool tmpSuccess1,) = payable(devWallet).call{value: devShare, gas: 30000}("");
        
        // only to supress warning msg
        tmpSuccess = false;
        tmpSuccess1 = false;

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

    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);

}

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":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"newinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"changeDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"changeDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityReceiver","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"changeFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiqFee","type":"uint256"},{"internalType":"uint256","name":"newRewardFee","type":"uint256"},{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newExtraSellFee","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"},{"internalType":"bool","name":"swapByLimitOnly","type":"bool"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"extraFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","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":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","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":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","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":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","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":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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":"totalFeeIfSelling","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":"newStatus","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"}]

6080604052600280546001600160a01b031990811661dead178255600380548216905560048054821673ec0a7a0c2439e8cb67b992b12ecd020ea943c7be1790556005805490911673c21223249ca28397b4b6541dffaecc539bff0c59178155683635c9adc5dea00000600655678ac7230489e8000060078190556008556009805460ff19908116600117909155600f839055601092909255601155600060128190556013819055601455601b80549091169055620493e0601c55601d805462ff00001961ff001990911661010017169055670de0b6b3a7640000601e55348015620000ea57600080fd5b50600080546001600160a01b0319908116339081178355825260016020818152604093849020805460ff191690921790915560048054601880549094166001600160a01b039182161793849055845163c45a015560e01b8152945193169363c45a01559381830193929091829003018186803b1580156200016a57600080fd5b505afa1580156200017f573d6000803e3d6000fd5b505050506040513d60208110156200019657600080fd5b5051601854604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693169163ad5c4648916004808301926020929190829003018186803b158015620001e557600080fd5b505afa158015620001fa573d6000803e3d6000fd5b505050506040513d60208110156200021157600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b1580156200026157600080fd5b505af115801562000276573d6000803e3d6000fd5b505050506040513d60208110156200028d57600080fd5b5051601980546001600160a01b0319166001600160a01b03928316179055306000908152600b6020908152604080832060188054861685529252918290206000199055549051911690620002e19062000545565b6001600160a01b03909116815260405190819003602001906000f0801580156200030f573d6000803e3d6000fd5b50601b8054610100600160a81b0319166101006001600160a01b0393841602179055336000818152600c60209081526040808320805460ff199081166001908117909255308086528386208054831684179055868652600d85528386208054831684179055601980548916875284872080548416851790555488168652600e855283862080548316841790559585528285208054821683179055948452818420805486168217905560025486168452818420805486168217905560035490951683529091208054909216909217905560158054736f517e0885fc093c6caaea788b2c79d5676f20946001600160a01b031991821681179092556016805473cc1e00a7ec874282075ac89fd42e416294fa1d7b908316179055601780549091169091179055601154601054600f546200046a93620004569290620004e3811b620016b117901c565b620004e360201b620016b11790919060201c565b6013819055506200048e601254601354620004e360201b620016b11790919060201c565b601455600654336000818152600a60209081526040808320859055805194855251929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a362000553565b6000828201838110156200053e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b610f788062002a5e83390190565b6124fb80620005636000396000f3fe6080604052600436106103035760003560e01c80637db1342c11610190578063bf56b371116100dc578063e66b1d1e11610095578063f887ea401161006f578063f887ea4014610ac8578063fabe628314610add578063fe9fbb8014610b18578063ffb54a9914610b4b5761030a565b8063e66b1d1e14610a36578063f0b37c0414610a62578063f2fde38b14610a955761030a565b8063bf56b3711461097d578063ca33e64c14610992578063ca987b0e146109a7578063d920334e146109bc578063da00097d146109e6578063dd62ed3e146109fb5761030a565b806398118cb411610149578063a9059cbb11610123578063a9059cbb146108cc578063a9f7864b14610905578063b6a5d7de14610935578063bad3ea6a146109685761030a565b806398118cb414610867578063a3a2e89e1461087c578063a8aa1b31146108b75761030a565b80637db1342c146107b6578063807c2d9c146107e0578063893d20e8146107f55780638b42507f1461080a5780638ea5220f1461083d57806395d89b41146108525761030a565b80633f4218e01161024f578063650c42261161020857806370a08231116101e257806370a082311461070257806375f0a87414610735578063773fcb5c146107665780637d1db4a5146107a15761030a565b8063650c42261461069c57806369cf17d4146106d85780636b67c4df146106ed5761030a565b80633f4218e0146105af5780634355855a146105e257806344de2e4c14610615578063479f66d81461062a5780634a74bb0214610654578063571ac8b0146106695761030a565b806323b872dd116102bc5780632f54bf6e116102965780632f54bf6e146104d2578063313ce56714610505578063315dca291461053057806334c70889146105755761030a565b806323b872dd146104655780632b112e49146104a85780632bb14e1d146104bd5761030a565b80630445b6671461030f57806306fdde0314610336578063095ea7b3146103c05780630d2959801461040d57806318160ddd1461043b5780631df4ccfc146104505761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610b60565b60408051918252519081900360200190f35b34801561034257600080fd5b5061034b610b66565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561038557818101518382015260200161036d565b50505050905090810190601f1680156103b25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103cc57600080fd5b506103f9600480360360408110156103e357600080fd5b506001600160a01b038135169060200135610b8c565b604080519115158252519081900360200190f35b34801561041957600080fd5b506104396004803603602081101561043057600080fd5b50351515610bf3565b005b34801561044757600080fd5b50610324610c49565b34801561045c57600080fd5b50610324610c4f565b34801561047157600080fd5b506103f96004803603606081101561048857600080fd5b506001600160a01b03813581169160208101359091169060400135610c55565b3480156104b457600080fd5b50610324610d17565b3480156104c957600080fd5b50610324610d60565b3480156104de57600080fd5b506103f9600480360360208110156104f557600080fd5b50356001600160a01b0316610d66565b34801561051157600080fd5b5061051a610d7a565b6040805160ff9092168252519081900360200190f35b34801561053c57600080fd5b506104396004803603606081101561055357600080fd5b506001600160a01b038135811691602081013582169160409091013516610d7f565b34801561058157600080fd5b506104396004803603606081101561059857600080fd5b508035151590602081013590604001351515610e06565b3480156105bb57600080fd5b506103f9600480360360208110156105d257600080fd5b50356001600160a01b0316610e80565b3480156105ee57600080fd5b506103f96004803603602081101561060557600080fd5b50356001600160a01b0316610e95565b34801561062157600080fd5b506103f9610eaa565b34801561063657600080fd5b506104396004803603602081101561064d57600080fd5b5035610eb3565b34801561066057600080fd5b506103f9610f0f565b34801561067557600080fd5b506103f96004803603602081101561068c57600080fd5b50356001600160a01b0316610f1d565b3480156106a857600080fd5b50610439600480360360808110156106bf57600080fd5b5080359060208101359060408101359060600135610f2b565b3480156106e457600080fd5b50610324610fb6565b3480156106f957600080fd5b50610324610fbc565b34801561070e57600080fd5b506103246004803603602081101561072557600080fd5b50356001600160a01b0316610fc2565b34801561074157600080fd5b5061074a610fdd565b604080516001600160a01b039092168252519081900360200190f35b34801561077257600080fd5b506104396004803603604081101561078957600080fd5b506001600160a01b0381351690602001351515610fec565b3480156107ad57600080fd5b50610324611189565b3480156107c257600080fd5b50610439600480360360208110156107d957600080fd5b503561118f565b3480156107ec57600080fd5b506103246111dc565b34801561080157600080fd5b5061074a6111e2565b34801561081657600080fd5b506103f96004803603602081101561082d57600080fd5b50356001600160a01b03166111f1565b34801561084957600080fd5b5061074a611206565b34801561085e57600080fd5b5061034b611215565b34801561087357600080fd5b50610324611238565b34801561088857600080fd5b506104396004803603604081101561089f57600080fd5b506001600160a01b038135169060200135151561123e565b3480156108c357600080fd5b5061074a6112b1565b3480156108d857600080fd5b506103f9600480360360408110156108ef57600080fd5b506001600160a01b0381351690602001356112c0565b34801561091157600080fd5b506104396004803603604081101561092857600080fd5b50803590602001356112cd565b34801561094157600080fd5b506104396004803603602081101561095857600080fd5b50356001600160a01b0316611378565b34801561097457600080fd5b5061074a6113e2565b34801561098957600080fd5b506103246113f6565b34801561099e57600080fd5b5061074a6113fc565b3480156109b357600080fd5b5061032461140b565b3480156109c857600080fd5b50610439600480360360208110156109df57600080fd5b5035611411565b3480156109f257600080fd5b506103f961145e565b348015610a0757600080fd5b5061032460048036036040811015610a1e57600080fd5b506001600160a01b038135811691602001351661146d565b348015610a4257600080fd5b5061043960048036036020811015610a5957600080fd5b50351515611498565b348015610a6e57600080fd5b5061043960048036036020811015610a8557600080fd5b50356001600160a01b03166114f3565b348015610aa157600080fd5b5061043960048036036020811015610ab857600080fd5b50356001600160a01b0316611557565b348015610ad457600080fd5b5061074a611608565b348015610ae957600080fd5b5061043960048036036040811015610b0057600080fd5b506001600160a01b0381351690602001351515611617565b348015610b2457600080fd5b506103f960048036036020811015610b3b57600080fd5b50356001600160a01b031661168a565b348015610b5757600080fd5b506103f96116a8565b601e5481565b60408051808201909152600c81526b23b932b2b729ba34bc102b1960a11b602082015290565b336000818152600b602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b610bfc33610d66565b610c36576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601b805460ff1916911515919091179055565b60065490565b60135481565b6001600160a01b0383166000908152600b6020908152604080832033845290915281205460001914610d02576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600b82528381203382529091529190912054610cdd91849061170b565b6001600160a01b0385166000908152600b602090815260408083203384529091529020555b610d0d8484846117a2565b90505b9392505050565b600354600090610d5b90610d33906001600160a01b0316610fc2565b600254610d5590610d4c906001600160a01b0316610fc2565b60065490611cbe565b90611cbe565b905090565b60115481565b6000546001600160a01b0390811691161490565b600990565b610d883361168a565b610dc7576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601580546001600160a01b039485166001600160a01b031991821617909155601680549385169382169390931790925560178054919093169116179055565b610e0f3361168a565b610e4e576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601d8054601e93909355901515620100000262ff0000199315156101000261ff00199093169290921792909216179055565b600c6020526000908152604090205460ff1681565b600e6020526000908152604090205460ff1681565b60095460ff1681565b610ebc3361168a565b610efb576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b620493e08110610f0a57600080fd5b601c55565b601d54610100900460ff1681565b6000610bed82600019610b8c565b610f343361168a565b610f73576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600f849055601183905560108290556012819055610f9b83610f9586856116b1565b906116b1565b6013819055601254610fad91906116b1565b60145550505050565b60125481565b60105481565b6001600160a01b03166000908152600a602052604090205490565b6016546001600160a01b031681565b610ff53361168a565b611034576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b038216301480159061105b57506019546001600160a01b03838116911614155b61106457600080fd5b6001600160a01b0382166000908152600e60205260409020805460ff1916821580159190911790915561110657601b5460408051630a5b654b60e11b81526001600160a01b038581166004830152600060248301819052925161010090940416926314b6ca969260448084019391929182900301818387803b1580156110e957600080fd5b505af11580156110fd573d6000803e3d6000fd5b50505050611185565b601b546001600160a01b038381166000818152600a6020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b15801561116c57600080fd5b505af1158015611180573d6000803e3d6000fd5b505050505b5050565b60075481565b6111983361168a565b6111d7576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600855565b60085481565b6000546001600160a01b031690565b600d6020526000908152604090205460ff1681565b6017546001600160a01b031681565b60408051808201909152600981526823a92729aa2c102b1960b91b602082015290565b600f5481565b6112473361168a565b611286576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6019546001600160a01b031681565b6000610d103384846117a2565b6112d63361168a565b611315576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601b60019054906101000a90046001600160a01b03166001600160a01b0316632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561116c57600080fd5b61138133610d66565b6113bb576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b601b5461010090046001600160a01b031681565b601a5481565b6015546001600160a01b031681565b60145481565b61141a3361168a565b611459576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600755565b601d5462010000900460ff1681565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b6114a13361168a565b6114e0576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6009805460ff1916911515919091179055565b6114fc33610d66565b611536576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600160205260409020805460ff19169055565b61156033610d66565b61159a576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff1916909217909155825191825291517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163929181900390910190a150565b6018546001600160a01b031681565b6116203361168a565b61165f576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b601b5460ff1681565b600082820183811015610d10576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000818484111561179a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561175f578181015183820152602001611747565b50505050905090810190601f16801561178c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b601d5460009060ff16156117c2576117bb848484611d00565b9050610d10565b6001600160a01b03841660009081526001602052604090205460ff1615801561180457506001600160a01b03831660009081526001602052604090205460ff16155b1561185757601b5460ff16611857576040805162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b604482015290519081900360640190fd5b6007548211158061188057506001600160a01b0384166000908152600d602052604090205460ff165b6118c5576040805162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015290519081900360640190fd5b6019546001600160a01b031633148015906118e35750601d5460ff16155b80156118f65750601d54610100900460ff165b80156119135750601e54306000908152600a602052604090205410155b1561192057611920611de1565b6119286122dc565b15801561194257506019546001600160a01b038481169116145b15611971576001600160a01b0384166000908152600a602052604090205461196957600080fd5b6119716122e4565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600a90915291909120546119c391849061170b565b6001600160a01b038086166000908152600a60209081526040808320949094559186168152600d909152205460ff16158015611a01575060095460ff165b15611a37576008546001600160a01b0384166000908152600a6020526040902054611a2c90846116b1565b1115611a3757600080fd5b6001600160a01b0384166000908152600c602052604081205460ff16158015611a7957506001600160a01b0384166000908152600c602052604090205460ff16155b611a835782611a8e565b611a8e8585856122ea565b6001600160a01b0385166000908152600a6020526040902054909150611ab490826116b1565b6001600160a01b038086166000908152600a60209081526040808320949094559188168152600e909152205460ff16611b6057601b546001600160a01b038681166000818152600a6020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b158015611b4d57600080fd5b505af1925050508015611b5e575060015b505b6001600160a01b0384166000908152600e602052604090205460ff16611bf957601b546001600160a01b038581166000818152600a6020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b158015611be657600080fd5b505af1925050508015611bf7575060015b505b601b60019054906101000a90046001600160a01b03166001600160a01b031663ffb2c479601c546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c5657600080fd5b505af1925050508015611c67575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b6000610d1083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061170b565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600a90915291822054611d5191849061170b565b6001600160a01b038086166000908152600a60205260408082209390935590851681522054611d8090836116b1565b6001600160a01b038085166000818152600a602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b601d805460ff19166001179055306000908152600a6020526040812054601354600f54919291611e2291600291611e1c9190829087906123a9565b90612402565b90506000611e308383611cbe565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611e6457fe5b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611eb857600080fd5b505afa158015611ecc573d6000803e3d6000fd5b505050506040513d6020811015611ee257600080fd5b5051815182906001908110611ef357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050601860009054906101000a90046001600160a01b03166001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015611fad578181015183820152602001611f95565b505050509050019650505050505050600060405180830381600087803b158015611fd657600080fd5b505af1158015611fea573d6000803e3d6000fd5b5050600f544792506000915061200e90612005906002612402565b60135490611cbe565b905060006120306002611e1c84611e1c600f54886123a990919063ffffffff16565b9050600061204d83611e1c601154876123a990919063ffffffff16565b9050600061205f82610d558786611cbe565b9050601b60019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156120b157600080fd5b505af1935050505080156120c3575060015b5060006120d66004611e1c8460036123a9565b905060006120e48383611cbe565b6016546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d806000811461213b576040519150601f19603f3d011682016040523d82523d6000602084013e612140565b606091505b50506017546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d8060008114612199576040519150601f19603f3d011682016040523d82523d6000602084013e61219e565b606091505b5060009350839250508c1590506122c357601860009054906101000a90046001600160a01b03166001600160a01b031663f305d71988308f600080601560009054906101000a90046001600160a01b0316426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b15801561225a57600080fd5b505af115801561226e573d6000803e3d6000fd5b50505050506040513d606081101561228557600080fd5b505060408051888152602081018e905281517f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506929181900390910190a15b5050601d805460ff191690555050505050505050505050565b601a54151590565b43601a55565b60195460009081906001600160a01b0385811691161461230c57601354612310565b6014545b905060006123236064611e1c86856123a9565b306000908152600a602052604090205490915061234090826116b1565b306000818152600a6020908152604091829020939093558051848152905191926001600160a01b038a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a361239f8482611cbe565b9695505050505050565b6000826123b857506000610bed565b828202828482816123c557fe5b0414610d105760405162461bcd60e51b81526004018080602001828103825260218152602001806124a56021913960400191505060405180910390fd5b6000610d1083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506000818361248e5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561175f578181015183820152602001611747565b50600083858161249a57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212206bceebe04db11735379739847298332c77e37f5a8773e34d25d90a49421a7d5264736f6c634300070600336080604052600280546001600160a01b031990811673ec0a7a0c2439e8cb67b992b12ecd020ea943c7be179091556003805490911673c21223249ca28397b4b6541dffaecc539bff0c591790556ec097ce7bc90715b34b9f1000000000600c55610708600d556509184e72a000600e5534801561007b57600080fd5b50604051610f78380380610f788339818101604052602081101561009e57600080fd5b50516001600160a01b0381166100bf576002546001600160a01b03166100c1565b805b600180546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610e7d806100fb6000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610254578063f0fc6bca14610269578063ffb2c4791461027e578063ffd49c84146102a8576100dd565b8063ce7c2ac2146101e6578063d0e30db014610237578063e2d2e2191461023f576100dd565b80632d48e896116100bb5780632d48e896146101775780633a98ef39146101a75780634fab0ae8146101bc578063997664d7146101d1576100dd565b806311ce023d146100e257806314b6ca961461010957806328fd319814610144575b600080fd5b3480156100ee57600080fd5b506100f76102bd565b60408051918252519081900360200190f35b34801561011557600080fd5b506101426004803603604081101561012c57600080fd5b506001600160a01b0381351690602001356102c3565b005b34801561015057600080fd5b506100f76004803603602081101561016757600080fd5b50356001600160a01b03166103e8565b34801561018357600080fd5b506101426004803603604081101561019a57600080fd5b5080359060200135610474565b3480156101b357600080fd5b506100f7610496565b3480156101c857600080fd5b506100f761049c565b3480156101dd57600080fd5b506100f76104a2565b3480156101f257600080fd5b506102196004803603602081101561020957600080fd5b50356001600160a01b03166104a8565b60408051938452602084019290925282820152519081900360600190f35b6101426104c9565b34801561024b57600080fd5b506100f76107bf565b34801561026057600080fd5b506100f76107c5565b34801561027557600080fd5b506101426107cb565b34801561028a57600080fd5b50610142600480360360208110156102a157600080fd5b5035610830565b3480156102b457600080fd5b506100f7610915565b600c5481565b6000546001600160a01b031633146102da57600080fd5b6001600160a01b03821660009081526007602052604090205415610301576103018261091b565b60008111801561032757506001600160a01b038216600090815260076020526040902054155b1561033a5761033582610a43565b61036d565b8015801561035f57506001600160a01b03821660009081526007602052604090205415155b1561036d5761036d82610aa4565b6001600160a01b03821660009081526007602052604090205460085461039e91839161039891610b91565b90610bdc565b6008556001600160a01b03821660009081526007602052604090208190556103c581610c36565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b03811660009081526007602052604081205461040d5750600061046f565b6001600160a01b03821660009081526007602052604081205461042f90610c36565b6001600160a01b0384166000908152600760205260409020600101549091508082116104605760009250505061046f565b61046a8282610b91565b925050505b919050565b6000546001600160a01b0316331461048b57600080fd5b600d91909155600e55565b60085481565b600e5481565b60095481565b60076020526000908152604090208054600182015460029092015490919083565b6000546001600160a01b031633146104e057600080fd5b600354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561052b57600080fd5b505afa15801561053f573d6000803e3d6000fd5b505050506040513d602081101561055557600080fd5b505160408051600280825260608201835292935060009290916020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b1580156105c157600080fd5b505afa1580156105d5573d6000803e3d6000fd5b505050506040513d60208110156105eb57600080fd5b5051815182906000906105fa57fe5b6001600160a01b03928316602091820292909201015260035482519116908290600190811061062557fe5b6001600160a01b0392831660209182029290920181019190915260015460405163b6f9de9560e01b815260006004820181815230604484018190524260648501819052608060248601908152895160848701528951969098169763b6f9de9597349795968b969495939460a49091019187810191028083838b5b838110156106b757818101518382015260200161069f565b50505050905001955050505050506000604051808303818588803b1580156106de57600080fd5b505af11580156106f2573d6000803e3d6000fd5b5050600354604080516370a0823160e01b815230600482015290516000955061077d94508793506001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561074b57600080fd5b505afa15801561075f573d6000803e3d6000fd5b505050506040513d602081101561077557600080fd5b505190610b91565b60095490915061078d9082610bdc565b600955600854600c546107b7916107ae916107a89085610c53565b90610cac565b600b5490610bdc565b600b55505050565b600b5481565b600a5481565b6107d433610cee565b610825576040805162461bcd60e51b815260206004820152601760248201527f546f6f20736f6f6e2e204e65656420746f207761697421000000000000000000604482015290519081900360640190fd5b61082e3361091b565b565b6000546001600160a01b0316331461084757600080fd5b600454806108555750610912565b60008060005a90505b848210801561086c57508383105b1561090d5783600f5410610880576000600f555b6108ac6004600f548154811061089257fe5b6000918252602090912001546001600160a01b0316610cee565b156108dd576108dd6004600f54815481106108c357fe5b6000918252602090912001546001600160a01b031661091b565b6108f26108eb5a8390610b91565b8390610bdc565b91505a600f805460019081019091559390930192905061085e565b505050505b50565b600d5481565b6001600160a01b03811660009081526007602052604090205461093d57610912565b6000610948826103e8565b90508015610a3f57600a5461095d9082610bdc565b600a556003546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156109b657600080fd5b505af11580156109ca573d6000803e3d6000fd5b505050506040513d60208110156109e057600080fd5b50506001600160a01b03821660009081526006602090815260408083204290556007909152902060020154610a159082610bdc565b6001600160a01b03831660009081526007602052604090206002810191909155546103c590610c36565b5050565b600480546001600160a01b039092166000818152600560205260408120849055600184018355919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90910180546001600160a01b0319169091179055565b600480546000198101908110610ab657fe5b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610aee57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916000198101908110610b3c57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610b6c57fe5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610bd383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610d2a565b90505b92915050565b600082820183811015610bd3576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000610bd6600c546107a8600b5485610c5390919063ffffffff16565b600082610c6257506000610bd6565b82820282848281610c6f57fe5b0414610bd35760405162461bcd60e51b8152600401808060200182810382526021815260200180610e276021913960400191505060405180910390fd5b6000610bd383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610dc1565b600d546001600160a01b0382166000908152600660205260408120549091429101108015610bd65750600e54610d23836103e8565b1192915050565b60008184841115610db95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d7e578181015183820152602001610d66565b50505050905090810190601f168015610dab5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183610e105760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610d7e578181015183820152602001610d66565b506000838581610e1c57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220e35c74bad3748e9cb2fa0dd1a87b2ca66d06083d5c9ea5cd2fd18d0aeb434e8264736f6c63430007060033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80637db1342c11610190578063bf56b371116100dc578063e66b1d1e11610095578063f887ea401161006f578063f887ea4014610ac8578063fabe628314610add578063fe9fbb8014610b18578063ffb54a9914610b4b5761030a565b8063e66b1d1e14610a36578063f0b37c0414610a62578063f2fde38b14610a955761030a565b8063bf56b3711461097d578063ca33e64c14610992578063ca987b0e146109a7578063d920334e146109bc578063da00097d146109e6578063dd62ed3e146109fb5761030a565b806398118cb411610149578063a9059cbb11610123578063a9059cbb146108cc578063a9f7864b14610905578063b6a5d7de14610935578063bad3ea6a146109685761030a565b806398118cb414610867578063a3a2e89e1461087c578063a8aa1b31146108b75761030a565b80637db1342c146107b6578063807c2d9c146107e0578063893d20e8146107f55780638b42507f1461080a5780638ea5220f1461083d57806395d89b41146108525761030a565b80633f4218e01161024f578063650c42261161020857806370a08231116101e257806370a082311461070257806375f0a87414610735578063773fcb5c146107665780637d1db4a5146107a15761030a565b8063650c42261461069c57806369cf17d4146106d85780636b67c4df146106ed5761030a565b80633f4218e0146105af5780634355855a146105e257806344de2e4c14610615578063479f66d81461062a5780634a74bb0214610654578063571ac8b0146106695761030a565b806323b872dd116102bc5780632f54bf6e116102965780632f54bf6e146104d2578063313ce56714610505578063315dca291461053057806334c70889146105755761030a565b806323b872dd146104655780632b112e49146104a85780632bb14e1d146104bd5761030a565b80630445b6671461030f57806306fdde0314610336578063095ea7b3146103c05780630d2959801461040d57806318160ddd1461043b5780631df4ccfc146104505761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610b60565b60408051918252519081900360200190f35b34801561034257600080fd5b5061034b610b66565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561038557818101518382015260200161036d565b50505050905090810190601f1680156103b25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103cc57600080fd5b506103f9600480360360408110156103e357600080fd5b506001600160a01b038135169060200135610b8c565b604080519115158252519081900360200190f35b34801561041957600080fd5b506104396004803603602081101561043057600080fd5b50351515610bf3565b005b34801561044757600080fd5b50610324610c49565b34801561045c57600080fd5b50610324610c4f565b34801561047157600080fd5b506103f96004803603606081101561048857600080fd5b506001600160a01b03813581169160208101359091169060400135610c55565b3480156104b457600080fd5b50610324610d17565b3480156104c957600080fd5b50610324610d60565b3480156104de57600080fd5b506103f9600480360360208110156104f557600080fd5b50356001600160a01b0316610d66565b34801561051157600080fd5b5061051a610d7a565b6040805160ff9092168252519081900360200190f35b34801561053c57600080fd5b506104396004803603606081101561055357600080fd5b506001600160a01b038135811691602081013582169160409091013516610d7f565b34801561058157600080fd5b506104396004803603606081101561059857600080fd5b508035151590602081013590604001351515610e06565b3480156105bb57600080fd5b506103f9600480360360208110156105d257600080fd5b50356001600160a01b0316610e80565b3480156105ee57600080fd5b506103f96004803603602081101561060557600080fd5b50356001600160a01b0316610e95565b34801561062157600080fd5b506103f9610eaa565b34801561063657600080fd5b506104396004803603602081101561064d57600080fd5b5035610eb3565b34801561066057600080fd5b506103f9610f0f565b34801561067557600080fd5b506103f96004803603602081101561068c57600080fd5b50356001600160a01b0316610f1d565b3480156106a857600080fd5b50610439600480360360808110156106bf57600080fd5b5080359060208101359060408101359060600135610f2b565b3480156106e457600080fd5b50610324610fb6565b3480156106f957600080fd5b50610324610fbc565b34801561070e57600080fd5b506103246004803603602081101561072557600080fd5b50356001600160a01b0316610fc2565b34801561074157600080fd5b5061074a610fdd565b604080516001600160a01b039092168252519081900360200190f35b34801561077257600080fd5b506104396004803603604081101561078957600080fd5b506001600160a01b0381351690602001351515610fec565b3480156107ad57600080fd5b50610324611189565b3480156107c257600080fd5b50610439600480360360208110156107d957600080fd5b503561118f565b3480156107ec57600080fd5b506103246111dc565b34801561080157600080fd5b5061074a6111e2565b34801561081657600080fd5b506103f96004803603602081101561082d57600080fd5b50356001600160a01b03166111f1565b34801561084957600080fd5b5061074a611206565b34801561085e57600080fd5b5061034b611215565b34801561087357600080fd5b50610324611238565b34801561088857600080fd5b506104396004803603604081101561089f57600080fd5b506001600160a01b038135169060200135151561123e565b3480156108c357600080fd5b5061074a6112b1565b3480156108d857600080fd5b506103f9600480360360408110156108ef57600080fd5b506001600160a01b0381351690602001356112c0565b34801561091157600080fd5b506104396004803603604081101561092857600080fd5b50803590602001356112cd565b34801561094157600080fd5b506104396004803603602081101561095857600080fd5b50356001600160a01b0316611378565b34801561097457600080fd5b5061074a6113e2565b34801561098957600080fd5b506103246113f6565b34801561099e57600080fd5b5061074a6113fc565b3480156109b357600080fd5b5061032461140b565b3480156109c857600080fd5b50610439600480360360208110156109df57600080fd5b5035611411565b3480156109f257600080fd5b506103f961145e565b348015610a0757600080fd5b5061032460048036036040811015610a1e57600080fd5b506001600160a01b038135811691602001351661146d565b348015610a4257600080fd5b5061043960048036036020811015610a5957600080fd5b50351515611498565b348015610a6e57600080fd5b5061043960048036036020811015610a8557600080fd5b50356001600160a01b03166114f3565b348015610aa157600080fd5b5061043960048036036020811015610ab857600080fd5b50356001600160a01b0316611557565b348015610ad457600080fd5b5061074a611608565b348015610ae957600080fd5b5061043960048036036040811015610b0057600080fd5b506001600160a01b0381351690602001351515611617565b348015610b2457600080fd5b506103f960048036036020811015610b3b57600080fd5b50356001600160a01b031661168a565b348015610b5757600080fd5b506103f96116a8565b601e5481565b60408051808201909152600c81526b23b932b2b729ba34bc102b1960a11b602082015290565b336000818152600b602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b610bfc33610d66565b610c36576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601b805460ff1916911515919091179055565b60065490565b60135481565b6001600160a01b0383166000908152600b6020908152604080832033845290915281205460001914610d02576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600b82528381203382529091529190912054610cdd91849061170b565b6001600160a01b0385166000908152600b602090815260408083203384529091529020555b610d0d8484846117a2565b90505b9392505050565b600354600090610d5b90610d33906001600160a01b0316610fc2565b600254610d5590610d4c906001600160a01b0316610fc2565b60065490611cbe565b90611cbe565b905090565b60115481565b6000546001600160a01b0390811691161490565b600990565b610d883361168a565b610dc7576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601580546001600160a01b039485166001600160a01b031991821617909155601680549385169382169390931790925560178054919093169116179055565b610e0f3361168a565b610e4e576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601d8054601e93909355901515620100000262ff0000199315156101000261ff00199093169290921792909216179055565b600c6020526000908152604090205460ff1681565b600e6020526000908152604090205460ff1681565b60095460ff1681565b610ebc3361168a565b610efb576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b620493e08110610f0a57600080fd5b601c55565b601d54610100900460ff1681565b6000610bed82600019610b8c565b610f343361168a565b610f73576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600f849055601183905560108290556012819055610f9b83610f9586856116b1565b906116b1565b6013819055601254610fad91906116b1565b60145550505050565b60125481565b60105481565b6001600160a01b03166000908152600a602052604090205490565b6016546001600160a01b031681565b610ff53361168a565b611034576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b038216301480159061105b57506019546001600160a01b03838116911614155b61106457600080fd5b6001600160a01b0382166000908152600e60205260409020805460ff1916821580159190911790915561110657601b5460408051630a5b654b60e11b81526001600160a01b038581166004830152600060248301819052925161010090940416926314b6ca969260448084019391929182900301818387803b1580156110e957600080fd5b505af11580156110fd573d6000803e3d6000fd5b50505050611185565b601b546001600160a01b038381166000818152600a6020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b15801561116c57600080fd5b505af1158015611180573d6000803e3d6000fd5b505050505b5050565b60075481565b6111983361168a565b6111d7576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600855565b60085481565b6000546001600160a01b031690565b600d6020526000908152604090205460ff1681565b6017546001600160a01b031681565b60408051808201909152600981526823a92729aa2c102b1960b91b602082015290565b600f5481565b6112473361168a565b611286576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6019546001600160a01b031681565b6000610d103384846117a2565b6112d63361168a565b611315576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601b60019054906101000a90046001600160a01b03166001600160a01b0316632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561116c57600080fd5b61138133610d66565b6113bb576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b601b5461010090046001600160a01b031681565b601a5481565b6015546001600160a01b031681565b60145481565b61141a3361168a565b611459576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600755565b601d5462010000900460ff1681565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b6114a13361168a565b6114e0576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6009805460ff1916911515919091179055565b6114fc33610d66565b611536576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600160205260409020805460ff19169055565b61156033610d66565b61159a576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff1916909217909155825191825291517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163929181900390910190a150565b6018546001600160a01b031681565b6116203361168a565b61165f576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b601b5460ff1681565b600082820183811015610d10576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000818484111561179a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561175f578181015183820152602001611747565b50505050905090810190601f16801561178c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b601d5460009060ff16156117c2576117bb848484611d00565b9050610d10565b6001600160a01b03841660009081526001602052604090205460ff1615801561180457506001600160a01b03831660009081526001602052604090205460ff16155b1561185757601b5460ff16611857576040805162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b604482015290519081900360640190fd5b6007548211158061188057506001600160a01b0384166000908152600d602052604090205460ff165b6118c5576040805162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015290519081900360640190fd5b6019546001600160a01b031633148015906118e35750601d5460ff16155b80156118f65750601d54610100900460ff165b80156119135750601e54306000908152600a602052604090205410155b1561192057611920611de1565b6119286122dc565b15801561194257506019546001600160a01b038481169116145b15611971576001600160a01b0384166000908152600a602052604090205461196957600080fd5b6119716122e4565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600a90915291909120546119c391849061170b565b6001600160a01b038086166000908152600a60209081526040808320949094559186168152600d909152205460ff16158015611a01575060095460ff165b15611a37576008546001600160a01b0384166000908152600a6020526040902054611a2c90846116b1565b1115611a3757600080fd5b6001600160a01b0384166000908152600c602052604081205460ff16158015611a7957506001600160a01b0384166000908152600c602052604090205460ff16155b611a835782611a8e565b611a8e8585856122ea565b6001600160a01b0385166000908152600a6020526040902054909150611ab490826116b1565b6001600160a01b038086166000908152600a60209081526040808320949094559188168152600e909152205460ff16611b6057601b546001600160a01b038681166000818152600a6020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b158015611b4d57600080fd5b505af1925050508015611b5e575060015b505b6001600160a01b0384166000908152600e602052604090205460ff16611bf957601b546001600160a01b038581166000818152600a6020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b158015611be657600080fd5b505af1925050508015611bf7575060015b505b601b60019054906101000a90046001600160a01b03166001600160a01b031663ffb2c479601c546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c5657600080fd5b505af1925050508015611c67575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b6000610d1083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061170b565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600a90915291822054611d5191849061170b565b6001600160a01b038086166000908152600a60205260408082209390935590851681522054611d8090836116b1565b6001600160a01b038085166000818152600a602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b601d805460ff19166001179055306000908152600a6020526040812054601354600f54919291611e2291600291611e1c9190829087906123a9565b90612402565b90506000611e308383611cbe565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611e6457fe5b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611eb857600080fd5b505afa158015611ecc573d6000803e3d6000fd5b505050506040513d6020811015611ee257600080fd5b5051815182906001908110611ef357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050601860009054906101000a90046001600160a01b03166001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015611fad578181015183820152602001611f95565b505050509050019650505050505050600060405180830381600087803b158015611fd657600080fd5b505af1158015611fea573d6000803e3d6000fd5b5050600f544792506000915061200e90612005906002612402565b60135490611cbe565b905060006120306002611e1c84611e1c600f54886123a990919063ffffffff16565b9050600061204d83611e1c601154876123a990919063ffffffff16565b9050600061205f82610d558786611cbe565b9050601b60019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156120b157600080fd5b505af1935050505080156120c3575060015b5060006120d66004611e1c8460036123a9565b905060006120e48383611cbe565b6016546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d806000811461213b576040519150601f19603f3d011682016040523d82523d6000602084013e612140565b606091505b50506017546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d8060008114612199576040519150601f19603f3d011682016040523d82523d6000602084013e61219e565b606091505b5060009350839250508c1590506122c357601860009054906101000a90046001600160a01b03166001600160a01b031663f305d71988308f600080601560009054906101000a90046001600160a01b0316426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b15801561225a57600080fd5b505af115801561226e573d6000803e3d6000fd5b50505050506040513d606081101561228557600080fd5b505060408051888152602081018e905281517f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506929181900390910190a15b5050601d805460ff191690555050505050505050505050565b601a54151590565b43601a55565b60195460009081906001600160a01b0385811691161461230c57601354612310565b6014545b905060006123236064611e1c86856123a9565b306000908152600a602052604090205490915061234090826116b1565b306000818152600a6020908152604091829020939093558051848152905191926001600160a01b038a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a361239f8482611cbe565b9695505050505050565b6000826123b857506000610bed565b828202828482816123c557fe5b0414610d105760405162461bcd60e51b81526004018080602001828103825260218152602001806124a56021913960400191505060405180910390fd5b6000610d1083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506000818361248e5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561175f578181015183820152602001611747565b50600083858161249a57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212206bceebe04db11735379739847298332c77e37f5a8773e34d25d90a49421a7d5264736f6c63430007060033

Deployed ByteCode Sourcemap

11349:11945:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13052:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14486:80;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15330:216;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15330:216:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21199:98;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21199:98:0;;;;:::i;:::-;;14748:88;;;;;;;;;;;;;:::i;12507:27::-;;;;;;;;;;;;;:::i;18381:372::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18381:372:0;;;;;;;;;;;;;;;;;:::i;14928:142::-;;;;;;;;;;;;;:::i;12429:29::-;;;;;;;;;;;;;:::i;10719:103::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10719:103:0;-1:-1:-1;;;;;10719:103:0;;:::i;14662:80::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17293:273;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17293:273:0;;;;;;;;;;;;;;;;;;;:::i;17574:276::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17574:276:0;;;;;;;;;;;;;;;;:::i;12189:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12189:44:0;-1:-1:-1;;;;;12189:44:0;;:::i;12295:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12295:49:0;-1:-1:-1;;;;;12295:49:0;;:::i;12032:33::-;;;;;;;;;;;;;:::i;18066:139::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18066:139:0;;:::i;12951:40::-;;;;;;;;;;;;;:::i;15554:116::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15554:116:0;-1:-1:-1;;;;;15554:116:0;;:::i;16854:431::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16854:431:0;;;;;;;;;;;;;;;;;:::i;12465:33::-;;;;;;;;;;;;;:::i;12391:31::-;;;;;;;;;;;;;:::i;15078:105::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15078:105:0;-1:-1:-1;;;;;15078:105:0;;:::i;12629:30::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;12629:30:0;;;;;;;;;;;;;;16470:376;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16470:376:0;;;;;;;;;;:::i;11894:60::-;;;;;;;;;;;;;:::i;15966:106::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15966:106:0;;:::i;11961:58::-;;;;;;;;;;;;;:::i;14842:78::-;;;;;;;;;;;;;:::i;12240:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12240:48:0;-1:-1:-1;;;;;12240:48:0;;:::i;12666:24::-;;;;;;;;;;;;;:::i;14572:84::-;;;;;;;;;;;;;:::i;12353:31::-;;;;;;;;;;;;;:::i;16200:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16200:123:0;;;;;;;;;;:::i;12730:19::-;;;;;;;;;;;;;:::i;18217:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18217:156:0;;;;;;;;:::i;17858:200::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17858:200:0;;;;;;;:::i;10392:94::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10392:94:0;-1:-1:-1;;;;;10392:94:0;;:::i;12830:46::-;;;;;;;;;;;;;:::i;12758:25::-;;;;;;;;;;;;;:::i;12586:36::-;;;;;;;;;;;;;:::i;12541:::-;;;;;;;;;;;;;:::i;15855:103::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15855:103:0;;:::i;12998:45::-;;;;;;;;;;;;;:::i;15189:133::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15189:133:0;;;;;;;;;;:::i;16080:108::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16080:108:0;;;;:::i;10562:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10562:97:0;-1:-1:-1;;;;;10562:97:0;;:::i;11119:173::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11119:173:0;-1:-1:-1;;;;;11119:173:0;;:::i;12699:24::-;;;;;;;;;;;;;:::i;16331:131::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16331:131:0;;;;;;;;;;:::i;10893:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10893:107:0;-1:-1:-1;;;;;10893:107:0;;:::i;12790:31::-;;;;;;;;;;;;;:::i;13052:60::-;;;;:::o;14486:80::-;14558:5;;;;;;;;;;;;-1:-1:-1;;;14558:5:0;;;;14486:80;:::o;15330:216::-;15434:10;15405:4;15422:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;15422:32:0;;;;;;;;;;;:41;;;15479:37;;;;;;;15405:4;;15422:32;;15434:10;;15479:37;;;;;;;;-1:-1:-1;15534:4:0;15330:216;;;;;:::o;21199:98::-;10108:19;10116:10;10108:7;:19::i;:::-;10100:38;;;;;-1:-1:-1;;;10100:38:0;;;;;;;;;;;;-1:-1:-1;;;10100:38:0;;;;;;;;;;;;;;;21266:11:::1;:23:::0;;-1:-1:-1;;21266:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21199:98::o;14748:88::-;14821:12;;14748:88;:::o;12507:27::-;;;;:::o;18381:372::-;-1:-1:-1;;;;;18511:19:0;;18481:4;18511:19;;;:11;:19;;;;;;;;18531:10;18511:31;;;;;;;;-1:-1:-1;;18511:46:0;18508:180;;18607:69;;;;;;;;;;;-1:-1:-1;;;18607:69:0;;;;;;;;-1:-1:-1;;;;;18607:19:0;;-1:-1:-1;18607:19:0;;;:11;:19;;;;;18627:10;18607:31;;;;;;;;;;:69;;18643:6;;18607:35;:69::i;:::-;-1:-1:-1;;;;;18573:19:0;;;;;;:11;:19;;;;;;;;18593:10;18573:31;;;;;;;:103;18508:180;18705:40;18719:6;18727:9;18738:6;18705:13;:40::i;:::-;18698:47;;18381:372;;;;;;:::o;14928:142::-;15056:4;;14981:7;;15008:54;;15046:15;;-1:-1:-1;;;;;15056:4:0;15046:9;:15::i;:::-;15035:4;;15008:33;;15025:15;;-1:-1:-1;;;;;15035:4:0;15025:9;:15::i;:::-;15008:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;15001:61;;14928:142;:::o;12429:29::-;;;;:::o;10719:103::-;10774:4;10809:5;-1:-1:-1;;;;;10809:5:0;;;10798:16;;;;10719:103::o;14662:80::-;11550:1;14662:80;:::o;17293:273::-;10277:24;10290:10;10277:12;:24::i;:::-;10269:48;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;;;;17432:21:::1;:44:::0;;-1:-1:-1;;;;;17432:44:0;;::::1;-1:-1:-1::0;;;;;;17432:44:0;;::::1;;::::0;;;17487:15:::1;:36:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;17534:9:::1;:24:::0;;;;;::::1;::::0;::::1;;::::0;;17293:273::o;17574:276::-;10277:24;10290:10;10277:12;:24::i;:::-;10269:48;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;;;;17706:21:::1;:39:::0;;17756:13:::1;:32:::0;;;;17799:43;::::1;;::::0;::::1;-1:-1:-1::0;;17706:39:0;::::1;;;;-1:-1:-1::0;;17706:39:0;;::::1;::::0;;;::::1;17799:43:::0;;;::::1;;::::0;;17574:276::o;12189:44::-;;;;;;;;;;;;;;;:::o;12295:49::-;;;;;;;;;;;;;;;:::o;12032:33::-;;;;;;:::o;18066:139::-;10277:24;10290:10;10277:12;:24::i;:::-;10269:48;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;;;;18159:6:::1;18153:3;:12;18145:21;;;::::0;::::1;;18177:14;:20:::0;18066:139::o;12951:40::-;;;;;;;;;:::o;15554:116::-;15609:4;15633:29;15641:7;-1:-1:-1;;15633:7:0;:29::i;16854:431::-;10277:24;10290:10;10277:12;:24::i;:::-;10269:48;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;;;;16996:12:::1;:24:::0;;;17031:10:::1;:25:::0;;;17067:12:::1;:30:::0;;;17108:14:::1;:32:::0;;;17172:46:::1;17044:12:::0;17172:30:::1;17011:9:::0;17082:15;17172:16:::1;:30::i;:::-;:34:::0;::::1;:46::i;:::-;17161:8;:57:::0;;;17262:14:::1;::::0;17249:28:::1;::::0;17161:57;17249:12:::1;:28::i;:::-;17229:17;:48:::0;-1:-1:-1;;;;16854:431:0:o;12465:33::-;;;;:::o;12391:31::-;;;;:::o;15078:105::-;-1:-1:-1;;;;;15162:18:0;15144:7;15162:18;;;:9;:18;;;;;;;15078:105::o;12629:30::-;;;-1:-1:-1;;;;;12629:30:0;;:::o;16470:376::-;10277:24;10290:10;10277:12;:24::i;:::-;10269:48;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16570:23:0;::::1;16588:4;16570:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;16607:4:0::1;::::0;-1:-1:-1;;;;;16597:14:0;;::::1;16607:4:::0;::::1;16597:14;;16570:41;16562:50;;;::::0;::::1;;-1:-1:-1::0;;;;;16623:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;16623:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;16677:162:::1;;16702:19;::::0;:39:::1;::::0;;-1:-1:-1;;;16702:39:0;;-1:-1:-1;;;;;16702:39:0;;::::1;;::::0;::::1;::::0;16739:1:::1;16702:39:::0;;;;;;;;:19:::1;::::0;;::::1;;::::0;:28:::1;::::0;:39;;;;;16739:1;;16702:39;;;;;;16739:1;16702:19;:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16677:162;;;16772:19;::::0;-1:-1:-1;;;;;16809:17:0;;::::1;;::::0;;;:9:::1;:17;::::0;;;;;;16772:55;;-1:-1:-1;;;16772:55:0;;::::1;::::0;::::1;::::0;;;;;;;;;:19:::1;::::0;;::::1;::::0;;::::1;::::0;:28:::1;::::0;:55;;;;;16809:17;;16772:55;;;;;;16809:17;16772:19;:55;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16677:162;16470:376:::0;;:::o;11894:60::-;;;;:::o;15966:106::-;10277:24;10290:10;10277:12;:24::i;:::-;10269:48;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;;;;16042:10:::1;:22:::0;15966:106::o;11961:58::-;;;;:::o;14842:78::-;14894:7;14912:5;-1:-1:-1;;;;;14912:5:0;14842:78;:::o;12240:48::-;;;;;;;;;;;;;;;:::o;12666:24::-;;;-1:-1:-1;;;;;12666:24:0;;:::o;14572:84::-;14646:7;;;;;;;;;;;;-1:-1:-1;;;14646:7:0;;;;14572:84;:::o;12353:31::-;;;;:::o;16200:123::-;10277:24;10290:10;10277:12;:24::i;:::-;10269:48;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16287:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;16287:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16200:123::o;12730:19::-;;;-1:-1:-1;;;;;12730:19:0;;:::o;18217:156::-;18297:4;18321:44;18335:10;18347:9;18358:6;18321:13;:44::i;17858:200::-;10277:24;10290:10;10277:12;:24::i;:::-;10269:48;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;;;;17974:19:::1;;;;;;;;;-1:-1:-1::0;;;;;17974:19:0::1;-1:-1:-1::0;;;;;17974:43:0::1;;18018:11;18031:18;17974:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;10392:94:::0;10108:19;10116:10;10108:7;:19::i;:::-;10100:38;;;;;-1:-1:-1;;;10100:38:0;;;;;;;;;;;;-1:-1:-1;;;10100:38:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10452:19:0::1;;::::0;;;10474:4:::1;10452:19;::::0;;;;;;;:26;;-1:-1:-1;;10452:26:0::1;::::0;;::::1;::::0;;10392:94::o;12830:46::-;;;;;;-1:-1:-1;;;;;12830:46:0;;:::o;12758:25::-;;;;:::o;12586:36::-;;;-1:-1:-1;;;;;12586:36:0;;:::o;12541:::-;;;;:::o;15855:103::-;10277:24;10290:10;10277:12;:24::i;:::-;10269:48;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;;;;15927:12:::1;:23:::0;15855:103::o;12998:45::-;;;;;;;;;:::o;15189:133::-;-1:-1:-1;;;;;15291:19:0;;;15273:7;15291:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15189:133::o;16080:108::-;10277:24;10290:10;10277:12;:24::i;:::-;10269:48;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;;;;16155:14:::1;:25:::0;;-1:-1:-1;;16155:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16080:108::o;10562:97::-;10108:19;10116:10;10108:7;:19::i;:::-;10100:38;;;;;-1:-1:-1;;;10100:38:0;;;;;;;;;;;;-1:-1:-1;;;10100:38:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10624:19:0::1;10646:5;10624:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;10624:27:0::1;::::0;;10562:97::o;11119:173::-;10108:19;10116:10;10108:7;:19::i;:::-;10100:38;;;;;-1:-1:-1;;;10100:38:0;;;;;;;;;;;;-1:-1:-1;;;10100:38:0;;;;;;;;;;;;;;;11195:5:::1;:11:::0;;-1:-1:-1;;;;;;11195:11:0::1;-1:-1:-1::0;;;;;11195:11:0;::::1;::::0;;::::1;::::0;;11217:19;;;-1:-1:-1;11217:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;11217:26:0::1;::::0;;::::1;::::0;;;11259:25;;;;;;;::::1;::::0;;;;;;;;;::::1;11119:173:::0;:::o;12699:24::-;;;-1:-1:-1;;;;;12699:24:0;;:::o;16331:131::-;10277:24;10290:10;10277:12;:24::i;:::-;10269:48;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;-1:-1:-1;;;10269:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16422:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;16422:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16331:131::o;10893:107::-;-1:-1:-1;;;;;10973:19:0;10949:4;10973:19;;;:14;:19;;;;;;;;;10893:107::o;12790:31::-;;;;;;:::o;184:179::-;242:7;274:5;;;298:6;;;;290:46;;;;;-1:-1:-1;;;290:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;515:190;601:7;637:12;629:6;;;;621:29;;;;-1:-1:-1;;;621:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;673:5:0;;;515:190::o;18761:1641::-;18883:16;;18853:4;;18883:16;;18880:73;;;18909:41;18924:6;18932:9;18943:6;18909:14;:41::i;:::-;18902:48;;;;18880:73;-1:-1:-1;;;;;18969:22:0;;;;;;:14;:22;;;;;;;;18968:23;:53;;;;-1:-1:-1;;;;;;18996:25:0;;;;;;:14;:25;;;;;;;;18995:26;18968:53;18965:128;;;19045:11;;;;19037:44;;;;;-1:-1:-1;;;19037:44:0;;;;;;;;;;;;-1:-1:-1;;;19037:44:0;;;;;;;;;;;;;;;19123:12;;19113:6;:22;;:49;;;-1:-1:-1;;;;;;19139:23:0;;;;;;:15;:23;;;;;;;;19113:49;19105:79;;;;;-1:-1:-1;;;19105:79:0;;;;;;;;;;;;-1:-1:-1;;;19105:79:0;;;;;;;;;;;;;;;19214:4;;-1:-1:-1;;;;;19214:4:0;19200:10;:18;;;;:39;;-1:-1:-1;19223:16:0;;;;19222:17;19200:39;:64;;;;-1:-1:-1;19243:21:0;;;;;;;19200:64;:109;;;;-1:-1:-1;19296:13:0;;19286:4;19268:24;;;;:9;:24;;;;;;:41;;19200:109;19197:128;;;19312:10;:8;:10::i;:::-;19341;:8;:10::i;:::-;19340:11;:32;;;;-1:-1:-1;19368:4:0;;-1:-1:-1;;;;;19355:17:0;;;19368:4;;19355:17;19340:32;19337:117;;;-1:-1:-1;;;;;19397:17:0;;19417:1;19397:17;;;:9;:17;;;;;;19389:30;;;;;;19434:8;:6;:8::i;:::-;19513:53;;;;;;;;;;;-1:-1:-1;;;19513:53:0;;;;;;;;-1:-1:-1;;;;;19513:17:0;;-1:-1:-1;19513:17:0;;;:9;:17;;;;;;;;:53;;19535:6;;19513:21;:53::i;:::-;-1:-1:-1;;;;;19493:17:0;;;;;;;:9;:17;;;;;;;;:73;;;;19591:26;;;;;:15;:26;;;;;;;19590:27;:45;;;;-1:-1:-1;19621:14:0;;;;19590:45;19587:141;;;19705:10;;-1:-1:-1;;;;;19669:20:0;;;;;;:9;:20;;;;;;:32;;19694:6;19669:24;:32::i;:::-;:46;;19661:55;;;;;;-1:-1:-1;;;;;19763:19:0;;19740;19763;;;:11;:19;;;;;;;;19762:20;:47;;;;-1:-1:-1;;;;;;19787:22:0;;;;;;:11;:22;;;;;;;;19786:23;19762:47;:93;;19849:6;19762:93;;;19812:34;19820:6;19828:9;19839:6;19812:7;:34::i;:::-;-1:-1:-1;;;;;19889:20:0;;;;;;:9;:20;;;;;;19740:115;;-1:-1:-1;19889:37:0;;19740:115;19889:24;:37::i;:::-;-1:-1:-1;;;;;19866:20:0;;;;;;;:9;:20;;;;;;;;:60;;;;19972:24;;;;;:16;:24;;;;;;;19968:127;;20017:19;;-1:-1:-1;;;;;20054:17:0;;;;;;;:9;:17;;;;;;;20017:55;;-1:-1:-1;;;20017:55:0;;;;;;;;;;;;;;:19;;;;;;;;:28;;:55;;;;;20054:17;;20017:55;;;;;;20054:17;20017:19;:55;;;;;;;;;;;;;;;;;;;;;;;;;20013:71;;-1:-1:-1;;;;;20111:27:0;;;;;;:16;:27;;;;;;;;20107:137;;20159:19;;-1:-1:-1;;;;;20199:20:0;;;;;;;:9;:20;;;;;;;20159:61;;-1:-1:-1;;;20159:61:0;;;;;;;;;;;;;;:19;;;;;;;;:28;;:61;;;;;20199:20;;20159:61;;;;;;20199:20;20159:19;:61;;;;;;;;;;;;;;;;;;;;;;;;;20155:77;;20260:19;;;;;;;;;-1:-1:-1;;;;;20260:19:0;-1:-1:-1;;;;;20260:27:0;;20288:14;;20260:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20256:59;20349:9;-1:-1:-1;;;;;20332:40:0;20341:6;-1:-1:-1;;;;;20332:40:0;;20360:11;20332:40;;;;;;;;;;;;;;;;;;-1:-1:-1;20390:4:0;;18761:1641;-1:-1:-1;;;;18761:1641:0:o;371:136::-;429:7;456:43;460:1;463;456:43;;;;;;;;;;;;;;;;;:3;:43::i;20414:330::-;20544:53;;;;;;;;;;;-1:-1:-1;;;20544:53:0;;;;;;;;-1:-1:-1;;;;;20544:17:0;;20507:4;20544:17;;;:9;:17;;;;;;;:53;;20566:6;;20544:21;:53::i;:::-;-1:-1:-1;;;;;20524:17:0;;;;;;;:9;:17;;;;;;:73;;;;20631:20;;;;;;;:32;;20656:6;20631:24;:32::i;:::-;-1:-1:-1;;;;;20608:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;20679:35;;;;;;;20608:20;;20679:35;;;;;;;;;;;;;-1:-1:-1;20732:4:0;20414:330;;;;;:::o;21305:1920::-;13157:16;:23;;-1:-1:-1;;13157:23:0;13176:4;13157:23;;;21411:4:::1;13157:16:::0;21393:24;;;:9:::1;:24;::::0;;;;;21492:8:::1;::::0;21474:12:::1;::::0;21393:24;;13157:16;21454:54:::1;::::0;21506:1:::1;::::0;21454:47:::1;::::0;21492:8;21454:47;;21393:24;;21454:19:::1;:33::i;:::-;:37:::0;::::1;:47::i;:54::-;21428:80:::0;-1:-1:-1;21519:20:0::1;21542:36;:15:::0;21428:80;21542:19:::1;:36::i;:::-;21615:16;::::0;;21629:1:::1;21615:16:::0;;;;;::::1;::::0;;21519:59;;-1:-1:-1;21591:21:0::1;::::0;21615:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21615:16:0::1;21591:40;;21660:4;21642;21647:1;21642:7;;;;;;;;-1:-1:-1::0;;;;;21642:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;21686:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;21686:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;21642:7;;21686:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;21686:13:0;21676:7;;:4;;21681:1:::1;::::0;21676:7;::::1;;;;;;;;;;:23;-1:-1:-1::0;;;;;21676:23:0::1;;;-1:-1:-1::0;;;;;21676:23:0::1;;;::::0;::::1;21712:6;;;;;;;;;-1:-1:-1::0;;;;;21712:6:0::1;-1:-1:-1::0;;;;;21712:57:0::1;;21784:12;21811:1;21827:4;21854;21874:15;21712:188;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;21712:188:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22002:12:0::1;::::0;21933:21:::1;::::0;-1:-1:-1;21913:17:0::1;::::0;-1:-1:-1;21989:33:0::1;::::0;22002:19:::1;::::0;22019:1:::1;22002:16;:19::i;:::-;21989:8;::::0;;:12:::1;:33::i;:::-;21967:55;;22043:26;22072:51;22121:1;22072:44;22104:11;22072:27;22086:12;;22072:9;:13;;:27;;;;:::i;:51::-;22043:80;;22134:27;22164:42;22194:11;22164:25;22178:10;;22164:9;:13;;:25;;;;:::i;:42::-;22134:72:::0;-1:-1:-1;22217:26:0::1;22246:58;22134:72:::0;22246:33:::1;:9:::0;22260:18;22246:13:::1;:33::i;:58::-;22217:87;;22321:19;;;;;;;;;-1:-1:-1::0;;;;;22321:19:0::1;-1:-1:-1::0;;;;;22321:27:0::1;;22356:19;22321:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;22317:73:::0;22410:22:::1;22435:32;22465:1;22435:25;:18:::0;22458:1:::1;22435:22;:25::i;:32::-;22410:57:::0;-1:-1:-1;22478:16:0::1;22497:38;:18:::0;22410:57;22497:22:::1;:38::i;:::-;22585:15;::::0;22577:68:::1;::::0;22478:57;;-1:-1:-1;22557:15:0::1;::::0;-1:-1:-1;;;;;22585:15:0;;::::1;::::0;22635:5:::1;::::0;22614:14;;22557:15;22577:68;22557:15;22577:68;22614:14;22585:15;22635:5;22577:68:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;22686:9:0::1;::::0;22678:56:::1;::::0;22556:89;;-1:-1:-1;22657:16:0::1;::::0;-1:-1:-1;;;;;22686:9:0;;::::1;::::0;22724:5:::1;::::0;22709:8;;22657:16;22678:56;22657:16;22678:56;22709:8;22686:9;22724:5;22678:56:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;22808:5:0::1;::::0;-1:-1:-1;22808:5:0;;-1:-1:-1;;22859:19:0;;;-1:-1:-1;22856:362:0::1;;22894:6;;;;;;;;;-1:-1:-1::0;;;;;22894:6:0::1;-1:-1:-1::0;;;;;22894:22:0::1;;22924:18;22970:4;22994:15;23028:1;23048::::0;23068:21:::1;;;;;;;;;-1:-1:-1::0;;;;;23068:21:0::1;23108:15;22894:244;;;;;;;;;;;;;-1:-1:-1::0;;;;;22894:244:0::1;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;22894:244:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;22894:244:0;23158:48;;;;;22894:244:::1;23158:48:::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;22856:362;-1:-1:-1::0;;13203:16:0;:24;;-1:-1:-1;;13203:24:0;;;-1:-1:-1;;;;;;;;;;;21305:1920:0:o;15678:90::-;15745:10;;:15;;15678:90;:::o;15776:71::-;15827:12;15814:10;:25;15776:71::o;20752:439::-;20892:4;;20838:7;;;;-1:-1:-1;;;;;20892:17:0;;;:4;;:17;:48;;20932:8;;20892:48;;;20912:17;;20892:48;20868:72;-1:-1:-1;20951:17:0;20971:34;21001:3;20971:25;:6;20868:72;20971:10;:25::i;:34::-;21063:4;21045:24;;;;:9;:24;;;;;;20951:54;;-1:-1:-1;21045:39:0;;20951:54;21045:28;:39::i;:::-;21036:4;21018:24;;;;:9;:24;;;;;;;;;:66;;;;21100:42;;;;;;;21036:4;;-1:-1:-1;;;;;21100:42:0;;;;;;;;;;;;;21162:21;:6;21173:9;21162:10;:21::i;:::-;21155:28;20752:439;-1:-1:-1;;;;;;20752:439:0:o;713:224::-;771:7;795:6;791:25;;-1:-1:-1;812:1:0;805:8;;791:25;838:5;;;842:1;838;:5;:1;862:5;;;;;:10;854:56;;;;-1:-1:-1;;;854:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;945:132;1003:7;1030:39;1034:1;1037;1030:39;;;;;;;;;;;;;;;;;1171:7;1206:12;1199:5;1191:28;;;;-1:-1:-1;;;1191:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1230:9;1246:1;1242;:5;;;;;;;1085:189;-1:-1:-1;;;;;1085:189:0:o

Swarm Source

ipfs://e35c74bad3748e9cb2fa0dd1a87b2ca66d06083d5c9ea5cd2fd18d0aeb434e82
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
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.