Contract 0x3343dd801085a3d40e1316715c6a599895535601 1

Contract Overview

Balance:
0 CRO

CRO Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa4349b441ccee13218a6c614825a9524bad360c0b88d530038e9277565eb7cecApprove138625832024-05-09 21:23:2110 days 14 hrs agoCronos ID Name shinu.cro IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.234385650
0xb9eedc17289352888d447cca71e2973d6ff828cae17699e4eb76082dccc878e7Transfer137883492024-05-04 23:48:2415 days 11 hrs ago0xe08cbfb18947fa2cae632c2346e9d812f77148e0 IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO3.88393329157 5,047.045
0x5b74fa3e5cb66be1804452dded893f58c4ea83aa52866775f310ed9fb108c19fApprove137883182024-05-04 23:45:2815 days 11 hrs ago0xe08cbfb18947fa2cae632c2346e9d812f77148e0 IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.2343160305 5,048.5
0xa61505f2e78c3aed16c5aeb56ada94079a80edae82efd156721b299c2f409746Approve135546822024-04-19 13:46:1830 days 21 hrs ago0x29d1772cf40dc9b514363376a4e314ba0929de77 IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.2343160305 5,048.5
0x70dae57a718488ff3b2dcb881aa307db70952baf5928816837dedc7492cccd6cApprove135396212024-04-18 14:05:4531 days 21 hrs agoCronos ID Name givemore.cro IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.146091450
0xd9a204b0c1b6ff631979b48daff43c1c02718bb2e52a3e424e3a3576a4766353Approve135395812024-04-18 14:01:5931 days 21 hrs agoCronos ID Name givemore.cro IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.234385650
0x9a176d4e08c30f015eccb37bd3ef8926a46eb51cb4ff57d1b5b752d8828f56e7Approve135359552024-04-18 8:19:1832 days 3 hrs ago0x49cdb706ba3bd6b79dfafb6829ac808858672dfe IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.146091450
0xdcc78c6277edd651fee00d0475fd12d749fec50225a629067295e45e80c691cdApprove135359312024-04-18 8:17:0232 days 3 hrs ago0x49cdb706ba3bd6b79dfafb6829ac808858672dfe IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.234385650
0x7b0e68b929412eeb5b1b83b982cbe4ff830ecde6e30db0515b55320686ac8693Approve135312732024-04-18 0:57:4232 days 10 hrs agoCronos ID Name cronosnode.cro IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.132540448745 5,047.045
0x3d5a34fc99e815781c85aa985fb5c222e7a4e37b98b2d649332417196c5b71eeApprove135312182024-04-18 0:52:3032 days 10 hrs agoCronos ID Name cronosnode.cro IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.233010226372 5,047.772500001
0x6097320228a8a848f650669b0283a37f742ec58cddf6973885571487dae3143aTransfer135284142024-04-17 20:28:1432 days 15 hrs ago0xd699b614b81e59bd24af11fa8661d7598e0263af IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO1.010
0x9f2921d5ce484500bd001ff64ce14a6520c9a39eb80fe306c50a4be61c1ddcb3Approve135072932024-04-16 11:12:4834 days 17 mins ago0x49cdb706ba3bd6b79dfafb6829ac808858672dfe IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.146091450
0xa5223c0ef58a314605a410b17f7345b1df4d69012150fce1b51b42e8c8398d8bTransfer134962972024-04-15 17:54:5234 days 17 hrs ago0xd699b614b81e59bd24af11fa8661d7598e0263af IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO1.010
0x239d1b2a8cd79dbee3caa95b53a7b0f390ed7e2f96d7d7fea46733bf7e434222Approve134534002024-04-12 22:14:4337 days 13 hrs agoCronos ID Name furymousegang.cro IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.234385650
0x6d113ee61001514a95c66ec0d8371af73715baf15fe8ad839849f8bda7a39cefApprove132831942024-04-01 19:09:3048 days 16 hrs ago0x69b623d036e2f0bcd4d1fec7ebceaf0250a28196 IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.234385650
0x30237784ae790f49052323a73ac3dbb0fc865e746caa728e0790a8c59fcbd93cApprove132831772024-04-01 19:07:5348 days 16 hrs ago0x69b623d036e2f0bcd4d1fec7ebceaf0250a28196 IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.234385650
0x1c386c31117d8e845bbff38b3663c9e048ae7db93f6d8943b2fd6439f4cd439eApprove132624882024-03-31 10:30:2550 days 59 mins agoCronos ID Name blaww.cro IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.234385650
0xe8c293938b16ebb9413bfa4127f5aad1786518e169a557ab3c8d5afa11a55a41Approve132305942024-03-29 8:20:0452 days 3 hrs agoCronos ID Name krono.cro IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.234385650
0x7635f278bd130ef53169a3972b10d141f1d8be31fd59d7e9a24ca922d3e1a10bApprove132159542024-03-28 9:20:0053 days 2 hrs ago0x2035b208f0468de60e1794c11e8150875106ea25 IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.234385650
0x0a2d142ed7cc9b0d99db70372abf1893eb3de31b3a23de0b98429ab1cd4649bfApprove132074562024-03-27 19:57:1753 days 15 hrs ago0xf722f53117eb7fe47a3459d4a52a5272c10720a6 IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.14609145 5,050
0x0fda4560de3986e694f361fcbd5f7ecede4168a6d55dc8f8c530cf09f3e91bafApprove132002632024-03-27 8:39:1454 days 2 hrs agoCronos ID Name blaww.cro IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.234385650
0xab1f111f7c36e4627b52a03cceb6264b383c78fbb23db390d9e3fcc022cec00fApprove131851202024-03-26 8:52:2055 days 2 hrs ago0xcf4a36f8105d60fc2c8ef0eb97f616867dd5a67a IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.146091450
0xf68217d08128aace78b39568281adbcc5a122edc4d587845edf3ec33b1343281Approve131851192024-03-26 8:52:1455 days 2 hrs ago0xcf4a36f8105d60fc2c8ef0eb97f616867dd5a67a IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.146091450
0x8774870314a8c1d11c3855a16ebe424111834e878962de42aee880a6dc8aeb9aApprove131848882024-03-26 8:30:3155 days 2 hrs ago0xcf4a36f8105d60fc2c8ef0eb97f616867dd5a67a IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.146091450
0x06f18d240ab6d585979f36908cd38eb610c6cdd1ae822be5eb8e6d6e1e799694Approve131847712024-03-26 8:19:3155 days 3 hrs ago0x5e7c173b337885b4f55298a1c872b44d370b9f7b IN  0x3343dd801085a3d40e1316715c6a5998955356010 CRO0.234246411 5,047
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x018f5ef753e0ec46ec5039152b3bd4bf7e3d96f6f3bdc5e2279eab61d8b831d8139947862024-05-18 14:47:461 day 20 hrs ago 0x3343dd801085a3d40e1316715c6a599895535601 Mad Meerkat Finance: Master Meerkat & Router0.215778928357844085 CRO
0x018f5ef753e0ec46ec5039152b3bd4bf7e3d96f6f3bdc5e2279eab61d8b831d8139947862024-05-18 14:47:461 day 20 hrs ago 0x3343dd801085a3d40e1316715c6a5998955356010xb7c984e9105d82a2d5eb3141ca2c59e0a3202b770.197797350994690413 CRO
0x018f5ef753e0ec46ec5039152b3bd4bf7e3d96f6f3bdc5e2279eab61d8b831d8139947862024-05-18 14:47:461 day 20 hrs ago 0x3343dd801085a3d40e1316715c6a5998955356010xb7c984e9105d82a2d5eb3141ca2c59e0a3202b770.593392052984071236 CRO
0x018f5ef753e0ec46ec5039152b3bd4bf7e3d96f6f3bdc5e2279eab61d8b831d8139947862024-05-18 14:47:461 day 20 hrs ago 0x3343dd801085a3d40e1316715c6a599895535601 0x056c639bebf3f94594784e0237db5a42feb226170.431557856715688171 CRO
0x018f5ef753e0ec46ec5039152b3bd4bf7e3d96f6f3bdc5e2279eab61d8b831d8139947862024-05-18 14:47:461 day 20 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x3343dd801085a3d40e1316715c6a5998955356011.438526189052293905 CRO
0x6d1c7e445db5744c144bacb0bca97f4bb9496c1e5a6286d3b4f8d8774112f197139947742024-05-18 14:46:381 day 20 hrs ago 0x3343dd801085a3d40e1316715c6a599895535601 Mad Meerkat Finance: Master Meerkat & Router0.00154678027315668 CRO
0x6d1c7e445db5744c144bacb0bca97f4bb9496c1e5a6286d3b4f8d8774112f197139947742024-05-18 14:46:381 day 20 hrs ago 0x3343dd801085a3d40e1316715c6a5998955356010xb7c984e9105d82a2d5eb3141ca2c59e0a3202b770.001417881917060292 CRO
0x6d1c7e445db5744c144bacb0bca97f4bb9496c1e5a6286d3b4f8d8774112f197139947742024-05-18 14:46:381 day 20 hrs ago 0x3343dd801085a3d40e1316715c6a5998955356010xb7c984e9105d82a2d5eb3141ca2c59e0a3202b770.004253645751180873 CRO
0x6d1c7e445db5744c144bacb0bca97f4bb9496c1e5a6286d3b4f8d8774112f197139947742024-05-18 14:46:381 day 20 hrs ago 0x3343dd801085a3d40e1316715c6a599895535601 0x056c639bebf3f94594784e0237db5a42feb226170.003093560546313361 CRO
0x6d1c7e445db5744c144bacb0bca97f4bb9496c1e5a6286d3b4f8d8774112f197139947742024-05-18 14:46:381 day 20 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x3343dd801085a3d40e1316715c6a5998955356010.010311868487711206 CRO
0x60174985efbdcb558a9ccac9ba7f14f7bf6ee14c733bb995e699c26b670b6d19139442362024-05-15 6:38:275 days 4 hrs ago 0x3343dd801085a3d40e1316715c6a599895535601 Mad Meerkat Finance: Master Meerkat & Router0.222514092189404086 CRO
0x60174985efbdcb558a9ccac9ba7f14f7bf6ee14c733bb995e699c26b670b6d19139442362024-05-15 6:38:275 days 4 hrs ago 0x3343dd801085a3d40e1316715c6a5998955356010xb7c984e9105d82a2d5eb3141ca2c59e0a3202b770.203971251173620414 CRO
0x60174985efbdcb558a9ccac9ba7f14f7bf6ee14c733bb995e699c26b670b6d19139442362024-05-15 6:38:275 days 4 hrs ago 0x3343dd801085a3d40e1316715c6a5998955356010xb7c984e9105d82a2d5eb3141ca2c59e0a3202b770.61191375352086124 CRO
0x60174985efbdcb558a9ccac9ba7f14f7bf6ee14c733bb995e699c26b670b6d19139442362024-05-15 6:38:275 days 4 hrs ago 0x3343dd801085a3d40e1316715c6a599895535601 0x056c639bebf3f94594784e0237db5a42feb226170.445028184378808173 CRO
0x60174985efbdcb558a9ccac9ba7f14f7bf6ee14c733bb995e699c26b670b6d19139442362024-05-15 6:38:275 days 4 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x3343dd801085a3d40e1316715c6a5998955356011.483427281262693913 CRO
0x5e80002b356ba4459a7923d53bf5c3bef81ceb4370e9f1d63381845b7838f99f139441902024-05-15 6:34:055 days 4 hrs ago 0x3343dd801085a3d40e1316715c6a599895535601 Mad Meerkat Finance: Master Meerkat & Router0.447064700279581257 CRO
0x5e80002b356ba4459a7923d53bf5c3bef81ceb4370e9f1d63381845b7838f99f139441902024-05-15 6:34:055 days 4 hrs ago 0x3343dd801085a3d40e1316715c6a5998955356010xb7c984e9105d82a2d5eb3141ca2c59e0a3202b770.409809308589616153 CRO
0x5e80002b356ba4459a7923d53bf5c3bef81ceb4370e9f1d63381845b7838f99f139441902024-05-15 6:34:055 days 4 hrs ago 0x3343dd801085a3d40e1316715c6a5998955356010xb7c984e9105d82a2d5eb3141ca2c59e0a3202b771.229427925768848457 CRO
0x5e80002b356ba4459a7923d53bf5c3bef81ceb4370e9f1d63381845b7838f99f139441902024-05-15 6:34:055 days 4 hrs ago 0x3343dd801085a3d40e1316715c6a599895535601 0x056c639bebf3f94594784e0237db5a42feb226170.894129400559162514 CRO
0x5e80002b356ba4459a7923d53bf5c3bef81ceb4370e9f1d63381845b7838f99f139441902024-05-15 6:34:055 days 4 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x3343dd801085a3d40e1316715c6a5998955356012.980431335197208381 CRO
0x6fbb9b74f2a7ec47f4a16a4d73ba0cdafaa903ee0b25258a1b49a1d482f1a368139441572024-05-15 6:30:585 days 4 hrs ago 0x3343dd801085a3d40e1316715c6a599895535601 Mad Meerkat Finance: Master Meerkat & Router0.000985253067244969 CRO
0x6fbb9b74f2a7ec47f4a16a4d73ba0cdafaa903ee0b25258a1b49a1d482f1a368139441572024-05-15 6:30:585 days 4 hrs ago 0x3343dd801085a3d40e1316715c6a5998955356010xb7c984e9105d82a2d5eb3141ca2c59e0a3202b770.000903148644974556 CRO
0x6fbb9b74f2a7ec47f4a16a4d73ba0cdafaa903ee0b25258a1b49a1d482f1a368139441572024-05-15 6:30:585 days 4 hrs ago 0x3343dd801085a3d40e1316715c6a5998955356010xb7c984e9105d82a2d5eb3141ca2c59e0a3202b770.002709445934923668 CRO
0x6fbb9b74f2a7ec47f4a16a4d73ba0cdafaa903ee0b25258a1b49a1d482f1a368139441572024-05-15 6:30:585 days 4 hrs ago 0x3343dd801085a3d40e1316715c6a599895535601 0x056c639bebf3f94594784e0237db5a42feb226170.001970506134489939 CRO
0x6fbb9b74f2a7ec47f4a16a4d73ba0cdafaa903ee0b25258a1b49a1d482f1a368139441572024-05-15 6:30:585 days 4 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x3343dd801085a3d40e1316715c6a5998955356010.006568353781633132 CRO
[ Download CSV Export 
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Tycoon

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2023-01-18
*/

/**
 *Submitted for verification at Etherscan.io on 2023-01-17
*/

// 

// LAUNCHED BY POSSESSEDPIRATES.COM DEV IT PAYS TO BE A PIRATE! join our discord crofam!
// CONTRACT DESIGNED FOR TYCOON COMMUNITY
//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 = 0x145677FC4d9b8F19B5D56d1820c48e0443049a30; //MMF
    IBEP20 RewardToken = IBEP20(0xe44Fd7fCb2b1581822D0c862B68222998a0c299a); //WETH

    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 Tycoon is IBEP20, Auth {
    
    using SafeMath for uint256;

    string constant _name = "Tycoon";
    string constant _symbol = "CIW";
    uint8 constant _decimals = 18;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    
    address routerAddress = 0x145677FC4d9b8F19B5D56d1820c48e0443049a30; //MMF
    address RewardToken = 0xe44Fd7fCb2b1581822D0c862B68222998a0c299a; //WETH

    uint256 _totalSupply = 10 * 10**10 * (10 ** _decimals);
    uint256 public _maxTxAmount = 9 * 10**5 * (10 ** _decimals);
    uint256 public _walletMax = 9 * 10**5 * (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 = 3;
    uint256 public marketingFee =5;
    uint256 public rewardsFee = 5;
    uint256 public extraFeeOnSell = 5;

    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**4 * (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 = 0x21420c42f0f39B657B78d3cC04025913D4b6Ad14;
        marketingWallet = 0x21420c42f0f39B657B78d3cC04025913D4b6Ad14;
        devWallet = 0x21420c42f0f39B657B78d3cC04025913D4b6Ad14;
        
        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"}]

6080604052600280546001600160a01b031990811661dead17909155600380548216815560048054831673145677fc4d9b8f19b5d56d1820c48e0443049a301790556005805490921673e44fd7fcb2b1581822d0c862b68222998a0c299a1782556c01431e0fae6d7217caa000000060065569be951906eba2aa80000060078190556008556009805460ff19908116600117909155600f919091556010829055601182905560129190915560006013819055601455601b80549091169055620493e0601c55601d805462ff00001961ff00199091166101001716905569021e19e0c9bab2400000601e55348015620000f657600080fd5b50600080546001600160a01b0319908116339081178355825260016020818152604093849020805460ff191690921790915560048054601880549094166001600160a01b039182161793849055845163c45a015560e01b8152945193169363c45a01559381830193929091829003018186803b1580156200017657600080fd5b505afa1580156200018b573d6000803e3d6000fd5b505050506040513d6020811015620001a257600080fd5b5051601854604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693169163ad5c4648916004808301926020929190829003018186803b158015620001f157600080fd5b505afa15801562000206573d6000803e3d6000fd5b505050506040513d60208110156200021d57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b1580156200026d57600080fd5b505af115801562000282573d6000803e3d6000fd5b505050506040513d60208110156200029957600080fd5b5051601980546001600160a01b0319166001600160a01b03928316179055306000908152600b6020908152604080832060188054861685529252918290206000199055549051911690620002ed906200053c565b6001600160a01b03909116815260405190819003602001906000f0801580156200031b573d6000803e3d6000fd5b50601b8054610100600160a81b0319166101006001600160a01b0393841602179055336000818152600c60209081526040808320805460ff199081166001908117909255308086528386208054831684179055868652600d85528386208054831684179055601980548916875284872080548416851790555488168652600e8552838620805483168417905595855282852080548216831790559484528184208054861682179055600254861684528184208054861682179055600354909516835290912080549092169092179055601580547321420c42f0f39b657b78d3cc04025913d4b6ad146001600160a01b0319918216811790925560168054821683179055601780549091169091179055601154601054600f5462000461936200044d9290620004da811b620016a517901c565b620004da60201b620016a51790919060201c565b60138190555062000485601254601354620004da60201b620016a51790919060201c565b601455600654336000818152600a60209081526040808320859055805194855251929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a36200054a565b60008282018381101562000535576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b610f768062002a4783390190565b6124ed806200055a6000396000f3fe6080604052600436106103035760003560e01c80637db1342c11610190578063bf56b371116100dc578063e66b1d1e11610095578063f887ea401161006f578063f887ea4014610ac8578063fabe628314610add578063fe9fbb8014610b18578063ffb54a9914610b4b5761030a565b8063e66b1d1e14610a36578063f0b37c0414610a62578063f2fde38b14610a955761030a565b8063bf56b3711461097d578063ca33e64c14610992578063ca987b0e146109a7578063d920334e146109bc578063da00097d146109e6578063dd62ed3e146109fb5761030a565b806398118cb411610149578063a9059cbb11610123578063a9059cbb146108cc578063a9f7864b14610905578063b6a5d7de14610935578063bad3ea6a146109685761030a565b806398118cb414610867578063a3a2e89e1461087c578063a8aa1b31146108b75761030a565b80637db1342c146107b6578063807c2d9c146107e0578063893d20e8146107f55780638b42507f1461080a5780638ea5220f1461083d57806395d89b41146108525761030a565b80633f4218e01161024f578063650c42261161020857806370a08231116101e257806370a082311461070257806375f0a87414610735578063773fcb5c146107665780637d1db4a5146107a15761030a565b8063650c42261461069c57806369cf17d4146106d85780636b67c4df146106ed5761030a565b80633f4218e0146105af5780634355855a146105e257806344de2e4c14610615578063479f66d81461062a5780634a74bb0214610654578063571ac8b0146106695761030a565b806323b872dd116102bc5780632f54bf6e116102965780632f54bf6e146104d2578063313ce56714610505578063315dca291461053057806334c70889146105755761030a565b806323b872dd146104655780632b112e49146104a85780632bb14e1d146104bd5761030a565b80630445b6671461030f57806306fdde0314610336578063095ea7b3146103c05780630d2959801461040d57806318160ddd1461043b5780631df4ccfc146104505761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610b60565b60408051918252519081900360200190f35b34801561034257600080fd5b5061034b610b66565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561038557818101518382015260200161036d565b50505050905090810190601f1680156103b25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103cc57600080fd5b506103f9600480360360408110156103e357600080fd5b506001600160a01b038135169060200135610b86565b604080519115158252519081900360200190f35b34801561041957600080fd5b506104396004803603602081101561043057600080fd5b50351515610bed565b005b34801561044757600080fd5b50610324610c43565b34801561045c57600080fd5b50610324610c49565b34801561047157600080fd5b506103f96004803603606081101561048857600080fd5b506001600160a01b03813581169160208101359091169060400135610c4f565b3480156104b457600080fd5b50610324610d11565b3480156104c957600080fd5b50610324610d5a565b3480156104de57600080fd5b506103f9600480360360208110156104f557600080fd5b50356001600160a01b0316610d60565b34801561051157600080fd5b5061051a610d74565b6040805160ff9092168252519081900360200190f35b34801561053c57600080fd5b506104396004803603606081101561055357600080fd5b506001600160a01b038135811691602081013582169160409091013516610d79565b34801561058157600080fd5b506104396004803603606081101561059857600080fd5b508035151590602081013590604001351515610e00565b3480156105bb57600080fd5b506103f9600480360360208110156105d257600080fd5b50356001600160a01b0316610e7a565b3480156105ee57600080fd5b506103f96004803603602081101561060557600080fd5b50356001600160a01b0316610e8f565b34801561062157600080fd5b506103f9610ea4565b34801561063657600080fd5b506104396004803603602081101561064d57600080fd5b5035610ead565b34801561066057600080fd5b506103f9610f09565b34801561067557600080fd5b506103f96004803603602081101561068c57600080fd5b50356001600160a01b0316610f17565b3480156106a857600080fd5b50610439600480360360808110156106bf57600080fd5b5080359060208101359060408101359060600135610f25565b3480156106e457600080fd5b50610324610fb0565b3480156106f957600080fd5b50610324610fb6565b34801561070e57600080fd5b506103246004803603602081101561072557600080fd5b50356001600160a01b0316610fbc565b34801561074157600080fd5b5061074a610fd7565b604080516001600160a01b039092168252519081900360200190f35b34801561077257600080fd5b506104396004803603604081101561078957600080fd5b506001600160a01b0381351690602001351515610fe6565b3480156107ad57600080fd5b50610324611183565b3480156107c257600080fd5b50610439600480360360208110156107d957600080fd5b5035611189565b3480156107ec57600080fd5b506103246111d6565b34801561080157600080fd5b5061074a6111dc565b34801561081657600080fd5b506103f96004803603602081101561082d57600080fd5b50356001600160a01b03166111eb565b34801561084957600080fd5b5061074a611200565b34801561085e57600080fd5b5061034b61120f565b34801561087357600080fd5b5061032461122c565b34801561088857600080fd5b506104396004803603604081101561089f57600080fd5b506001600160a01b0381351690602001351515611232565b3480156108c357600080fd5b5061074a6112a5565b3480156108d857600080fd5b506103f9600480360360408110156108ef57600080fd5b506001600160a01b0381351690602001356112b4565b34801561091157600080fd5b506104396004803603604081101561092857600080fd5b50803590602001356112c1565b34801561094157600080fd5b506104396004803603602081101561095857600080fd5b50356001600160a01b031661136c565b34801561097457600080fd5b5061074a6113d6565b34801561098957600080fd5b506103246113ea565b34801561099e57600080fd5b5061074a6113f0565b3480156109b357600080fd5b506103246113ff565b3480156109c857600080fd5b50610439600480360360208110156109df57600080fd5b5035611405565b3480156109f257600080fd5b506103f9611452565b348015610a0757600080fd5b5061032460048036036040811015610a1e57600080fd5b506001600160a01b0381358116916020013516611461565b348015610a4257600080fd5b5061043960048036036020811015610a5957600080fd5b5035151561148c565b348015610a6e57600080fd5b5061043960048036036020811015610a8557600080fd5b50356001600160a01b03166114e7565b348015610aa157600080fd5b5061043960048036036020811015610ab857600080fd5b50356001600160a01b031661154b565b348015610ad457600080fd5b5061074a6115fc565b348015610ae957600080fd5b5061043960048036036040811015610b0057600080fd5b506001600160a01b038135169060200135151561160b565b348015610b2457600080fd5b506103f960048036036020811015610b3b57600080fd5b50356001600160a01b031661167e565b348015610b5757600080fd5b506103f961169c565b601e5481565b6040805180820190915260068152652a3cb1b7b7b760d11b602082015290565b336000818152600b602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b610bf633610d60565b610c30576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601b805460ff1916911515919091179055565b60065490565b60135481565b6001600160a01b0383166000908152600b6020908152604080832033845290915281205460001914610cfc576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600b82528381203382529091529190912054610cd79184906116ff565b6001600160a01b0385166000908152600b602090815260408083203384529091529020555b610d07848484611796565b90505b9392505050565b600354600090610d5590610d2d906001600160a01b0316610fbc565b600254610d4f90610d46906001600160a01b0316610fbc565b60065490611cb2565b90611cb2565b905090565b60115481565b6000546001600160a01b0390811691161490565b601290565b610d823361167e565b610dc1576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601580546001600160a01b039485166001600160a01b031991821617909155601680549385169382169390931790925560178054919093169116179055565b610e093361167e565b610e48576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601d8054601e93909355901515620100000262ff0000199315156101000261ff00199093169290921792909216179055565b600c6020526000908152604090205460ff1681565b600e6020526000908152604090205460ff1681565b60095460ff1681565b610eb63361167e565b610ef5576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b620493e08110610f0457600080fd5b601c55565b601d54610100900460ff1681565b6000610be782600019610b86565b610f2e3361167e565b610f6d576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600f849055601183905560108290556012819055610f9583610f8f86856116a5565b906116a5565b6013819055601254610fa791906116a5565b60145550505050565b60125481565b60105481565b6001600160a01b03166000908152600a602052604090205490565b6016546001600160a01b031681565b610fef3361167e565b61102e576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b038216301480159061105557506019546001600160a01b03838116911614155b61105e57600080fd5b6001600160a01b0382166000908152600e60205260409020805460ff1916821580159190911790915561110057601b5460408051630a5b654b60e11b81526001600160a01b038581166004830152600060248301819052925161010090940416926314b6ca969260448084019391929182900301818387803b1580156110e357600080fd5b505af11580156110f7573d6000803e3d6000fd5b5050505061117f565b601b546001600160a01b038381166000818152600a6020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b15801561116657600080fd5b505af115801561117a573d6000803e3d6000fd5b505050505b5050565b60075481565b6111923361167e565b6111d1576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600855565b60085481565b6000546001600160a01b031690565b600d6020526000908152604090205460ff1681565b6017546001600160a01b031681565b60408051808201909152600381526243495760e81b602082015290565b600f5481565b61123b3361167e565b61127a576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6019546001600160a01b031681565b6000610d0a338484611796565b6112ca3361167e565b611309576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601b60019054906101000a90046001600160a01b03166001600160a01b0316632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561116657600080fd5b61137533610d60565b6113af576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b601b5461010090046001600160a01b031681565b601a5481565b6015546001600160a01b031681565b60145481565b61140e3361167e565b61144d576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600755565b601d5462010000900460ff1681565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b6114953361167e565b6114d4576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6009805460ff1916911515919091179055565b6114f033610d60565b61152a576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600160205260409020805460ff19169055565b61155433610d60565b61158e576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff1916909217909155825191825291517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163929181900390910190a150565b6018546001600160a01b031681565b6116143361167e565b611653576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b601b5460ff1681565b600082820183811015610d0a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000818484111561178e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561175357818101518382015260200161173b565b50505050905090810190601f1680156117805780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b601d5460009060ff16156117b6576117af848484611cf4565b9050610d0a565b6001600160a01b03841660009081526001602052604090205460ff161580156117f857506001600160a01b03831660009081526001602052604090205460ff16155b1561184b57601b5460ff1661184b576040805162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b604482015290519081900360640190fd5b6007548211158061187457506001600160a01b0384166000908152600d602052604090205460ff165b6118b9576040805162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015290519081900360640190fd5b6019546001600160a01b031633148015906118d75750601d5460ff16155b80156118ea5750601d54610100900460ff165b80156119075750601e54306000908152600a602052604090205410155b1561191457611914611dd5565b61191c6122ce565b15801561193657506019546001600160a01b038481169116145b15611965576001600160a01b0384166000908152600a602052604090205461195d57600080fd5b6119656122d6565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600a90915291909120546119b79184906116ff565b6001600160a01b038086166000908152600a60209081526040808320949094559186168152600d909152205460ff161580156119f5575060095460ff165b15611a2b576008546001600160a01b0384166000908152600a6020526040902054611a2090846116a5565b1115611a2b57600080fd5b6001600160a01b0384166000908152600c602052604081205460ff16158015611a6d57506001600160a01b0384166000908152600c602052604090205460ff16155b611a775782611a82565b611a828585856122dc565b6001600160a01b0385166000908152600a6020526040902054909150611aa890826116a5565b6001600160a01b038086166000908152600a60209081526040808320949094559188168152600e909152205460ff16611b5457601b546001600160a01b038681166000818152600a6020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b158015611b4157600080fd5b505af1925050508015611b52575060015b505b6001600160a01b0384166000908152600e602052604090205460ff16611bed57601b546001600160a01b038581166000818152600a6020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b158015611bda57600080fd5b505af1925050508015611beb575060015b505b601b60019054906101000a90046001600160a01b03166001600160a01b031663ffb2c479601c546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c4a57600080fd5b505af1925050508015611c5b575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b6000610d0a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506116ff565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600a90915291822054611d459184906116ff565b6001600160a01b038086166000908152600a60205260408082209390935590851681522054611d7490836116a5565b6001600160a01b038085166000818152600a602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b601d805460ff19166001179055306000908152600a6020526040812054601354600f54919291611e1691600291611e1091908290879061239b565b906123f4565b90506000611e248383611cb2565b6040805160028082526060808301845293945090916020830190803683370190505090503081600081518110611e5657fe5b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611eaa57600080fd5b505afa158015611ebe573d6000803e3d6000fd5b505050506040513d6020811015611ed457600080fd5b5051815182906001908110611ee557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050601860009054906101000a90046001600160a01b03166001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015611f9f578181015183820152602001611f87565b505050509050019650505050505050600060405180830381600087803b158015611fc857600080fd5b505af1158015611fdc573d6000803e3d6000fd5b5050600f544792506000915061200090611ff79060026123f4565b60135490611cb2565b905060006120226002611e1084611e10600f548861239b90919063ffffffff16565b9050600061203f83611e106011548761239b90919063ffffffff16565b9050600061205182610d4f8786611cb2565b9050601b60019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156120a357600080fd5b505af1935050505080156120b5575060015b5060006120c86004611e1084600361239b565b905060006120d68383611cb2565b6016546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d806000811461212d576040519150601f19603f3d011682016040523d82523d6000602084013e612132565b606091505b50506017546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d806000811461218b576040519150601f19603f3d011682016040523d82523d6000602084013e612190565b606091505b5060009350839250508c1590506122b557601860009054906101000a90046001600160a01b03166001600160a01b031663f305d71988308f600080601560009054906101000a90046001600160a01b0316426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b15801561224c57600080fd5b505af1158015612260573d6000803e3d6000fd5b50505050506040513d606081101561227757600080fd5b505060408051888152602081018e905281517f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506929181900390910190a15b5050601d805460ff191690555050505050505050505050565b601a54151590565b43601a55565b60195460009081906001600160a01b038581169116146122fe57601354612302565b6014545b905060006123156064611e10868561239b565b306000908152600a602052604090205490915061233290826116a5565b306000818152600a6020908152604091829020939093558051848152905191926001600160a01b038a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a36123918482611cb2565b9695505050505050565b6000826123aa57506000610be7565b828202828482816123b757fe5b0414610d0a5760405162461bcd60e51b81526004018080602001828103825260218152602001806124976021913960400191505060405180910390fd5b6000610d0a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836124805760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561175357818101518382015260200161173b565b50600083858161248c57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212200ee8b9571fa63519f786c6c03244aefd38359bc857314c1508311aaf73eee68164736f6c634300070400336080604052600280546001600160a01b031990811673145677fc4d9b8f19b5d56d1820c48e0443049a30179091556003805490911673e44fd7fcb2b1581822d0c862b68222998a0c299a1790556ec097ce7bc90715b34b9f1000000000600c55610708600d556509184e72a000600e5534801561007b57600080fd5b50604051610f76380380610f768339818101604052602081101561009e57600080fd5b50516001600160a01b0381166100bf576002546001600160a01b03166100c1565b805b600180546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610e7b806100fb6000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610254578063f0fc6bca14610269578063ffb2c4791461027e578063ffd49c84146102a8576100dd565b8063ce7c2ac2146101e6578063d0e30db014610237578063e2d2e2191461023f576100dd565b80632d48e896116100bb5780632d48e896146101775780633a98ef39146101a75780634fab0ae8146101bc578063997664d7146101d1576100dd565b806311ce023d146100e257806314b6ca961461010957806328fd319814610144575b600080fd5b3480156100ee57600080fd5b506100f76102bd565b60408051918252519081900360200190f35b34801561011557600080fd5b506101426004803603604081101561012c57600080fd5b506001600160a01b0381351690602001356102c3565b005b34801561015057600080fd5b506100f76004803603602081101561016757600080fd5b50356001600160a01b03166103e8565b34801561018357600080fd5b506101426004803603604081101561019a57600080fd5b5080359060200135610474565b3480156101b357600080fd5b506100f7610496565b3480156101c857600080fd5b506100f761049c565b3480156101dd57600080fd5b506100f76104a2565b3480156101f257600080fd5b506102196004803603602081101561020957600080fd5b50356001600160a01b03166104a8565b60408051938452602084019290925282820152519081900360600190f35b6101426104c9565b34801561024b57600080fd5b506100f76107bd565b34801561026057600080fd5b506100f76107c3565b34801561027557600080fd5b506101426107c9565b34801561028a57600080fd5b50610142600480360360208110156102a157600080fd5b503561082e565b3480156102b457600080fd5b506100f7610913565b600c5481565b6000546001600160a01b031633146102da57600080fd5b6001600160a01b038216600090815260076020526040902054156103015761030182610919565b60008111801561032757506001600160a01b038216600090815260076020526040902054155b1561033a5761033582610a41565b61036d565b8015801561035f57506001600160a01b03821660009081526007602052604090205415155b1561036d5761036d82610aa2565b6001600160a01b03821660009081526007602052604090205460085461039e91839161039891610b8f565b90610bda565b6008556001600160a01b03821660009081526007602052604090208190556103c581610c34565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b03811660009081526007602052604081205461040d5750600061046f565b6001600160a01b03821660009081526007602052604081205461042f90610c34565b6001600160a01b0384166000908152600760205260409020600101549091508082116104605760009250505061046f565b61046a8282610b8f565b925050505b919050565b6000546001600160a01b0316331461048b57600080fd5b600d91909155600e55565b60085481565b600e5481565b60095481565b60076020526000908152604090208054600182015460029092015490919083565b6000546001600160a01b031633146104e057600080fd5b600354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561052b57600080fd5b505afa15801561053f573d6000803e3d6000fd5b505050506040513d602081101561055557600080fd5b50516040805160028082526060808301845293945090916020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b1580156105bf57600080fd5b505afa1580156105d3573d6000803e3d6000fd5b505050506040513d60208110156105e957600080fd5b5051815182906000906105f857fe5b6001600160a01b03928316602091820292909201015260035482519116908290600190811061062357fe5b6001600160a01b0392831660209182029290920181019190915260015460405163b6f9de9560e01b815260006004820181815230604484018190524260648501819052608060248601908152895160848701528951969098169763b6f9de9597349795968b969495939460a49091019187810191028083838b5b838110156106b557818101518382015260200161069d565b50505050905001955050505050506000604051808303818588803b1580156106dc57600080fd5b505af11580156106f0573d6000803e3d6000fd5b5050600354604080516370a0823160e01b815230600482015290516000955061077b94508793506001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561074957600080fd5b505afa15801561075d573d6000803e3d6000fd5b505050506040513d602081101561077357600080fd5b505190610b8f565b60095490915061078b9082610bda565b600955600854600c546107b5916107ac916107a69085610c51565b90610caa565b600b5490610bda565b600b55505050565b600b5481565b600a5481565b6107d233610cec565b610823576040805162461bcd60e51b815260206004820152601760248201527f546f6f20736f6f6e2e204e65656420746f207761697421000000000000000000604482015290519081900360640190fd5b61082c33610919565b565b6000546001600160a01b0316331461084557600080fd5b600454806108535750610910565b60008060005a90505b848210801561086a57508383105b1561090b5783600f541061087e576000600f555b6108aa6004600f548154811061089057fe5b6000918252602090912001546001600160a01b0316610cec565b156108db576108db6004600f54815481106108c157fe5b6000918252602090912001546001600160a01b0316610919565b6108f06108e95a8390610b8f565b8390610bda565b91505a600f805460019081019091559390930192905061085c565b505050505b50565b600d5481565b6001600160a01b03811660009081526007602052604090205461093b57610910565b6000610946826103e8565b90508015610a3d57600a5461095b9082610bda565b600a556003546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156109b457600080fd5b505af11580156109c8573d6000803e3d6000fd5b505050506040513d60208110156109de57600080fd5b50506001600160a01b03821660009081526006602090815260408083204290556007909152902060020154610a139082610bda565b6001600160a01b03831660009081526007602052604090206002810191909155546103c590610c34565b5050565b600480546001600160a01b039092166000818152600560205260408120849055600184018355919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90910180546001600160a01b0319169091179055565b600480546000198101908110610ab457fe5b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610aec57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916000198101908110610b3a57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610b6a57fe5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610bd183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610d28565b90505b92915050565b600082820183811015610bd1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000610bd4600c546107a6600b5485610c5190919063ffffffff16565b600082610c6057506000610bd4565b82820282848281610c6d57fe5b0414610bd15760405162461bcd60e51b8152600401808060200182810382526021815260200180610e256021913960400191505060405180910390fd5b6000610bd183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610dbf565b600d546001600160a01b0382166000908152600660205260408120549091429101108015610bd45750600e54610d21836103e8565b1192915050565b60008184841115610db75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d7c578181015183820152602001610d64565b50505050905090810190601f168015610da95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183610e0e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610d7c578181015183820152602001610d64565b506000838581610e1a57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122003e1d93fb75c6c85d9a7a204acc0ee744fe1dad48217a650b989a2b5ccd4bf4864736f6c63430007040033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80637db1342c11610190578063bf56b371116100dc578063e66b1d1e11610095578063f887ea401161006f578063f887ea4014610ac8578063fabe628314610add578063fe9fbb8014610b18578063ffb54a9914610b4b5761030a565b8063e66b1d1e14610a36578063f0b37c0414610a62578063f2fde38b14610a955761030a565b8063bf56b3711461097d578063ca33e64c14610992578063ca987b0e146109a7578063d920334e146109bc578063da00097d146109e6578063dd62ed3e146109fb5761030a565b806398118cb411610149578063a9059cbb11610123578063a9059cbb146108cc578063a9f7864b14610905578063b6a5d7de14610935578063bad3ea6a146109685761030a565b806398118cb414610867578063a3a2e89e1461087c578063a8aa1b31146108b75761030a565b80637db1342c146107b6578063807c2d9c146107e0578063893d20e8146107f55780638b42507f1461080a5780638ea5220f1461083d57806395d89b41146108525761030a565b80633f4218e01161024f578063650c42261161020857806370a08231116101e257806370a082311461070257806375f0a87414610735578063773fcb5c146107665780637d1db4a5146107a15761030a565b8063650c42261461069c57806369cf17d4146106d85780636b67c4df146106ed5761030a565b80633f4218e0146105af5780634355855a146105e257806344de2e4c14610615578063479f66d81461062a5780634a74bb0214610654578063571ac8b0146106695761030a565b806323b872dd116102bc5780632f54bf6e116102965780632f54bf6e146104d2578063313ce56714610505578063315dca291461053057806334c70889146105755761030a565b806323b872dd146104655780632b112e49146104a85780632bb14e1d146104bd5761030a565b80630445b6671461030f57806306fdde0314610336578063095ea7b3146103c05780630d2959801461040d57806318160ddd1461043b5780631df4ccfc146104505761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610b60565b60408051918252519081900360200190f35b34801561034257600080fd5b5061034b610b66565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561038557818101518382015260200161036d565b50505050905090810190601f1680156103b25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103cc57600080fd5b506103f9600480360360408110156103e357600080fd5b506001600160a01b038135169060200135610b86565b604080519115158252519081900360200190f35b34801561041957600080fd5b506104396004803603602081101561043057600080fd5b50351515610bed565b005b34801561044757600080fd5b50610324610c43565b34801561045c57600080fd5b50610324610c49565b34801561047157600080fd5b506103f96004803603606081101561048857600080fd5b506001600160a01b03813581169160208101359091169060400135610c4f565b3480156104b457600080fd5b50610324610d11565b3480156104c957600080fd5b50610324610d5a565b3480156104de57600080fd5b506103f9600480360360208110156104f557600080fd5b50356001600160a01b0316610d60565b34801561051157600080fd5b5061051a610d74565b6040805160ff9092168252519081900360200190f35b34801561053c57600080fd5b506104396004803603606081101561055357600080fd5b506001600160a01b038135811691602081013582169160409091013516610d79565b34801561058157600080fd5b506104396004803603606081101561059857600080fd5b508035151590602081013590604001351515610e00565b3480156105bb57600080fd5b506103f9600480360360208110156105d257600080fd5b50356001600160a01b0316610e7a565b3480156105ee57600080fd5b506103f96004803603602081101561060557600080fd5b50356001600160a01b0316610e8f565b34801561062157600080fd5b506103f9610ea4565b34801561063657600080fd5b506104396004803603602081101561064d57600080fd5b5035610ead565b34801561066057600080fd5b506103f9610f09565b34801561067557600080fd5b506103f96004803603602081101561068c57600080fd5b50356001600160a01b0316610f17565b3480156106a857600080fd5b50610439600480360360808110156106bf57600080fd5b5080359060208101359060408101359060600135610f25565b3480156106e457600080fd5b50610324610fb0565b3480156106f957600080fd5b50610324610fb6565b34801561070e57600080fd5b506103246004803603602081101561072557600080fd5b50356001600160a01b0316610fbc565b34801561074157600080fd5b5061074a610fd7565b604080516001600160a01b039092168252519081900360200190f35b34801561077257600080fd5b506104396004803603604081101561078957600080fd5b506001600160a01b0381351690602001351515610fe6565b3480156107ad57600080fd5b50610324611183565b3480156107c257600080fd5b50610439600480360360208110156107d957600080fd5b5035611189565b3480156107ec57600080fd5b506103246111d6565b34801561080157600080fd5b5061074a6111dc565b34801561081657600080fd5b506103f96004803603602081101561082d57600080fd5b50356001600160a01b03166111eb565b34801561084957600080fd5b5061074a611200565b34801561085e57600080fd5b5061034b61120f565b34801561087357600080fd5b5061032461122c565b34801561088857600080fd5b506104396004803603604081101561089f57600080fd5b506001600160a01b0381351690602001351515611232565b3480156108c357600080fd5b5061074a6112a5565b3480156108d857600080fd5b506103f9600480360360408110156108ef57600080fd5b506001600160a01b0381351690602001356112b4565b34801561091157600080fd5b506104396004803603604081101561092857600080fd5b50803590602001356112c1565b34801561094157600080fd5b506104396004803603602081101561095857600080fd5b50356001600160a01b031661136c565b34801561097457600080fd5b5061074a6113d6565b34801561098957600080fd5b506103246113ea565b34801561099e57600080fd5b5061074a6113f0565b3480156109b357600080fd5b506103246113ff565b3480156109c857600080fd5b50610439600480360360208110156109df57600080fd5b5035611405565b3480156109f257600080fd5b506103f9611452565b348015610a0757600080fd5b5061032460048036036040811015610a1e57600080fd5b506001600160a01b0381358116916020013516611461565b348015610a4257600080fd5b5061043960048036036020811015610a5957600080fd5b5035151561148c565b348015610a6e57600080fd5b5061043960048036036020811015610a8557600080fd5b50356001600160a01b03166114e7565b348015610aa157600080fd5b5061043960048036036020811015610ab857600080fd5b50356001600160a01b031661154b565b348015610ad457600080fd5b5061074a6115fc565b348015610ae957600080fd5b5061043960048036036040811015610b0057600080fd5b506001600160a01b038135169060200135151561160b565b348015610b2457600080fd5b506103f960048036036020811015610b3b57600080fd5b50356001600160a01b031661167e565b348015610b5757600080fd5b506103f961169c565b601e5481565b6040805180820190915260068152652a3cb1b7b7b760d11b602082015290565b336000818152600b602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b610bf633610d60565b610c30576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601b805460ff1916911515919091179055565b60065490565b60135481565b6001600160a01b0383166000908152600b6020908152604080832033845290915281205460001914610cfc576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600b82528381203382529091529190912054610cd79184906116ff565b6001600160a01b0385166000908152600b602090815260408083203384529091529020555b610d07848484611796565b90505b9392505050565b600354600090610d5590610d2d906001600160a01b0316610fbc565b600254610d4f90610d46906001600160a01b0316610fbc565b60065490611cb2565b90611cb2565b905090565b60115481565b6000546001600160a01b0390811691161490565b601290565b610d823361167e565b610dc1576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601580546001600160a01b039485166001600160a01b031991821617909155601680549385169382169390931790925560178054919093169116179055565b610e093361167e565b610e48576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601d8054601e93909355901515620100000262ff0000199315156101000261ff00199093169290921792909216179055565b600c6020526000908152604090205460ff1681565b600e6020526000908152604090205460ff1681565b60095460ff1681565b610eb63361167e565b610ef5576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b620493e08110610f0457600080fd5b601c55565b601d54610100900460ff1681565b6000610be782600019610b86565b610f2e3361167e565b610f6d576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600f849055601183905560108290556012819055610f9583610f8f86856116a5565b906116a5565b6013819055601254610fa791906116a5565b60145550505050565b60125481565b60105481565b6001600160a01b03166000908152600a602052604090205490565b6016546001600160a01b031681565b610fef3361167e565b61102e576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b038216301480159061105557506019546001600160a01b03838116911614155b61105e57600080fd5b6001600160a01b0382166000908152600e60205260409020805460ff1916821580159190911790915561110057601b5460408051630a5b654b60e11b81526001600160a01b038581166004830152600060248301819052925161010090940416926314b6ca969260448084019391929182900301818387803b1580156110e357600080fd5b505af11580156110f7573d6000803e3d6000fd5b5050505061117f565b601b546001600160a01b038381166000818152600a6020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b15801561116657600080fd5b505af115801561117a573d6000803e3d6000fd5b505050505b5050565b60075481565b6111923361167e565b6111d1576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600855565b60085481565b6000546001600160a01b031690565b600d6020526000908152604090205460ff1681565b6017546001600160a01b031681565b60408051808201909152600381526243495760e81b602082015290565b600f5481565b61123b3361167e565b61127a576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6019546001600160a01b031681565b6000610d0a338484611796565b6112ca3361167e565b611309576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601b60019054906101000a90046001600160a01b03166001600160a01b0316632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561116657600080fd5b61137533610d60565b6113af576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b601b5461010090046001600160a01b031681565b601a5481565b6015546001600160a01b031681565b60145481565b61140e3361167e565b61144d576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600755565b601d5462010000900460ff1681565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b6114953361167e565b6114d4576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6009805460ff1916911515919091179055565b6114f033610d60565b61152a576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600160205260409020805460ff19169055565b61155433610d60565b61158e576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff1916909217909155825191825291517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163929181900390910190a150565b6018546001600160a01b031681565b6116143361167e565b611653576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b601b5460ff1681565b600082820183811015610d0a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000818484111561178e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561175357818101518382015260200161173b565b50505050905090810190601f1680156117805780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b601d5460009060ff16156117b6576117af848484611cf4565b9050610d0a565b6001600160a01b03841660009081526001602052604090205460ff161580156117f857506001600160a01b03831660009081526001602052604090205460ff16155b1561184b57601b5460ff1661184b576040805162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b604482015290519081900360640190fd5b6007548211158061187457506001600160a01b0384166000908152600d602052604090205460ff165b6118b9576040805162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015290519081900360640190fd5b6019546001600160a01b031633148015906118d75750601d5460ff16155b80156118ea5750601d54610100900460ff165b80156119075750601e54306000908152600a602052604090205410155b1561191457611914611dd5565b61191c6122ce565b15801561193657506019546001600160a01b038481169116145b15611965576001600160a01b0384166000908152600a602052604090205461195d57600080fd5b6119656122d6565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600a90915291909120546119b79184906116ff565b6001600160a01b038086166000908152600a60209081526040808320949094559186168152600d909152205460ff161580156119f5575060095460ff165b15611a2b576008546001600160a01b0384166000908152600a6020526040902054611a2090846116a5565b1115611a2b57600080fd5b6001600160a01b0384166000908152600c602052604081205460ff16158015611a6d57506001600160a01b0384166000908152600c602052604090205460ff16155b611a775782611a82565b611a828585856122dc565b6001600160a01b0385166000908152600a6020526040902054909150611aa890826116a5565b6001600160a01b038086166000908152600a60209081526040808320949094559188168152600e909152205460ff16611b5457601b546001600160a01b038681166000818152600a6020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b158015611b4157600080fd5b505af1925050508015611b52575060015b505b6001600160a01b0384166000908152600e602052604090205460ff16611bed57601b546001600160a01b038581166000818152600a6020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b158015611bda57600080fd5b505af1925050508015611beb575060015b505b601b60019054906101000a90046001600160a01b03166001600160a01b031663ffb2c479601c546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c4a57600080fd5b505af1925050508015611c5b575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b6000610d0a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506116ff565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600a90915291822054611d459184906116ff565b6001600160a01b038086166000908152600a60205260408082209390935590851681522054611d7490836116a5565b6001600160a01b038085166000818152600a602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b601d805460ff19166001179055306000908152600a6020526040812054601354600f54919291611e1691600291611e1091908290879061239b565b906123f4565b90506000611e248383611cb2565b6040805160028082526060808301845293945090916020830190803683370190505090503081600081518110611e5657fe5b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611eaa57600080fd5b505afa158015611ebe573d6000803e3d6000fd5b505050506040513d6020811015611ed457600080fd5b5051815182906001908110611ee557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050601860009054906101000a90046001600160a01b03166001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015611f9f578181015183820152602001611f87565b505050509050019650505050505050600060405180830381600087803b158015611fc857600080fd5b505af1158015611fdc573d6000803e3d6000fd5b5050600f544792506000915061200090611ff79060026123f4565b60135490611cb2565b905060006120226002611e1084611e10600f548861239b90919063ffffffff16565b9050600061203f83611e106011548761239b90919063ffffffff16565b9050600061205182610d4f8786611cb2565b9050601b60019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156120a357600080fd5b505af1935050505080156120b5575060015b5060006120c86004611e1084600361239b565b905060006120d68383611cb2565b6016546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d806000811461212d576040519150601f19603f3d011682016040523d82523d6000602084013e612132565b606091505b50506017546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d806000811461218b576040519150601f19603f3d011682016040523d82523d6000602084013e612190565b606091505b5060009350839250508c1590506122b557601860009054906101000a90046001600160a01b03166001600160a01b031663f305d71988308f600080601560009054906101000a90046001600160a01b0316426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b15801561224c57600080fd5b505af1158015612260573d6000803e3d6000fd5b50505050506040513d606081101561227757600080fd5b505060408051888152602081018e905281517f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506929181900390910190a15b5050601d805460ff191690555050505050505050505050565b601a54151590565b43601a55565b60195460009081906001600160a01b038581169116146122fe57601354612302565b6014545b905060006123156064611e10868561239b565b306000908152600a602052604090205490915061233290826116a5565b306000818152600a6020908152604091829020939093558051848152905191926001600160a01b038a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a36123918482611cb2565b9695505050505050565b6000826123aa57506000610be7565b828202828482816123b757fe5b0414610d0a5760405162461bcd60e51b81526004018080602001828103825260218152602001806124976021913960400191505060405180910390fd5b6000610d0a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836124805760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561175357818101518382015260200161173b565b50600083858161248c57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212200ee8b9571fa63519f786c6c03244aefd38359bc857314c1508311aaf73eee68164736f6c63430007040033

Deployed ByteCode Sourcemap

11485:11946:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13189:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14623:80;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15467:216;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15467:216:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21336:98;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21336:98:0;;;;:::i;:::-;;14885:88;;;;;;;;;;;;;:::i;12644:27::-;;;;;;;;;;;;;:::i;18518:372::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18518:372:0;;;;;;;;;;;;;;;;;:::i;15065:142::-;;;;;;;;;;;;;:::i;12566:29::-;;;;;;;;;;;;;:::i;10855:103::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10855:103:0;-1:-1:-1;;;;;10855:103:0;;:::i;14799:80::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17430:273;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17430:273:0;;;;;;;;;;;;;;;;;;;:::i;17711:276::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17711:276:0;;;;;;;;;;;;;;;;:::i;12327:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12327:44:0;-1:-1:-1;;;;;12327:44:0;;:::i;12433:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12433:49:0;-1:-1:-1;;;;;12433:49:0;;:::i;12170:33::-;;;;;;;;;;;;;:::i;18203:139::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18203:139:0;;:::i;13088:40::-;;;;;;;;;;;;;:::i;15691:116::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15691:116:0;-1:-1:-1;;;;;15691:116:0;;:::i;16991:431::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16991:431:0;;;;;;;;;;;;;;;;;:::i;12602:33::-;;;;;;;;;;;;;:::i;12529:30::-;;;;;;;;;;;;;:::i;15215:105::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15215:105:0;-1:-1:-1;;;;;15215:105:0;;:::i;12766:30::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;12766:30:0;;;;;;;;;;;;;;16607:376;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16607:376:0;;;;;;;;;;:::i;12034:59::-;;;;;;;;;;;;;:::i;16103:106::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16103:106:0;;:::i;12100:57::-;;;;;;;;;;;;;:::i;14979:78::-;;;;;;;;;;;;;:::i;12378:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12378:48:0;-1:-1:-1;;;;;12378:48:0;;:::i;12803:24::-;;;;;;;;;;;;;:::i;14709:84::-;;;;;;;;;;;;;:::i;12491:31::-;;;;;;;;;;;;;:::i;16337:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16337:123:0;;;;;;;;;;:::i;12867:19::-;;;;;;;;;;;;;:::i;18354:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18354:156:0;;;;;;;;:::i;17995:200::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17995:200:0;;;;;;;:::i;10528:94::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10528:94:0;-1:-1:-1;;;;;10528:94:0;;:::i;12967:46::-;;;;;;;;;;;;;:::i;12895:25::-;;;;;;;;;;;;;:::i;12723:36::-;;;;;;;;;;;;;:::i;12678:::-;;;;;;;;;;;;;:::i;15992:103::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15992:103:0;;:::i;13135:45::-;;;;;;;;;;;;;:::i;15326:133::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15326:133:0;;;;;;;;;;:::i;16217:108::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16217:108:0;;;;:::i;10698:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10698:97:0;-1:-1:-1;;;;;10698:97:0;;:::i;11255:173::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11255:173:0;-1:-1:-1;;;;;11255:173:0;;:::i;12836:24::-;;;;;;;;;;;;;:::i;16468:131::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16468:131:0;;;;;;;;;;:::i;11029:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11029:107:0;-1:-1:-1;;;;;11029:107:0;;:::i;12927:31::-;;;;;;;;;;;;;:::i;13189:60::-;;;;:::o;14623:80::-;14695:5;;;;;;;;;;;;-1:-1:-1;;;14695:5:0;;;;14623:80;:::o;15467:216::-;15571:10;15542:4;15559:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;15559:32:0;;;;;;;;;;;:41;;;15616:37;;;;;;;15542:4;;15559:32;;15571:10;;15616:37;;;;;;;;-1:-1:-1;15671:4:0;15467:216;;;;;:::o;21336:98::-;10244:19;10252:10;10244:7;:19::i;:::-;10236:38;;;;;-1:-1:-1;;;10236:38:0;;;;;;;;;;;;-1:-1:-1;;;10236:38:0;;;;;;;;;;;;;;;21403:11:::1;:23:::0;;-1:-1:-1;;21403:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21336:98::o;14885:88::-;14958:12;;14885:88;:::o;12644:27::-;;;;:::o;18518:372::-;-1:-1:-1;;;;;18648:19:0;;18618:4;18648:19;;;:11;:19;;;;;;;;18668:10;18648:31;;;;;;;;-1:-1:-1;;18648:46:0;18645:180;;18744:69;;;;;;;;;;;-1:-1:-1;;;18744:69:0;;;;;;;;-1:-1:-1;;;;;18744:19:0;;-1:-1:-1;18744:19:0;;;:11;:19;;;;;18764:10;18744:31;;;;;;;;;;:69;;18780:6;;18744:35;:69::i;:::-;-1:-1:-1;;;;;18710:19:0;;;;;;:11;:19;;;;;;;;18730:10;18710:31;;;;;;;:103;18645:180;18842:40;18856:6;18864:9;18875:6;18842:13;:40::i;:::-;18835:47;;18518:372;;;;;;:::o;15065:142::-;15193:4;;15118:7;;15145:54;;15183:15;;-1:-1:-1;;;;;15193:4:0;15183:9;:15::i;:::-;15172:4;;15145:33;;15162:15;;-1:-1:-1;;;;;15172:4:0;15162:9;:15::i;:::-;15145:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;15138:61;;15065:142;:::o;12566:29::-;;;;:::o;10855:103::-;10910:4;10945:5;-1:-1:-1;;;;;10945:5:0;;;10934:16;;;;10855:103::o;14799:80::-;11669:2;14799:80;:::o;17430:273::-;10413:24;10426:10;10413:12;:24::i;:::-;10405:48;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;;;;17569:21:::1;:44:::0;;-1:-1:-1;;;;;17569:44:0;;::::1;-1:-1:-1::0;;;;;;17569:44:0;;::::1;;::::0;;;17624:15:::1;:36:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;17671:9:::1;:24:::0;;;;;::::1;::::0;::::1;;::::0;;17430:273::o;17711:276::-;10413:24;10426:10;10413:12;:24::i;:::-;10405:48;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;;;;17843:21:::1;:39:::0;;17893:13:::1;:32:::0;;;;17936:43;::::1;;::::0;::::1;-1:-1:-1::0;;17843:39:0;::::1;;;;-1:-1:-1::0;;17843:39:0;;::::1;::::0;;;::::1;17936:43:::0;;;::::1;;::::0;;17711:276::o;12327:44::-;;;;;;;;;;;;;;;:::o;12433:49::-;;;;;;;;;;;;;;;:::o;12170:33::-;;;;;;:::o;18203:139::-;10413:24;10426:10;10413:12;:24::i;:::-;10405:48;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;;;;18296:6:::1;18290:3;:12;18282:21;;;::::0;::::1;;18314:14;:20:::0;18203:139::o;13088:40::-;;;;;;;;;:::o;15691:116::-;15746:4;15770:29;15778:7;-1:-1:-1;;15770:7:0;:29::i;16991:431::-;10413:24;10426:10;10413:12;:24::i;:::-;10405:48;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;;;;17133:12:::1;:24:::0;;;17168:10:::1;:25:::0;;;17204:12:::1;:30:::0;;;17245:14:::1;:32:::0;;;17309:46:::1;17181:12:::0;17309:30:::1;17148:9:::0;17219:15;17309:16:::1;:30::i;:::-;:34:::0;::::1;:46::i;:::-;17298:8;:57:::0;;;17399:14:::1;::::0;17386:28:::1;::::0;17298:57;17386:12:::1;:28::i;:::-;17366:17;:48:::0;-1:-1:-1;;;;16991:431:0:o;12602:33::-;;;;:::o;12529:30::-;;;;:::o;15215:105::-;-1:-1:-1;;;;;15299:18:0;15281:7;15299:18;;;:9;:18;;;;;;;15215:105::o;12766:30::-;;;-1:-1:-1;;;;;12766:30:0;;:::o;16607:376::-;10413:24;10426:10;10413:12;:24::i;:::-;10405:48;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16707:23:0;::::1;16725:4;16707:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;16744:4:0::1;::::0;-1:-1:-1;;;;;16734:14:0;;::::1;16744:4:::0;::::1;16734:14;;16707:41;16699:50;;;::::0;::::1;;-1:-1:-1::0;;;;;16760:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;16760:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;16814:162:::1;;16839:19;::::0;:39:::1;::::0;;-1:-1:-1;;;16839:39:0;;-1:-1:-1;;;;;16839:39:0;;::::1;;::::0;::::1;::::0;16876:1:::1;16839:39:::0;;;;;;;;:19:::1;::::0;;::::1;;::::0;:28:::1;::::0;:39;;;;;16876:1;;16839:39;;;;;;16876:1;16839:19;:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16814:162;;;16909:19;::::0;-1:-1:-1;;;;;16946:17:0;;::::1;;::::0;;;:9:::1;:17;::::0;;;;;;16909:55;;-1:-1:-1;;;16909:55:0;;::::1;::::0;::::1;::::0;;;;;;;;;:19:::1;::::0;;::::1;::::0;;::::1;::::0;:28:::1;::::0;:55;;;;;16946:17;;16909:55;;;;;;16946:17;16909:19;:55;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16814:162;16607:376:::0;;:::o;12034:59::-;;;;:::o;16103:106::-;10413:24;10426:10;10413:12;:24::i;:::-;10405:48;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;;;;16179:10:::1;:22:::0;16103:106::o;12100:57::-;;;;:::o;14979:78::-;15031:7;15049:5;-1:-1:-1;;;;;15049:5:0;14979:78;:::o;12378:48::-;;;;;;;;;;;;;;;:::o;12803:24::-;;;-1:-1:-1;;;;;12803:24:0;;:::o;14709:84::-;14783:7;;;;;;;;;;;;-1:-1:-1;;;14783:7:0;;;;14709:84;:::o;12491:31::-;;;;:::o;16337:123::-;10413:24;10426:10;10413:12;:24::i;:::-;10405:48;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16424:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;16424:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16337:123::o;12867:19::-;;;-1:-1:-1;;;;;12867:19:0;;:::o;18354:156::-;18434:4;18458:44;18472:10;18484:9;18495:6;18458:13;:44::i;17995:200::-;10413:24;10426:10;10413:12;:24::i;:::-;10405:48;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;;;;18111:19:::1;;;;;;;;;-1:-1:-1::0;;;;;18111:19:0::1;-1:-1:-1::0;;;;;18111:43:0::1;;18155:11;18168:18;18111:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;10528:94:::0;10244:19;10252:10;10244:7;:19::i;:::-;10236:38;;;;;-1:-1:-1;;;10236:38:0;;;;;;;;;;;;-1:-1:-1;;;10236:38:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10588:19:0::1;;::::0;;;10610:4:::1;10588:19;::::0;;;;;;;:26;;-1:-1:-1;;10588:26:0::1;::::0;;::::1;::::0;;10528:94::o;12967:46::-;;;;;;-1:-1:-1;;;;;12967:46:0;;:::o;12895:25::-;;;;:::o;12723:36::-;;;-1:-1:-1;;;;;12723:36:0;;:::o;12678:::-;;;;:::o;15992:103::-;10413:24;10426:10;10413:12;:24::i;:::-;10405:48;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;;;;16064:12:::1;:23:::0;15992:103::o;13135:45::-;;;;;;;;;:::o;15326:133::-;-1:-1:-1;;;;;15428:19:0;;;15410:7;15428:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15326:133::o;16217:108::-;10413:24;10426:10;10413:12;:24::i;:::-;10405:48;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;;;;16292:14:::1;:25:::0;;-1:-1:-1;;16292:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16217:108::o;10698:97::-;10244:19;10252:10;10244:7;:19::i;:::-;10236:38;;;;;-1:-1:-1;;;10236:38:0;;;;;;;;;;;;-1:-1:-1;;;10236:38:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10760:19:0::1;10782:5;10760:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;10760:27:0::1;::::0;;10698:97::o;11255:173::-;10244:19;10252:10;10244:7;:19::i;:::-;10236:38;;;;;-1:-1:-1;;;10236:38:0;;;;;;;;;;;;-1:-1:-1;;;10236:38:0;;;;;;;;;;;;;;;11331:5:::1;:11:::0;;-1:-1:-1;;;;;;11331:11:0::1;-1:-1:-1::0;;;;;11331:11:0;::::1;::::0;;::::1;::::0;;11353:19;;;-1:-1:-1;11353:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;11353:26:0::1;::::0;;::::1;::::0;;;11395:25;;;;;;;::::1;::::0;;;;;;;;;::::1;11255:173:::0;:::o;12836:24::-;;;-1:-1:-1;;;;;12836:24:0;;:::o;16468:131::-;10413:24;10426:10;10413:12;:24::i;:::-;10405:48;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;-1:-1:-1;;;10405:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16559:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;16559:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16468:131::o;11029:107::-;-1:-1:-1;;;;;11109:19:0;11085:4;11109:19;;;:14;:19;;;;;;;;;11029:107::o;12927:31::-;;;;;;:::o;303:179::-;361:7;393:5;;;417:6;;;;409:46;;;;;-1:-1:-1;;;409:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;634:190;720:7;756:12;748:6;;;;740:29;;;;-1:-1:-1;;;740:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;792:5:0;;;634:190::o;18898:1641::-;19020:16;;18990:4;;19020:16;;19017:73;;;19046:41;19061:6;19069:9;19080:6;19046:14;:41::i;:::-;19039:48;;;;19017:73;-1:-1:-1;;;;;19106:22:0;;;;;;:14;:22;;;;;;;;19105:23;:53;;;;-1:-1:-1;;;;;;19133:25:0;;;;;;:14;:25;;;;;;;;19132:26;19105:53;19102:128;;;19182:11;;;;19174:44;;;;;-1:-1:-1;;;19174:44:0;;;;;;;;;;;;-1:-1:-1;;;19174:44:0;;;;;;;;;;;;;;;19260:12;;19250:6;:22;;:49;;;-1:-1:-1;;;;;;19276:23:0;;;;;;:15;:23;;;;;;;;19250:49;19242:79;;;;;-1:-1:-1;;;19242:79:0;;;;;;;;;;;;-1:-1:-1;;;19242:79:0;;;;;;;;;;;;;;;19351:4;;-1:-1:-1;;;;;19351:4:0;19337:10;:18;;;;:39;;-1:-1:-1;19360:16:0;;;;19359:17;19337:39;:64;;;;-1:-1:-1;19380:21:0;;;;;;;19337:64;:109;;;;-1:-1:-1;19433:13:0;;19423:4;19405:24;;;;:9;:24;;;;;;:41;;19337:109;19334:128;;;19449:10;:8;:10::i;:::-;19478;:8;:10::i;:::-;19477:11;:32;;;;-1:-1:-1;19505:4:0;;-1:-1:-1;;;;;19492:17:0;;;19505:4;;19492:17;19477:32;19474:117;;;-1:-1:-1;;;;;19534:17:0;;19554:1;19534:17;;;:9;:17;;;;;;19526:30;;;;;;19571:8;:6;:8::i;:::-;19650:53;;;;;;;;;;;-1:-1:-1;;;19650:53:0;;;;;;;;-1:-1:-1;;;;;19650:17:0;;-1:-1:-1;19650:17:0;;;:9;:17;;;;;;;;:53;;19672:6;;19650:21;:53::i;:::-;-1:-1:-1;;;;;19630:17:0;;;;;;;:9;:17;;;;;;;;:73;;;;19728:26;;;;;:15;:26;;;;;;;19727:27;:45;;;;-1:-1:-1;19758:14:0;;;;19727:45;19724:141;;;19842:10;;-1:-1:-1;;;;;19806:20:0;;;;;;:9;:20;;;;;;:32;;19831:6;19806:24;:32::i;:::-;:46;;19798:55;;;;;;-1:-1:-1;;;;;19900:19:0;;19877;19900;;;:11;:19;;;;;;;;19899:20;:47;;;;-1:-1:-1;;;;;;19924:22:0;;;;;;:11;:22;;;;;;;;19923:23;19899:47;:93;;19986:6;19899:93;;;19949:34;19957:6;19965:9;19976:6;19949:7;:34::i;:::-;-1:-1:-1;;;;;20026:20:0;;;;;;:9;:20;;;;;;19877:115;;-1:-1:-1;20026:37:0;;19877:115;20026:24;:37::i;:::-;-1:-1:-1;;;;;20003:20:0;;;;;;;:9;:20;;;;;;;;:60;;;;20109:24;;;;;:16;:24;;;;;;;20105:127;;20154:19;;-1:-1:-1;;;;;20191:17:0;;;;;;;:9;:17;;;;;;;20154:55;;-1:-1:-1;;;20154:55:0;;;;;;;;;;;;;;:19;;;;;;;;:28;;:55;;;;;20191:17;;20154:55;;;;;;20191:17;20154:19;:55;;;;;;;;;;;;;;;;;;;;;;;;;20150:71;;-1:-1:-1;;;;;20248:27:0;;;;;;:16;:27;;;;;;;;20244:137;;20296:19;;-1:-1:-1;;;;;20336:20:0;;;;;;;:9;:20;;;;;;;20296:61;;-1:-1:-1;;;20296:61:0;;;;;;;;;;;;;;:19;;;;;;;;:28;;:61;;;;;20336:20;;20296:61;;;;;;20336:20;20296:19;:61;;;;;;;;;;;;;;;;;;;;;;;;;20292:77;;20397:19;;;;;;;;;-1:-1:-1;;;;;20397:19:0;-1:-1:-1;;;;;20397:27:0;;20425:14;;20397:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20393:59;20486:9;-1:-1:-1;;;;;20469:40:0;20478:6;-1:-1:-1;;;;;20469:40:0;;20497:11;20469:40;;;;;;;;;;;;;;;;;;-1:-1:-1;20527:4:0;;18898:1641;-1:-1:-1;;;;18898:1641:0:o;490:136::-;548:7;575:43;579:1;582;575:43;;;;;;;;;;;;;;;;;:3;:43::i;20551:330::-;20681:53;;;;;;;;;;;-1:-1:-1;;;20681:53:0;;;;;;;;-1:-1:-1;;;;;20681:17:0;;20644:4;20681:17;;;:9;:17;;;;;;;:53;;20703:6;;20681:21;:53::i;:::-;-1:-1:-1;;;;;20661:17:0;;;;;;;:9;:17;;;;;;:73;;;;20768:20;;;;;;;:32;;20793:6;20768:24;:32::i;:::-;-1:-1:-1;;;;;20745:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;20816:35;;;;;;;20745:20;;20816:35;;;;;;;;;;;;;-1:-1:-1;20869:4:0;20551:330;;;;;:::o;21442:1920::-;13294:16;:23;;-1:-1:-1;;13294:23:0;13313:4;13294:23;;;21548:4:::1;13294:16:::0;21530:24;;;:9:::1;:24;::::0;;;;;21629:8:::1;::::0;21611:12:::1;::::0;21530:24;;13294:16;21591:54:::1;::::0;21643:1:::1;::::0;21591:47:::1;::::0;21629:8;21591:47;;21530:24;;21591:19:::1;:33::i;:::-;:37:::0;::::1;:47::i;:54::-;21565:80:::0;-1:-1:-1;21656:20:0::1;21679:36;:15:::0;21565:80;21679:19:::1;:36::i;:::-;21752:16;::::0;;21766:1:::1;21752:16:::0;;;21728:21:::1;21752:16:::0;;::::1;::::0;;21656:59;;-1:-1:-1;21752:16:0;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21752:16:0::1;21728:40;;21797:4;21779;21784:1;21779:7;;;;;;;;-1:-1:-1::0;;;;;21779:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;21823:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;21823:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;21779:7;;21823:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;21823:13:0;21813:7;;:4;;21818:1:::1;::::0;21813:7;::::1;;;;;;;;;;:23;-1:-1:-1::0;;;;;21813:23:0::1;;;-1:-1:-1::0;;;;;21813:23:0::1;;;::::0;::::1;21849:6;;;;;;;;;-1:-1:-1::0;;;;;21849:6:0::1;-1:-1:-1::0;;;;;21849:57:0::1;;21921:12;21948:1;21964:4;21991;22011:15;21849:188;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;21849:188:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22139:12:0::1;::::0;22070:21:::1;::::0;-1:-1:-1;22050:17:0::1;::::0;-1:-1:-1;22126:33:0::1;::::0;22139:19:::1;::::0;22156:1:::1;22139:16;:19::i;:::-;22126:8;::::0;;:12:::1;:33::i;:::-;22104:55;;22180:26;22209:51;22258:1;22209:44;22241:11;22209:27;22223:12;;22209:9;:13;;:27;;;;:::i;:51::-;22180:80;;22271:27;22301:42;22331:11;22301:25;22315:10;;22301:9;:13;;:25;;;;:::i;:42::-;22271:72:::0;-1:-1:-1;22354:26:0::1;22383:58;22271:72:::0;22383:33:::1;:9:::0;22397:18;22383:13:::1;:33::i;:58::-;22354:87;;22458:19;;;;;;;;;-1:-1:-1::0;;;;;22458:19:0::1;-1:-1:-1::0;;;;;22458:27:0::1;;22493:19;22458:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;22454:73:::0;22547:22:::1;22572:32;22602:1;22572:25;:18:::0;22595:1:::1;22572:22;:25::i;:32::-;22547:57:::0;-1:-1:-1;22615:16:0::1;22634:38;:18:::0;22547:57;22634:22:::1;:38::i;:::-;22722:15;::::0;22714:68:::1;::::0;22615:57;;-1:-1:-1;22694:15:0::1;::::0;-1:-1:-1;;;;;22722:15:0;;::::1;::::0;22772:5:::1;::::0;22751:14;;22694:15;22714:68;22694:15;22714:68;22751:14;22722:15;22772:5;22714:68:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;22823:9:0::1;::::0;22815:56:::1;::::0;22693:89;;-1:-1:-1;22794:16:0::1;::::0;-1:-1:-1;;;;;22823:9:0;;::::1;::::0;22861:5:::1;::::0;22846:8;;22794:16;22815:56;22794:16;22815:56;22846:8;22823:9;22861:5;22815:56:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;22945:5:0::1;::::0;-1:-1:-1;22945:5:0;;-1:-1:-1;;22996:19:0;;;-1:-1:-1;22993:362:0::1;;23031:6;;;;;;;;;-1:-1:-1::0;;;;;23031:6:0::1;-1:-1:-1::0;;;;;23031:22:0::1;;23061:18;23107:4;23131:15;23165:1;23185::::0;23205:21:::1;;;;;;;;;-1:-1:-1::0;;;;;23205:21:0::1;23245:15;23031:244;;;;;;;;;;;;;-1:-1:-1::0;;;;;23031:244:0::1;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;23031:244:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;23031:244:0;23295:48;;;;;23031:244:::1;23295:48:::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;22993:362;-1:-1:-1::0;;13340:16:0;:24;;-1:-1:-1;;13340:24:0;;;-1:-1:-1;;;;;;;;;;;21442:1920:0:o;15815:90::-;15882:10;;:15;;15815:90;:::o;15913:71::-;15964:12;15951:10;:25;15913:71::o;20889:439::-;21029:4;;20975:7;;;;-1:-1:-1;;;;;21029:17:0;;;:4;;:17;:48;;21069:8;;21029:48;;;21049:17;;21029:48;21005:72;-1:-1:-1;21088:17:0;21108:34;21138:3;21108:25;:6;21005:72;21108:10;:25::i;:34::-;21200:4;21182:24;;;;:9;:24;;;;;;21088:54;;-1:-1:-1;21182:39:0;;21088:54;21182:28;:39::i;:::-;21173:4;21155:24;;;;:9;:24;;;;;;;;;:66;;;;21237:42;;;;;;;21173:4;;-1:-1:-1;;;;;21237:42:0;;;;;;;;;;;;;21299:21;:6;21310:9;21299:10;:21::i;:::-;21292:28;20889:439;-1:-1:-1;;;;;;20889:439:0:o;832:224::-;890:7;914:6;910:25;;-1:-1:-1;931:1:0;924:8;;910:25;957:5;;;961:1;957;:5;:1;981:5;;;;;:10;973:56;;;;-1:-1:-1;;;973:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1064:132;1122:7;1149:39;1153:1;1156;1149:39;;;;;;;;;;;;;;;;;1290:7;1325:12;1318:5;1310:28;;;;-1:-1:-1;;;1310:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1349:9;1365:1;1361;:5;;;;;;;1204:189;-1:-1:-1;;;;;1204:189:0:o

Swarm Source

ipfs://03e1d93fb75c6c85d9a7a204acc0ee744fe1dad48217a650b989a2b5ccd4bf48
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.