Contract 0x2d29782d51bb69e79a1be8720e847d7c609e12f9

Contract Overview

Balance:
0.002960572356901062 CRO

CRO Value:
Less Than $0.01 (@ $0.15/CRO)

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x55c181ab1ecfd2801fa98d4d48f2e293072dfae699f3cfadc3a69510b3c3a440Approve131953122024-03-27 0:53:211 day 11 hrs ago0xc8de421eddfa1a0f404c4318a22e64e64bd7497c IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.2333366215 5,048.5
0xb363737d4adb99e34978900c973065d233ee43ecc8c0f631850d6d73900b336aApprove131952402024-03-27 0:46:351 day 11 hrs ago0xc8de421eddfa1a0f404c4318a22e64e64bd7497c IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.2348511715 5,048.5
0xb9c2b70e7323116d6d63cace943deaef68f963bf114faa770a65e9390a2492a0Approve131950642024-03-27 0:30:001 day 11 hrs ago0x14b24a96e55adb12d19551be5837f8262d79dd3e IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.234920950
0xd690de0ed659538aee76f554f7abcfb5596dcf55da625259d7a0e9d8d20b2d96Approve131902242024-03-26 16:53:461 day 19 hrs ago0xb7e0ef50e6d3d75b764d3e7edad51f1ab4cf881e IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.2348511715 5,048.5
0xca4d00eb21a72bd6435ca403f25c4aba10ffebccd851db524959e903954086a9Approve130991822024-03-20 18:17:597 days 17 hrs agoCronos ID Name alexstrasza.cro IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.1223503975 5,048.5
0x2767e79ceb2f5ea2e83af0c64e98ba23ee8ea4bb6d717d3aba6e921196151a6bTransfer130974132024-03-20 15:32:067 days 20 hrs ago0x56fb566305244339d89d427f412022b6eaff7d31 IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO1.6985728735 5,048.5
0xa8739ad7a4a75c267d42ceba0e52703dd87e37cee849d4ba41f6efa20d86ece3Transfer130969492024-03-20 14:48:367 days 21 hrs ago0x56fb566305244339d89d427f412022b6eaff7d31 IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO1.5500460035 5,048.5
0x3b3adbe1a53ef9a43755e92166d0312d1b935d1988f656c6efa49b7ddea043d6Transfer130969432024-03-20 14:48:027 days 21 hrs ago0x56fb566305244339d89d427f412022b6eaff7d31 IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO1.5500460035 5,048.5
0x85ca1b01d6c563d791e9be145f8b1d186ed2475d631893d56cd14a2ece45ca6aTransfer130900212024-03-20 4:00:078 days 7 hrs ago0x56fb566305244339d89d427f412022b6eaff7d31 IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO3.430536526 5,048.5
0xe83a86f2bbc13593aa44db5604250d9610ceec0be852a0900019f5b8a2ad3660Approve130738052024-03-19 2:39:059 days 9 hrs ago0xb10c554d4b5d179e0b4cbbb4dcce1889e1e5cdf8 IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.234920950
0x0732e99fbdfeeefc13adeea201d6984b9b0edd6ad4b70e21a100fd5cf145af01Approve129765562024-03-12 19:01:2215 days 16 hrs ago0x56fb566305244339d89d427f412022b6eaff7d31 IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.46961209614 10,095.06
0x6e595b14eedca5245c824866a803e4b0ba3aad626b9f45416a52a3fee2fd26e3Approve129679572024-03-12 5:43:0916 days 6 hrs ago0x9499c01e14de8bb19b49b5bde5ca3ffdecf2d535 IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.46984190
0x60f0755e5cfdb55d7f839a8adc8abaf58e2d5f84f7e113c1614b9ae902143385Approve129589452024-03-11 15:47:2216 days 20 hrs ago0x2970bb45f972230b69878be654ad95a4311e5d48 IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.46984190
0x0b3a93215bfd2020e8e387191729cc2550ea5bfece4c8bc05fc26e241dd179e5Approve129308952024-03-09 20:25:3218 days 15 hrs ago0x612e7c25f0c492240321cf418b5110c9e7d9abcb IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.469562786 10,094
0xaf6ddc1234d9f348c6f47aaccb962e9379932a31ecd927c64d57812317fbbcedApprove129304542024-03-09 19:44:3618 days 16 hrs ago0x612e7c25f0c492240321cf418b5110c9e7d9abcb IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.469702343 10,097
0x3c767d3c6051524415052ff577496012d2596aaad3f77aa6959178406341cfe5Transfer128661502024-03-05 16:24:0922 days 19 hrs ago0x56fb566305244339d89d427f412022b6eaff7d31 IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO3.100092007 10,097
0x1fa4d2a9538682654d13423c46b80945dbeee197fbab24a9d6ca7ede1e404551Transfer128598832024-03-05 6:42:2323 days 5 hrs ago0x56fb566305244339d89d427f412022b6eaff7d31 IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO7.378927988 10,097
0xb71898019c910755714e72f4889b085ad360dded55b20a8cfc17aa87c4805bf0Transfer128455382024-03-04 8:28:1024 days 3 hrs ago0x3798523e55cb5d6d44bab68b261e4069a1a053e5 IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO3.226033864358 10,076.223249901
0xb6cfa916f7fb5db66c805dc4d25232ca538a8096d38c2c6a3a896d0285f601eaApprove128438072024-03-04 5:45:5924 days 6 hrs ago0x3798523e55cb5d6d44bab68b261e4069a1a053e5 IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.469702343 10,097
0x0059282c6f13cc242b3e78e4e40ef273b3498705fa862eefc0ea3854427827d6Approve126157492024-02-18 11:43:3139 days 14 mins ago0xdce78af026405f1cd26b38c08b858bfc8b388728 IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.516826090
0x47f07e12d7854e1cbe7c0ca844ecedc9cd81357649469bb456b399477236eed1Approve122761122024-01-27 9:07:1561 days 2 hrs ago0x8871c7d9ba0941541c2f9d0081608fc66da01795 IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.516826090
0x9707dfd589e101dbe2699d0f49bc0b84fd7c0c1b24ffe4d93d8e024f4ff39bc2Approve118801132024-01-01 15:10:1486 days 20 hrs ago0x94c6aa4417d551711066c53c01d6c36fe751b3aa IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.46984190
0x7df09984f47e6d4549c6e61e68614c3b3b0a0936e0719557b16c1c3f1282314dApprove118460052023-12-30 10:03:1889 days 1 hr ago0x8acafe661942c33531a0a03e66c62f3f7de9327b IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.46984190
0x59a6568a1f32829c921967eaa604535921a91c8290ab7db62b57c184e03c3307Approve116961652023-12-20 16:39:3198 days 19 hrs ago0xf9ea95cecd56ba61b6c4b5c447a76732b282be7a IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.46984190
0x23dec313dba404afe7f1a7a8868b83113e615ef9e881b4d6a0e7ef1ff5747d15Approve116884712023-12-20 4:40:5699 days 7 hrs ago0xe96f089b86bc99f3df478f3632edcd6a2e4db54d IN  0x2d29782d51bb69e79a1be8720e847d7c609e12f90 CRO0.4698419000570
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x85ca1b01d6c563d791e9be145f8b1d186ed2475d631893d56cd14a2ece45ca6a130900212024-03-20 4:00:078 days 7 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x2d29782d51bb69e79a1be8720e847d7c609e12f90.002960572356901062 CRO
0x85ca1b01d6c563d791e9be145f8b1d186ed2475d631893d56cd14a2ece45ca6a130900212024-03-20 4:00:078 days 7 hrs ago 0x2d29782d51bb69e79a1be8720e847d7c609e12f9 Mad Meerkat Finance: Master Meerkat & Router0.782578809160267824 CRO
0x85ca1b01d6c563d791e9be145f8b1d186ed2475d631893d56cd14a2ece45ca6a130900212024-03-20 4:00:078 days 7 hrs ago 0x2d29782d51bb69e79a1be8720e847d7c609e12f9Null: 0x000…0000.782578809160267825 CRO
0x85ca1b01d6c563d791e9be145f8b1d186ed2475d631893d56cd14a2ece45ca6a130900212024-03-20 4:00:078 days 7 hrs ago 0x2d29782d51bb69e79a1be8720e847d7c609e12f90xc3872fe2c27e794dc8d63b8ba42647421d8631d12.347736427480803474 CRO
0x85ca1b01d6c563d791e9be145f8b1d186ed2475d631893d56cd14a2ece45ca6a130900212024-03-20 4:00:078 days 7 hrs ago 0x2d29782d51bb69e79a1be8720e847d7c609e12f9 0x786f0bb42e48bb46d009b9b95218132ab324e2bd3.130315236641071297 CRO
0x85ca1b01d6c563d791e9be145f8b1d186ed2475d631893d56cd14a2ece45ca6a130900212024-03-20 4:00:078 days 7 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x2d29782d51bb69e79a1be8720e847d7c609e12f97.005645456638384582 CRO
0x8d0d0e82bb2e69dc8ca956cfea7ec223491321306b85f14ee2afce6b1aafb27c130635012024-03-18 10:32:1710 days 1 hr ago Mad Meerkat Finance: Master Meerkat & Router 0x2d29782d51bb69e79a1be8720e847d7c609e12f90.037563825804025838 CRO
0x8d0d0e82bb2e69dc8ca956cfea7ec223491321306b85f14ee2afce6b1aafb27c130635012024-03-18 10:32:1710 days 1 hr ago 0x2d29782d51bb69e79a1be8720e847d7c609e12f9 Mad Meerkat Finance: Master Meerkat & Router18.914931083945380811 CRO
0x8d0d0e82bb2e69dc8ca956cfea7ec223491321306b85f14ee2afce6b1aafb27c130635012024-03-18 10:32:1710 days 1 hr ago 0x2d29782d51bb69e79a1be8720e847d7c609e12f9Null: 0x000…00018.914931083945380812 CRO
0x8d0d0e82bb2e69dc8ca956cfea7ec223491321306b85f14ee2afce6b1aafb27c130635012024-03-18 10:32:1710 days 1 hr ago 0x2d29782d51bb69e79a1be8720e847d7c609e12f90xc3872fe2c27e794dc8d63b8ba42647421d8631d156.744793251836142433 CRO
0x8d0d0e82bb2e69dc8ca956cfea7ec223491321306b85f14ee2afce6b1aafb27c130635012024-03-18 10:32:1710 days 1 hr ago 0x2d29782d51bb69e79a1be8720e847d7c609e12f9 0x786f0bb42e48bb46d009b9b95218132ab324e2bd75.659724335781523244 CRO
0x8d0d0e82bb2e69dc8ca956cfea7ec223491321306b85f14ee2afce6b1aafb27c130635012024-03-18 10:32:1710 days 1 hr ago Mad Meerkat Finance: Master Meerkat & Router 0x2d29782d51bb69e79a1be8720e847d7c609e12f9170.202429535594194136 CRO
0x0a5832fe723fc2af8e8a5dd6a70ff4aff1128ec194dee9270c29e706b9b7c868129680142024-03-12 5:48:2616 days 6 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x2d29782d51bb69e79a1be8720e847d7c609e12f90.031950219914233164 CRO
0x0a5832fe723fc2af8e8a5dd6a70ff4aff1128ec194dee9270c29e706b9b7c868129680142024-03-12 5:48:2616 days 6 hrs ago 0x2d29782d51bb69e79a1be8720e847d7c609e12f9 Mad Meerkat Finance: Master Meerkat & Router18.698789548268011209 CRO
0x0a5832fe723fc2af8e8a5dd6a70ff4aff1128ec194dee9270c29e706b9b7c868129680142024-03-12 5:48:2616 days 6 hrs ago 0x2d29782d51bb69e79a1be8720e847d7c609e12f9Null: 0x000…00018.69878954826801121 CRO
0x0a5832fe723fc2af8e8a5dd6a70ff4aff1128ec194dee9270c29e706b9b7c868129680142024-03-12 5:48:2616 days 6 hrs ago 0x2d29782d51bb69e79a1be8720e847d7c609e12f90xc3872fe2c27e794dc8d63b8ba42647421d8631d156.096368644804033629 CRO
0x0a5832fe723fc2af8e8a5dd6a70ff4aff1128ec194dee9270c29e706b9b7c868129680142024-03-12 5:48:2616 days 6 hrs ago 0x2d29782d51bb69e79a1be8720e847d7c609e12f9 0x786f0bb42e48bb46d009b9b95218132ab324e2bd74.795158193072044838 CRO
0x0a5832fe723fc2af8e8a5dd6a70ff4aff1128ec194dee9270c29e706b9b7c868129680142024-03-12 5:48:2616 days 6 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x2d29782d51bb69e79a1be8720e847d7c609e12f9168.278813480102815111 CRO
0x0d2873c14d46167e9aecd6f03ccd166ca7f469d74704b51d4f821a65997d3bfb129680012024-03-12 5:47:1416 days 6 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x2d29782d51bb69e79a1be8720e847d7c609e12f90.010292454309285775 CRO
0x0d2873c14d46167e9aecd6f03ccd166ca7f469d74704b51d4f821a65997d3bfb129680012024-03-12 5:47:1416 days 6 hrs ago 0x2d29782d51bb69e79a1be8720e847d7c609e12f9 Mad Meerkat Finance: Master Meerkat & Router10.179975044697777353 CRO
0x0d2873c14d46167e9aecd6f03ccd166ca7f469d74704b51d4f821a65997d3bfb129680012024-03-12 5:47:1416 days 6 hrs ago 0x2d29782d51bb69e79a1be8720e847d7c609e12f9Null: 0x000…00010.179975044697777354 CRO
0x0d2873c14d46167e9aecd6f03ccd166ca7f469d74704b51d4f821a65997d3bfb129680012024-03-12 5:47:1416 days 6 hrs ago 0x2d29782d51bb69e79a1be8720e847d7c609e12f90xc3872fe2c27e794dc8d63b8ba42647421d8631d130.53992513409333206 CRO
0x0d2873c14d46167e9aecd6f03ccd166ca7f469d74704b51d4f821a65997d3bfb129680012024-03-12 5:47:1416 days 6 hrs ago 0x2d29782d51bb69e79a1be8720e847d7c609e12f9 0x786f0bb42e48bb46d009b9b95218132ab324e2bd40.719900178791109413 CRO
0x0d2873c14d46167e9aecd6f03ccd166ca7f469d74704b51d4f821a65997d3bfb129680012024-03-12 5:47:1416 days 6 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x2d29782d51bb69e79a1be8720e847d7c609e12f991.532246821010844281 CRO
0x966900cb9667a146c3f51285346f943766cd6872f339ae12b3116740bd23b093129589642024-03-11 15:49:0816 days 20 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0x2d29782d51bb69e79a1be8720e847d7c609e12f90.087528581269151899 CRO
[ Download CSV Export 
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BabyCroge

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2023-03-22
*/

/**

https://t.me/BabyCrogePortal

*/

//SPDX-License-Identifier: Unlicensed

pragma solidity ^0.7.6;

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 ICRC20 {
    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;
    ICRC20 RewardToken = ICRC20(0xC4a174cCb5fb54a6721e11e0Ca961e42715023F9);

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

    string constant _name = "BabyCroge";
    string constant _symbol = "BCROGE";
    uint8 constant _decimals = 9;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address routerAddress = 0x145677FC4d9b8F19B5D56d1820c48e0443049a30;
    address RewardToken = 0xC4a174cCb5fb54a6721e11e0Ca961e42715023F9;

    uint256 _totalSupply =1 * 10**9 * (10 ** _decimals);
    uint256 public _maxTxAmount = 2 * 10**7 * (10 ** _decimals);
    uint256 public _walletMax = 2 * 10**7 * (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;
    bool private blacklistMode = true;
    mapping (address => bool) private isBlacklisted;
    
    uint256 public liquidityFee = 2;
    uint256 public operationsFee = 4;
    uint256 public rewardsFee = 4;
    uint256 public extraFeeOnSell = 20;

    uint256 private totalFee = 0;
    uint256 private totalFeeIfSelling = 0;

    address private autoLiquidityReceiver;
    address private operationsWallet;
    address private 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 = 2 * 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;

        autoLiquidityReceiver = 0xD0aC1786CC44E9342BE0f2521971De7A839F95c5;
        operationsWallet = 0xC3872fe2c27E794dc8d63B8ba42647421d8631D1;
        
        totalFee = liquidityFee.add(operationsFee).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 enable_blacklist(bool _status) private onlyOwner {
        blacklistMode = _status;
    }

    function manage_blacklist(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            isBlacklisted[addresses[i]] = status;
        }
    }

    function changeFees(uint256 newLiqFee, uint256 newRewardFee, uint256 newOperationsFee, uint256 newExtraSellFee) external authorized {
        liquidityFee = newLiqFee;
        rewardsFee = newRewardFee;
        operationsFee = newOperationsFee;
        extraFeeOnSell = newExtraSellFee;
        
        totalFee = liquidityFee.add(operationsFee).add(rewardsFee);
        totalFeeIfSelling = totalFee.add(extraFeeOnSell);
        require(totalFeeIfSelling <=30, "Total fee is over 30%");
    }

    function changeFeeReceivers(address newLiquidityReceiver, address newOperationsWallet, address newDevWallet) external authorized {
        autoLiquidityReceiver = newLiquidityReceiver;
        operationsWallet = newOperationsWallet;
        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");
        }

         // Blacklist
        if(blacklistMode){
            require(!isBlacklisted[sender],"Blacklisted");    
        }
        
        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 amountCRO = address(this).balance;

        uint256 totalCROFee = totalFee.sub(liquidityFee.div(2));
        
        uint256 amountCROLiquidity = amountCRO.mul(liquidityFee).div(totalCROFee).div(2);
        uint256 amountCROReflection = amountCRO.mul(rewardsFee).div(totalCROFee);
        uint256 amountCROOperations = amountCRO.sub(amountCROLiquidity).sub(amountCROReflection);

        try dividendDistributor.deposit{value: amountCROReflection}() {} catch {}
        
        uint256 operationsShare = amountCROOperations.mul(3).div(4);
        uint256 devShare = amountCROOperations.sub(operationsShare);
        
        (bool tmpSuccess,) = payable(operationsWallet).call{value: operationsShare, 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: amountCROLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountCROLiquidity, amountToLiquify);
        }
    }

    event AutoLiquify(uint256 amountCRO, 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":"amountCRO","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":[{"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":"newOperationsWallet","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":"newOperationsFee","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":"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":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"operationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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"}]

608060405261dead600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073145677fc4d9b8f19b5d56d1820c48e0443049a30600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c4a174ccb5fb54a6721e11e0ca961e42715023f9600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960ff16600a0a633b9aca0002600655600960ff16600a0a6301312d0002600755600960ff16600a0a6301312d00026008556001600960006101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff02191690831515021790555060026011556004601255600460135560148055600060155560006016556000601d60006101000a81548160ff021916908315150217905550620493e0601e556001601f60016101000a81548160ff0219169083151502179055506000601f60026101000a81548160ff021916908315150217905550600960ff16600a0a614e20026020553480156200022d57600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039357600080fd5b505afa158015620003a8573d6000803e3d6000fd5b505050506040513d6020811015620003bf57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200045457600080fd5b505afa15801562000469573d6000803e3d6000fd5b505050506040513d60208110156200048057600080fd5b8101908080519060200190929190505050306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620004fc57600080fd5b505af115801562000511573d6000803e3d6000fd5b505050506040513d60208110156200052857600080fd5b8101908080519060200190929190505050601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200066d9062000cd5565b808273ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f080158015620006aa573d6000803e3d6000fd5b50601d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555073d0ac1786cc44e9342be0f2521971de7a839f95c5601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c3872fe2c27e794dc8d63b8ba42647421d8631d1601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000b6e60135462000b5a60125460115462000c4c60201b6200299d1790919060201c565b62000c4c60201b6200299d1790919060201c565b60158190555062000b9260145460155462000c4c60201b6200299d1790919060201c565b601681905550600654600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040518082815260200191505060405180910390a362000ce3565b60008082840190508381101562000ccb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b611ad88062004f6883390190565b6142758062000cf36000396000f3fe6080604052600436106102975760003560e01c80637db1342c1161015a578063bad3ea6a116100c1578063f0b37c041161007a578063f0b37c0414610f93578063f2fde38b14610fe4578063f887ea4014611035578063fabe628314611076578063fe9fbb80146110d3578063ffb54a991461113a5761029e565b8063bad3ea6a14610dfd578063bf56b37114610e3e578063d920334e14610e69578063da00097d14610ea4578063dd62ed3e14610ed1578063e66b1d1e14610f565761029e565b806398118cb41161011357806398118cb414610c2d578063a3a2e89e14610c58578063a8aa1b3114610cb5578063a9059cbb14610cf6578063a9f7864b14610d67578063b6a5d7de14610dac5761029e565b80637db1342c146109fd578063807c2d9c14610a38578063893d20e814610a635780638b42507f14610aa45780638e2eee8414610b0b57806395d89b4114610b9d5761029e565b806334c70889116101fe578063571ac8b0116101b7578063571ac8b014610825578063650c42261461088c57806369cf17d4146108e557806370a0823114610910578063773fcb5c146109755780637d1db4a5146109d25761029e565b806334c708891461066f5780633f4218e0146106c25780634355855a1461072957806344de2e4c14610790578063479f66d8146107bd5780634a74bb02146107f85761029e565b806323b872dd1161025057806323b872dd146104625780632b112e49146104f35780632bb14e1d1461051e5780632f54bf6e14610549578063313ce567146105b0578063315dca29146105de5761029e565b80630445b667146102a357806306fdde03146102ce578063090896be1461035e578063095ea7b3146103895780630d295980146103fa57806318160ddd146104375761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8611167565b6040518082815260200191505060405180910390f35b3480156102da57600080fd5b506102e361116d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610323578082015181840152602081019050610308565b50505050905090810190601f1680156103505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036a57600080fd5b506103736111aa565b6040518082815260200191505060405180910390f35b34801561039557600080fd5b506103e2600480360360408110156103ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111b0565b60405180821515815260200191505060405180910390f35b34801561040657600080fd5b506104356004803603602081101561041d57600080fd5b810190808035151590602001909291905050506112a2565b005b34801561044357600080fd5b5061044c61133a565b6040518082815260200191505060405180910390f35b34801561046e57600080fd5b506104db6004803603606081101561048557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611344565b60405180821515815260200191505060405180910390f35b3480156104ff57600080fd5b5061050861161a565b6040518082815260200191505060405180910390f35b34801561052a57600080fd5b5061053361169c565b6040518082815260200191505060405180910390f35b34801561055557600080fd5b506105986004803603602081101561056c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116a2565b60405180821515815260200191505060405180910390f35b3480156105bc57600080fd5b506105c56116fb565b604051808260ff16815260200191505060405180910390f35b3480156105ea57600080fd5b5061066d6004803603606081101561060157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611704565b005b34801561067b57600080fd5b506106c06004803603606081101561069257600080fd5b8101908080351515906020019092919080359060200190929190803515159060200190929190505050611847565b005b3480156106ce57600080fd5b50610711600480360360208110156106e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611902565b60405180821515815260200191505060405180910390f35b34801561073557600080fd5b506107786004803603602081101561074c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b60405180821515815260200191505060405180910390f35b34801561079c57600080fd5b506107a5611942565b60405180821515815260200191505060405180910390f35b3480156107c957600080fd5b506107f6600480360360208110156107e057600080fd5b8101908080359060200190929190505050611955565b005b34801561080457600080fd5b5061080d6119e9565b60405180821515815260200191505060405180910390f35b34801561083157600080fd5b506108746004803603602081101561084857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119fc565b60405180821515815260200191505060405180910390f35b34801561089857600080fd5b506108e3600480360360808110156108af57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611a2f565b005b3480156108f157600080fd5b506108fa611b93565b6040518082815260200191505060405180910390f35b34801561091c57600080fd5b5061095f6004803603602081101561093357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b99565b6040518082815260200191505060405180910390f35b34801561098157600080fd5b506109d06004803603604081101561099857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611be2565b005b3480156109de57600080fd5b506109e7611eed565b6040518082815260200191505060405180910390f35b348015610a0957600080fd5b50610a3660048036036020811015610a2057600080fd5b8101908080359060200190929190505050611ef3565b005b348015610a4457600080fd5b50610a4d611f78565b6040518082815260200191505060405180910390f35b348015610a6f57600080fd5b50610a78611f7e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ab057600080fd5b50610af360048036036020811015610ac757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fa7565b60405180821515815260200191505060405180910390f35b348015610b1757600080fd5b50610b9b60048036036040811015610b2e57600080fd5b8101908080359060200190640100000000811115610b4b57600080fd5b820183602082011115610b5d57600080fd5b80359060200191846020830284011164010000000083111715610b7f57600080fd5b9091929391929390803515159060200190929190505050611fc7565b005b348015610ba957600080fd5b50610bb26120e0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bf2578082015181840152602081019050610bd7565b50505050905090810190601f168015610c1f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c3957600080fd5b50610c4261211d565b6040518082815260200191505060405180910390f35b348015610c6457600080fd5b50610cb360048036036040811015610c7b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612123565b005b348015610cc157600080fd5b50610cca6121f9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d0257600080fd5b50610d4f60048036036040811015610d1957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061221f565b60405180821515815260200191505060405180910390f35b348015610d7357600080fd5b50610daa60048036036040811015610d8a57600080fd5b810190808035906020019092919080359060200190929190505050612234565b005b348015610db857600080fd5b50610dfb60048036036020811015610dcf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612348565b005b348015610e0957600080fd5b50610e1261241d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e4a57600080fd5b50610e53612443565b6040518082815260200191505060405180910390f35b348015610e7557600080fd5b50610ea260048036036020811015610e8c57600080fd5b8101908080359060200190929190505050612449565b005b348015610eb057600080fd5b50610eb96124ce565b60405180821515815260200191505060405180910390f35b348015610edd57600080fd5b50610f4060048036036040811015610ef457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124e1565b6040518082815260200191505060405180910390f35b348015610f6257600080fd5b50610f9160048036036020811015610f7957600080fd5b81019080803515159060200190929190505050612568565b005b348015610f9f57600080fd5b50610fe260048036036020811015610fb657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612600565b005b348015610ff057600080fd5b506110336004803603602081101561100757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126d6565b005b34801561104157600080fd5b5061104a612838565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561108257600080fd5b506110d16004803603604081101561109957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061285e565b005b3480156110df57600080fd5b50611122600480360360208110156110f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612934565b60405180821515815260200191505060405180910390f35b34801561114657600080fd5b5061114f61298a565b60405180821515815260200191505060405180910390f35b60205481565b60606040518060400160405280600981526020017f4261627943726f67650000000000000000000000000000000000000000000000815250905090565b60125481565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6112ab336116a2565b61131d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601d60006101000a81548160ff02191690831515021790555050565b6000600654905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611530576114af826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a259092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff161561160657601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f426c61636b6c697374656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b611611848484612ae5565b90509392505050565b600061169761164a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b99565b611689611678600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b99565b60065461350d90919063ffffffff16565b61350d90919063ffffffff16565b905090565b60135481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b61170d33612934565b61177f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b82601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b61185033612934565b6118c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b82601f60016101000a81548160ff0219169083151502179055508160208190555080601f60026101000a81548160ff021916908315150217905550505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b600960009054906101000a900460ff1681565b61195e33612934565b6119d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b620493e081106119df57600080fd5b80601e8190555050565b601f60019054906101000a900460ff1681565b6000611a28827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6111b0565b9050919050565b611a3833612934565b611aaa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b83601181905550826013819055508160128190555080601481905550611af1601354611ae360125460115461299d90919063ffffffff16565b61299d90919063ffffffff16565b601581905550611b0e60145460155461299d90919063ffffffff16565b601681905550601e6016541115611b8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f546f74616c20666565206973206f76657220333025000000000000000000000081525060200191505060405180910390fd5b50505050565b60145481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611beb33612934565b611c5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611ce75750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611cf057600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611dfe57601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611de157600080fd5b505af1158015611df5573d6000803e3d6000fd5b50505050611ee9565b601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611ed057600080fd5b505af1158015611ee4573d6000803e3d6000fd5b505050505b5050565b60075481565b611efc33612934565b611f6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060088190555050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d6020528060005260406000206000915054906101000a900460ff1681565b611fd0336116a2565b612042576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005b838390508110156120da57816010600086868581811061206157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050612045565b50505050565b60606040518060400160405280600681526020017f4243524f47450000000000000000000000000000000000000000000000000000815250905090565b60115481565b61212c33612934565b61219e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061222c338484612ae5565b905092915050565b61223d33612934565b6122af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561232c57600080fd5b505af1158015612340573d6000803e3d6000fd5b505050505050565b612351336116a2565b6123c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c5481565b61245233612934565b6124c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b601f60029054906101000a900460ff1681565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61257133612934565b6125e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b612609336116a2565b61267b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6126df336116a2565b612751576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61286733612934565b6128d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601d60009054906101000a900460ff1681565b600080828401905083811015612a1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838311158290612ad2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a97578082015181840152602081019050612a7c565b50505050905090810190601f168015612ac45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000601f60009054906101000a900460ff1615612b0e57612b07848484613557565b9050613506565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612bb25750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c3a57601d60009054906101000a900460ff16612c39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f54726164696e67206e6f74206f70656e2079657400000000000000000000000081525060200191505060405180910390fd5b5b60075482111580612c945750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5458204c696d697420457863656564656400000000000000000000000000000081525060200191505060405180910390fd5b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612d715750601f60009054906101000a900460ff16155b8015612d895750601f60019054906101000a900460ff165b8015612dd65750602054600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b15612de457612de361372a565b5b612dec613eca565b158015612e465750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612ea0576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612e9757600080fd5b612e9f613ed7565b5b612f29826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a259092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fd25750600960009054906101000a900460ff165b156130385760085461302c83600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299d90919063ffffffff16565b111561303757600080fd5b5b6000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130de5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6130e857826130f4565b6130f3858585613ee0565b5b905061314881600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299d90919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132ca57601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156132ae57600080fd5b505af19250505080156132bf575060015b6132c8576132c9565b5b5b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661340957601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156133ed57600080fd5b505af19250505080156133fe575060015b61340757613408565b5b5b601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601e546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561348057600080fd5b505af1925050508015613491575060015b61349a5761349b565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019150505b9392505050565b600061354f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a25565b905092915050565b60006135e2826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a259092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061367782600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299d90919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6001601f60006101000a81548160ff0219169083151502179055506000600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006137c760026137b96015546137ab6011548761408890919063ffffffff16565b61410e90919063ffffffff16565b61410e90919063ffffffff16565b905060006137de828461350d90919063ffffffff16565b90506000600267ffffffffffffffff811180156137fa57600080fd5b506040519080825280602002602001820160405280156138295781602001602082028036833780820191505090505b509050308160008151811061383a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156138dc57600080fd5b505afa1580156138f0573d6000803e3d6000fd5b505050506040513d602081101561390657600080fd5b81019080805190602001909291905050508160018151811061392457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613a22578082015181840152602081019050613a07565b505050509050019650505050505050600060405180830381600087803b158015613a4b57600080fd5b505af1158015613a5f573d6000803e3d6000fd5b5050505060004790506000613a94613a83600260115461410e90919063ffffffff16565b60155461350d90919063ffffffff16565b90506000613ad26002613ac484613ab66011548861408890919063ffffffff16565b61410e90919063ffffffff16565b61410e90919063ffffffff16565b90506000613afd83613aef6013548761408890919063ffffffff16565b61410e90919063ffffffff16565b90506000613b2682613b18858861350d90919063ffffffff16565b61350d90919063ffffffff16565b9050601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b9257600080fd5b505af193505050508015613ba4575060015b613bad57613bae565b5b6000613bd76004613bc960038561408890919063ffffffff16565b61410e90919063ffffffff16565b90506000613bee828461350d90919063ffffffff16565b90506000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051806000019050600060405180830381858888f193505050503d8060008114613c77576040519150601f19603f3d011682016040523d82523d6000602084013e613c7c565b606091505b505090506000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051806000019050600060405180830381858888f193505050503d8060008114613d07576040519150601f19603f3d011682016040523d82523d6000602084013e613d0c565b606091505b50509050600091506000905060008c1115613ea057601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71988308f600080601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015613e0d57600080fd5b505af1158015613e21573d6000803e3d6000fd5b50505050506040513d6060811015613e3857600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506878d604051808381526020018281526020019250505060405180910390a15b505050505050505050505050506000601f60006101000a81548160ff021916908315150217905550565b600080601c541415905090565b43601c81905550565b6000808373ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613f4057601554613f44565b6016545b90506000613f6e6064613f60848761408890919063ffffffff16565b61410e90919063ffffffff16565b9050613fc281600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299d90919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a361407d818561350d90919063ffffffff16565b925050509392505050565b60008083141561409b5760009050614108565b60008284029050828482816140ac57fe5b0414614103576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061421f6021913960400191505060405180910390fd5b809150505b92915050565b600061415083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614158565b905092915050565b60008083118290614204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156141c95780820151818401526020810190506141ae565b50505050905090810190601f1680156141f65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161421057fe5b04905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212202babf84577886518699b77da4017275eee97bf08a52d60466622a1453e80abc964736f6c63430007060033608060405273145677fc4d9b8f19b5d56d1820c48e0443049a30600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c4a174ccb5fb54a6721e11e0ca961e42715023f9600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610708600d556509184e72a000600e553480156100dd57600080fd5b50604051611ad8380380611ad88339818101604052602081101561010057600080fd5b8101908080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561016e57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610170565b805b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506118d8806102006000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed1461033b578063f0fc6bca14610366578063ffb2c4791461037d578063ffd49c84146103b8576100dd565b8063ce7c2ac214610293578063d0e30db014610306578063e2d2e21914610310576100dd565b80632d48e896116100bb5780632d48e896146101cd5780633a98ef39146102125780634fab0ae81461023d578063997664d714610268576100dd565b806311ce023d146100e257806314b6ca961461010d57806328fd319814610168575b600080fd5b3480156100ee57600080fd5b506100f76103e3565b6040518082815260200191505060405180910390f35b34801561011957600080fd5b506101666004803603604081101561013057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506103e9565b005b34801561017457600080fd5b506101b76004803603602081101561018b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106a8565b6040518082815260200191505060405180910390f35b3480156101d957600080fd5b50610210600480360360408110156101f057600080fd5b8101908080359060200190929190803590602001909291905050506107c2565b005b34801561021e57600080fd5b5061022761082c565b6040518082815260200191505060405180910390f35b34801561024957600080fd5b50610252610832565b6040518082815260200191505060405180910390f35b34801561027457600080fd5b5061027d610838565b6040518082815260200191505060405180910390f35b34801561029f57600080fd5b506102e2600480360360208110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061083e565b60405180848152602001838152602001828152602001935050505060405180910390f35b61030e610868565b005b34801561031c57600080fd5b50610325610d63565b6040518082815260200191505060405180910390f35b34801561034757600080fd5b50610350610d69565b6040518082815260200191505060405180910390f35b34801561037257600080fd5b5061037b610d6f565b005b34801561038957600080fd5b506103b6600480360360208110156103a057600080fd5b8101908080359060200190929190505050610df5565b005b3480156103c457600080fd5b506103cd610f6f565b6040518082815260200191505060405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461044157600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156104965761049582610f75565b5b6000811180156104e857506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156104fb576104f68261123b565b61055d565b60008114801561054d57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b1561055c5761055b826112ea565b5b5b6105c6816105b8600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546008546114c390919063ffffffff16565b61150d90919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061065e600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611595565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156106fd57600090506107bd565b600061074a600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611595565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116107a5576000925050506107bd565b6107b881836114c390919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461081a57600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108c057600080fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561094b57600080fd5b505afa15801561095f573d6000803e3d6000fd5b505050506040513d602081101561097557600080fd5b810190808051906020019092919050505090506000600267ffffffffffffffff811180156109a257600080fd5b506040519080825280602002602001820160405280156109d15781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610a3c57600080fd5b505afa158015610a50573d6000803e3d6000fd5b505050506040513d6020811015610a6657600080fd5b810190808051906020019092919050505081600081518110610a8457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610aee57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b815260040180858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610be6578082015181840152602081019050610bcb565b50505050905001955050505050506000604051808303818588803b158015610c0d57600080fd5b505af1158015610c21573d6000803e3d6000fd5b50505050506000610cfe83600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610cb557600080fd5b505afa158015610cc9573d6000803e3d6000fd5b505050506040513d6020811015610cdf57600080fd5b81019080805190602001909291905050506114c390919063ffffffff16565b9050610d158160095461150d90919063ffffffff16565b600981905550610d58610d47600854610d3984600c546115c790919063ffffffff16565b61164d90919063ffffffff16565b600b5461150d90919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610d7833611697565b610dea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f6f20736f6f6e2e204e65656420746f20776169742100000000000000000081525060200191505060405180910390fd5b610df333610f75565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e4d57600080fd5b600060048054905090506000811415610e665750610f6c565b60008060005a90505b8482108015610e7d57508383105b15610f675783600f5410610e94576000600f819055505b610ed66004600f5481548110610ea657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611697565b15610f1e57610f1d6004600f5481548110610eed57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610f75565b5b610f43610f345a836114c390919063ffffffff16565b8361150d90919063ffffffff16565b91505a9050600f600081548092919060010191905055508280600101935050610e6f565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610fc557611238565b6000610fd0826106a8565b9050600081111561123657610ff081600a5461150d90919063ffffffff16565b600a81905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561108957600080fd5b505af115801561109d573d6000803e3d6000fd5b505050506040513d60208110156110b357600080fd5b81019080805190602001909291905050505042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061115e81600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461150d90919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506111ef600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611595565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6004600160048054905003815481106112ff57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811061137657fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546005600060046001600480549050038154811061141757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600480548061148b57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600061150583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506116fb565b905092915050565b60008082840190508381101561158b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006115c0600c546115b2600b54856115c790919063ffffffff16565b61164d90919063ffffffff16565b9050919050565b6000808314156115da5760009050611647565b60008284029050828482816115eb57fe5b0414611642576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806118826021913960400191505060405180910390fd5b809150505b92915050565b600061168f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506117bb565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011080156116f45750600e546116f2836106a8565b115b9050919050565b60008383111582906117a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561176d578082015181840152602081019050611752565b50505050905090810190601f16801561179a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290611867576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561182c578082015181840152602081019050611811565b50505050905090810190601f1680156118595780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161187357fe5b04905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220c669a8b7a63cc5444397b966d703dad045fdfb150ef9629ac60d082b918b657a64736f6c63430007060033

Deployed Bytecode

0x6080604052600436106102975760003560e01c80637db1342c1161015a578063bad3ea6a116100c1578063f0b37c041161007a578063f0b37c0414610f93578063f2fde38b14610fe4578063f887ea4014611035578063fabe628314611076578063fe9fbb80146110d3578063ffb54a991461113a5761029e565b8063bad3ea6a14610dfd578063bf56b37114610e3e578063d920334e14610e69578063da00097d14610ea4578063dd62ed3e14610ed1578063e66b1d1e14610f565761029e565b806398118cb41161011357806398118cb414610c2d578063a3a2e89e14610c58578063a8aa1b3114610cb5578063a9059cbb14610cf6578063a9f7864b14610d67578063b6a5d7de14610dac5761029e565b80637db1342c146109fd578063807c2d9c14610a38578063893d20e814610a635780638b42507f14610aa45780638e2eee8414610b0b57806395d89b4114610b9d5761029e565b806334c70889116101fe578063571ac8b0116101b7578063571ac8b014610825578063650c42261461088c57806369cf17d4146108e557806370a0823114610910578063773fcb5c146109755780637d1db4a5146109d25761029e565b806334c708891461066f5780633f4218e0146106c25780634355855a1461072957806344de2e4c14610790578063479f66d8146107bd5780634a74bb02146107f85761029e565b806323b872dd1161025057806323b872dd146104625780632b112e49146104f35780632bb14e1d1461051e5780632f54bf6e14610549578063313ce567146105b0578063315dca29146105de5761029e565b80630445b667146102a357806306fdde03146102ce578063090896be1461035e578063095ea7b3146103895780630d295980146103fa57806318160ddd146104375761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8611167565b6040518082815260200191505060405180910390f35b3480156102da57600080fd5b506102e361116d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610323578082015181840152602081019050610308565b50505050905090810190601f1680156103505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036a57600080fd5b506103736111aa565b6040518082815260200191505060405180910390f35b34801561039557600080fd5b506103e2600480360360408110156103ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111b0565b60405180821515815260200191505060405180910390f35b34801561040657600080fd5b506104356004803603602081101561041d57600080fd5b810190808035151590602001909291905050506112a2565b005b34801561044357600080fd5b5061044c61133a565b6040518082815260200191505060405180910390f35b34801561046e57600080fd5b506104db6004803603606081101561048557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611344565b60405180821515815260200191505060405180910390f35b3480156104ff57600080fd5b5061050861161a565b6040518082815260200191505060405180910390f35b34801561052a57600080fd5b5061053361169c565b6040518082815260200191505060405180910390f35b34801561055557600080fd5b506105986004803603602081101561056c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116a2565b60405180821515815260200191505060405180910390f35b3480156105bc57600080fd5b506105c56116fb565b604051808260ff16815260200191505060405180910390f35b3480156105ea57600080fd5b5061066d6004803603606081101561060157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611704565b005b34801561067b57600080fd5b506106c06004803603606081101561069257600080fd5b8101908080351515906020019092919080359060200190929190803515159060200190929190505050611847565b005b3480156106ce57600080fd5b50610711600480360360208110156106e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611902565b60405180821515815260200191505060405180910390f35b34801561073557600080fd5b506107786004803603602081101561074c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b60405180821515815260200191505060405180910390f35b34801561079c57600080fd5b506107a5611942565b60405180821515815260200191505060405180910390f35b3480156107c957600080fd5b506107f6600480360360208110156107e057600080fd5b8101908080359060200190929190505050611955565b005b34801561080457600080fd5b5061080d6119e9565b60405180821515815260200191505060405180910390f35b34801561083157600080fd5b506108746004803603602081101561084857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119fc565b60405180821515815260200191505060405180910390f35b34801561089857600080fd5b506108e3600480360360808110156108af57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611a2f565b005b3480156108f157600080fd5b506108fa611b93565b6040518082815260200191505060405180910390f35b34801561091c57600080fd5b5061095f6004803603602081101561093357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b99565b6040518082815260200191505060405180910390f35b34801561098157600080fd5b506109d06004803603604081101561099857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611be2565b005b3480156109de57600080fd5b506109e7611eed565b6040518082815260200191505060405180910390f35b348015610a0957600080fd5b50610a3660048036036020811015610a2057600080fd5b8101908080359060200190929190505050611ef3565b005b348015610a4457600080fd5b50610a4d611f78565b6040518082815260200191505060405180910390f35b348015610a6f57600080fd5b50610a78611f7e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ab057600080fd5b50610af360048036036020811015610ac757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fa7565b60405180821515815260200191505060405180910390f35b348015610b1757600080fd5b50610b9b60048036036040811015610b2e57600080fd5b8101908080359060200190640100000000811115610b4b57600080fd5b820183602082011115610b5d57600080fd5b80359060200191846020830284011164010000000083111715610b7f57600080fd5b9091929391929390803515159060200190929190505050611fc7565b005b348015610ba957600080fd5b50610bb26120e0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bf2578082015181840152602081019050610bd7565b50505050905090810190601f168015610c1f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c3957600080fd5b50610c4261211d565b6040518082815260200191505060405180910390f35b348015610c6457600080fd5b50610cb360048036036040811015610c7b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612123565b005b348015610cc157600080fd5b50610cca6121f9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d0257600080fd5b50610d4f60048036036040811015610d1957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061221f565b60405180821515815260200191505060405180910390f35b348015610d7357600080fd5b50610daa60048036036040811015610d8a57600080fd5b810190808035906020019092919080359060200190929190505050612234565b005b348015610db857600080fd5b50610dfb60048036036020811015610dcf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612348565b005b348015610e0957600080fd5b50610e1261241d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e4a57600080fd5b50610e53612443565b6040518082815260200191505060405180910390f35b348015610e7557600080fd5b50610ea260048036036020811015610e8c57600080fd5b8101908080359060200190929190505050612449565b005b348015610eb057600080fd5b50610eb96124ce565b60405180821515815260200191505060405180910390f35b348015610edd57600080fd5b50610f4060048036036040811015610ef457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124e1565b6040518082815260200191505060405180910390f35b348015610f6257600080fd5b50610f9160048036036020811015610f7957600080fd5b81019080803515159060200190929190505050612568565b005b348015610f9f57600080fd5b50610fe260048036036020811015610fb657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612600565b005b348015610ff057600080fd5b506110336004803603602081101561100757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126d6565b005b34801561104157600080fd5b5061104a612838565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561108257600080fd5b506110d16004803603604081101561109957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061285e565b005b3480156110df57600080fd5b50611122600480360360208110156110f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612934565b60405180821515815260200191505060405180910390f35b34801561114657600080fd5b5061114f61298a565b60405180821515815260200191505060405180910390f35b60205481565b60606040518060400160405280600981526020017f4261627943726f67650000000000000000000000000000000000000000000000815250905090565b60125481565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6112ab336116a2565b61131d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601d60006101000a81548160ff02191690831515021790555050565b6000600654905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611530576114af826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a259092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff161561160657601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f426c61636b6c697374656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b611611848484612ae5565b90509392505050565b600061169761164a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b99565b611689611678600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b99565b60065461350d90919063ffffffff16565b61350d90919063ffffffff16565b905090565b60135481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b61170d33612934565b61177f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b82601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b61185033612934565b6118c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b82601f60016101000a81548160ff0219169083151502179055508160208190555080601f60026101000a81548160ff021916908315150217905550505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b600960009054906101000a900460ff1681565b61195e33612934565b6119d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b620493e081106119df57600080fd5b80601e8190555050565b601f60019054906101000a900460ff1681565b6000611a28827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6111b0565b9050919050565b611a3833612934565b611aaa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b83601181905550826013819055508160128190555080601481905550611af1601354611ae360125460115461299d90919063ffffffff16565b61299d90919063ffffffff16565b601581905550611b0e60145460155461299d90919063ffffffff16565b601681905550601e6016541115611b8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f546f74616c20666565206973206f76657220333025000000000000000000000081525060200191505060405180910390fd5b50505050565b60145481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611beb33612934565b611c5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611ce75750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611cf057600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611dfe57601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611de157600080fd5b505af1158015611df5573d6000803e3d6000fd5b50505050611ee9565b601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611ed057600080fd5b505af1158015611ee4573d6000803e3d6000fd5b505050505b5050565b60075481565b611efc33612934565b611f6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060088190555050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d6020528060005260406000206000915054906101000a900460ff1681565b611fd0336116a2565b612042576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005b838390508110156120da57816010600086868581811061206157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050612045565b50505050565b60606040518060400160405280600681526020017f4243524f47450000000000000000000000000000000000000000000000000000815250905090565b60115481565b61212c33612934565b61219e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061222c338484612ae5565b905092915050565b61223d33612934565b6122af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561232c57600080fd5b505af1158015612340573d6000803e3d6000fd5b505050505050565b612351336116a2565b6123c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c5481565b61245233612934565b6124c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b601f60029054906101000a900460ff1681565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61257133612934565b6125e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b612609336116a2565b61267b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6126df336116a2565b612751576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61286733612934565b6128d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601d60009054906101000a900460ff1681565b600080828401905083811015612a1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838311158290612ad2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a97578082015181840152602081019050612a7c565b50505050905090810190601f168015612ac45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000601f60009054906101000a900460ff1615612b0e57612b07848484613557565b9050613506565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612bb25750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c3a57601d60009054906101000a900460ff16612c39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f54726164696e67206e6f74206f70656e2079657400000000000000000000000081525060200191505060405180910390fd5b5b60075482111580612c945750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5458204c696d697420457863656564656400000000000000000000000000000081525060200191505060405180910390fd5b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612d715750601f60009054906101000a900460ff16155b8015612d895750601f60019054906101000a900460ff165b8015612dd65750602054600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b15612de457612de361372a565b5b612dec613eca565b158015612e465750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612ea0576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612e9757600080fd5b612e9f613ed7565b5b612f29826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a259092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fd25750600960009054906101000a900460ff165b156130385760085461302c83600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299d90919063ffffffff16565b111561303757600080fd5b5b6000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130de5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6130e857826130f4565b6130f3858585613ee0565b5b905061314881600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299d90919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132ca57601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156132ae57600080fd5b505af19250505080156132bf575060015b6132c8576132c9565b5b5b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661340957601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156133ed57600080fd5b505af19250505080156133fe575060015b61340757613408565b5b5b601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601e546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561348057600080fd5b505af1925050508015613491575060015b61349a5761349b565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019150505b9392505050565b600061354f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a25565b905092915050565b60006135e2826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a259092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061367782600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299d90919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6001601f60006101000a81548160ff0219169083151502179055506000600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006137c760026137b96015546137ab6011548761408890919063ffffffff16565b61410e90919063ffffffff16565b61410e90919063ffffffff16565b905060006137de828461350d90919063ffffffff16565b90506000600267ffffffffffffffff811180156137fa57600080fd5b506040519080825280602002602001820160405280156138295781602001602082028036833780820191505090505b509050308160008151811061383a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156138dc57600080fd5b505afa1580156138f0573d6000803e3d6000fd5b505050506040513d602081101561390657600080fd5b81019080805190602001909291905050508160018151811061392457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613a22578082015181840152602081019050613a07565b505050509050019650505050505050600060405180830381600087803b158015613a4b57600080fd5b505af1158015613a5f573d6000803e3d6000fd5b5050505060004790506000613a94613a83600260115461410e90919063ffffffff16565b60155461350d90919063ffffffff16565b90506000613ad26002613ac484613ab66011548861408890919063ffffffff16565b61410e90919063ffffffff16565b61410e90919063ffffffff16565b90506000613afd83613aef6013548761408890919063ffffffff16565b61410e90919063ffffffff16565b90506000613b2682613b18858861350d90919063ffffffff16565b61350d90919063ffffffff16565b9050601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b9257600080fd5b505af193505050508015613ba4575060015b613bad57613bae565b5b6000613bd76004613bc960038561408890919063ffffffff16565b61410e90919063ffffffff16565b90506000613bee828461350d90919063ffffffff16565b90506000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051806000019050600060405180830381858888f193505050503d8060008114613c77576040519150601f19603f3d011682016040523d82523d6000602084013e613c7c565b606091505b505090506000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051806000019050600060405180830381858888f193505050503d8060008114613d07576040519150601f19603f3d011682016040523d82523d6000602084013e613d0c565b606091505b50509050600091506000905060008c1115613ea057601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71988308f600080601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015613e0d57600080fd5b505af1158015613e21573d6000803e3d6000fd5b50505050506040513d6060811015613e3857600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506878d604051808381526020018281526020019250505060405180910390a15b505050505050505050505050506000601f60006101000a81548160ff021916908315150217905550565b600080601c541415905090565b43601c81905550565b6000808373ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613f4057601554613f44565b6016545b90506000613f6e6064613f60848761408890919063ffffffff16565b61410e90919063ffffffff16565b9050613fc281600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299d90919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a361407d818561350d90919063ffffffff16565b925050509392505050565b60008083141561409b5760009050614108565b60008284029050828482816140ac57fe5b0414614103576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061421f6021913960400191505060405180910390fd5b809150505b92915050565b600061415083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614158565b905092915050565b60008083118290614204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156141c95780820151818401526020810190506141ae565b50505050905090810190601f1680156141f65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161421057fe5b04905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212202babf84577886518699b77da4017275eee97bf08a52d60466622a1453e80abc964736f6c63430007060033

Deployed ByteCode Sourcemap

11304:12503:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13101:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14454:80;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12432:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15298:216;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21705:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14716:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18749:510;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14896:142;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12471:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10674:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14630:80;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17658:276;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17942;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12132:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12238:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11975:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18434:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13000:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15522:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17148:502;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12507:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15046:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16438:376;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11839:59;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15934:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11905:57;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14810:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12183:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16930:210;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14540:84;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12394:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16168:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12779:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18585:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18226:200;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10347:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12879:46;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12807:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15823:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13047:45;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15157:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16048:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10517:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11074:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12748:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16299:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10848:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12839:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13101:60;;;;:::o;14454:80::-;14502:13;14526:5;;;;;;;;;;;;;;;;;14519:12;;14454:80;:::o;12432:32::-;;;;:::o;15298:216::-;15373:4;15425:6;15390:11;:23;15402:10;15390:23;;;;;;;;;;;;;;;:32;15414:7;15390:32;;;;;;;;;;;;;;;:41;;;;15468:7;15447:37;;15456:10;15447:37;;;15477:6;15447:37;;;;;;;;;;;;;;;;;;15502:4;15495:11;;15298:216;;;;:::o;21705:98::-;10063:19;10071:10;10063:7;:19::i;:::-;10055:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21786:9:::1;21772:11;;:23;;;;;;;;;;;;;;;;;;21705:98:::0;:::o;14716:88::-;14771:7;14789:12;;14782:19;;14716:88;:::o;18749:510::-;18849:4;18922:2;18879:11;:19;18891:6;18879:19;;;;;;;;;;;;;;;:31;18899:10;18879:31;;;;;;;;;;;;;;;;:46;18876:180;;18975:69;19011:6;18975:69;;;;;;;;;;;;;;;;;:11;:19;18987:6;18975:19;;;;;;;;;;;;;;;:31;18995:10;18975:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;18941:11;:19;18953:6;18941:19;;;;;;;;;;;;;;;:31;18961:10;18941:31;;;;;;;;;;;;;;;:103;;;;18876:180;19094:13;;;;;;;;;;;19091:93;;;19132:13;:21;19146:6;19132:21;;;;;;;;;;;;;;;;;;;;;;;;;19131:22;19123:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19091:93;19211:40;19225:6;19233:9;19244:6;19211:13;:40::i;:::-;19204:47;;18749:510;;;;;:::o;14896:142::-;14949:7;14976:54;15014:15;15024:4;;;;;;;;;;;15014:9;:15::i;:::-;14976:33;14993:15;15003:4;;;;;;;;;;;14993:9;:15::i;:::-;14976:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;14969:61;;14896:142;:::o;12471:29::-;;;;:::o;10674:103::-;10729:4;10764:5;;;;;;;;;;;10753:16;;:7;:16;;;10746:23;;10674:103;;;:::o;14630:80::-;14682:5;11497:1;14691:16;;14630:80;:::o;17658:276::-;10232:24;10245:10;10232:12;:24::i;:::-;10224:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17822:20:::1;17798:21;;:44;;;;;;;;;;;;;;;;;;17872:19;17853:16;;:38;;;;;;;;;;;;;;;;;;17914:12;17902:9;;:24;;;;;;;;;;;;;;;;;;17658:276:::0;;;:::o;17942:::-;10232:24;10245:10;10232:12;:24::i;:::-;10224:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18099:14:::1;18074:21;;:39;;;;;;;;;;;;;;;;;;18140:16;18124:13;:32;;;;18195:15;18167:25;;:43;;;;;;;;;;;;;;;;;;17942:276:::0;;;:::o;12132:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;12238:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;11975:33::-;;;;;;;;;;;;;:::o;18434:139::-;10232:24;10245:10;10232:12;:24::i;:::-;10224:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18527:6:::1;18521:3;:12;18513:21;;;::::0;::::1;;18562:3;18545:14;:20;;;;18434:139:::0;:::o;13000:40::-;;;;;;;;;;;;;:::o;15522:116::-;15577:4;15601:29;15609:7;15626:2;15601:7;:29::i;:::-;15594:36;;15522:116;;;:::o;17148:502::-;10232:24;10245:10;10232:12;:24::i;:::-;10224:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17306:9:::1;17291:12;:24;;;;17339:12;17326:10;:25;;;;17378:16;17362:13;:32;;;;17422:15;17405:14;:32;;;;17469:47;17505:10;;17469:31;17486:13;;17469:12;;:16;;:31;;;;:::i;:::-;:35;;:47;;;;:::i;:::-;17458:8;:58;;;;17547:28;17560:14;;17547:8;;:12;;:28;;;;:::i;:::-;17527:17;:48;;;;17614:2;17594:17;;:22;;17586:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17148:502:::0;;;;:::o;12507:34::-;;;;:::o;15046:105::-;15112:7;15130:9;:18;15140:7;15130:18;;;;;;;;;;;;;;;;15123:25;;15046:105;;;:::o;16438:376::-;10232:24;10245:10;10232:12;:24::i;:::-;10224:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16556:4:::1;16538:23;;:6;:23;;;;:41;;;;;16575:4;;;;;;;;;;;16565:14;;:6;:14;;;;16538:41;16530:50;;;::::0;::::1;;16618:6;16591:16;:24;16608:6;16591:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;16648:6;16645:162;;;16670:19;;;;;;;;;;;:28;;;16699:6;16707:1;16670:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16645:162;;;16740:19;;;;;;;;;;;:28;;;16769:6;16777:9;:17;16787:6;16777:17;;;;;;;;;;;;;;;;16740:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16645:162;16438:376:::0;;:::o;11839:59::-;;;;:::o;15934:106::-;10232:24;10245:10;10232:12;:24::i;:::-;10224:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16024:8:::1;16010:10;:22;;;;15934:106:::0;:::o;11905:57::-;;;;:::o;14810:78::-;14862:7;14880:5;;;;;;;;;;;14873:12;;14810:78;:::o;12183:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;16930:210::-;10063:19;10071:10;10063:7;:19::i;:::-;10055:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17032:9:::1;17027:106;17047:9;;:16;;17043:1;:20;17027:106;;;17115:6;17085:13;:27;17099:9;;17109:1;17099:12;;;;;;;;;;;;;;;17085:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;17065:3;;;;;17027:106;;;;16930:210:::0;;;:::o;14540:84::-;14590:13;14614:7;;;;;;;;;;;;;;;;;14607:14;;14540:84;:::o;12394:31::-;;;;:::o;16168:123::-;10232:24;10245:10;10232:12;:24::i;:::-;10224:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16277:6:::1;16255:11;:19;16267:6;16255:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;16168:123:::0;;:::o;12779:19::-;;;;;;;;;;;;;:::o;18585:156::-;18665:4;18689:44;18703:10;18715:9;18726:6;18689:13;:44::i;:::-;18682:51;;18585:156;;;;:::o;18226:200::-;10232:24;10245:10;10232:12;:24::i;:::-;10224:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18342:19:::1;;;;;;;;;;;:43;;;18386:11;18399:18;18342:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18226:200:::0;;:::o;10347:94::-;10063:19;10071:10;10063:7;:19::i;:::-;10055:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10429:4:::1;10407:14:::0;:19:::1;10422:3;10407:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;10347:94:::0;:::o;12879:46::-;;;;;;;;;;;;;:::o;12807:25::-;;;;:::o;15823:103::-;10232:24;10245:10;10232:12;:24::i;:::-;10224:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15910:8:::1;15895:12;:23;;;;15823:103:::0;:::o;13047:45::-;;;;;;;;;;;;;:::o;15157:133::-;15241:7;15259:11;:19;15271:6;15259:19;;;;;;;;;;;;;;;:28;15279:7;15259:28;;;;;;;;;;;;;;;;15252:35;;15157:133;;;;:::o;16048:108::-;10232:24;10245:10;10232:12;:24::i;:::-;10224:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16140:8:::1;16123:14;;:25;;;;;;;;;;;;;;;;;;16048:108:::0;:::o;10517:97::-;10063:19;10071:10;10063:7;:19::i;:::-;10055:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10601:5:::1;10579:14;:19;10594:3;10579:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;10517:97:::0;:::o;11074:173::-;10063:19;10071:10;10063:7;:19::i;:::-;10055:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11158:3:::1;11150:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;11194:4;11172:14:::0;:19:::1;11187:3;11172:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;11214:25;11235:3;11214:25;;;;;;;;;;;;;;;;;;;;11074:173:::0;:::o;12748:24::-;;;;;;;;;;;;;:::o;16299:131::-;10232:24;10245:10;10232:12;:24::i;:::-;10224:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16416:6:::1;16390:15;:23;16406:6;16390:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;16299:131:::0;;:::o;10848:107::-;10904:4;10928:14;:19;10943:3;10928:19;;;;;;;;;;;;;;;;;;;;;;;;;10921:26;;10848:107;;;:::o;12839:31::-;;;;;;;;;;;;;:::o;139:179::-;197:7;217:9;233:1;229;:5;217:17;;258:1;253;:6;;245:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;309:1;302:8;;;139:179;;;;:::o;470:190::-;556:7;589:1;584;:6;;592:12;576:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;616:9;632:1;628;:5;616:17;;651:1;644:8;;;470:190;;;;;:::o;19267:1641::-;19359:4;19389:16;;;;;;;;;;;19386:73;;;19415:41;19430:6;19438:9;19449:6;19415:14;:41::i;:::-;19408:48;;;;19386:73;19475:14;:22;19490:6;19475:22;;;;;;;;;;;;;;;;;;;;;;;;;19474:23;:53;;;;;19502:14;:25;19517:9;19502:25;;;;;;;;;;;;;;;;;;;;;;;;;19501:26;19474:53;19471:128;;;19551:11;;;;;;;;;;;19543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19471:128;19629:12;;19619:6;:22;;:49;;;;19645:15;:23;19661:6;19645:23;;;;;;;;;;;;;;;;;;;;;;;;;19619:49;19611:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19720:4;;;;;;;;;;;19706:18;;:10;:18;;;;:39;;;;;19729:16;;;;;;;;;;;19728:17;19706:39;:64;;;;;19749:21;;;;;;;;;;;19706:64;:109;;;;;19802:13;;19774:9;:24;19792:4;19774:24;;;;;;;;;;;;;;;;:41;;19706:109;19703:128;;;19818:10;:8;:10::i;:::-;19703:128;19847:10;:8;:10::i;:::-;19846:11;:32;;;;;19874:4;;;;;;;;;;;19861:17;;:9;:17;;;19846:32;19843:117;;;19923:1;19903:9;:17;19913:6;19903:17;;;;;;;;;;;;;;;;:21;19895:30;;;;;;19940:8;:6;:8::i;:::-;19843:117;20019:53;20041:6;20019:53;;;;;;;;;;;;;;;;;:9;:17;20029:6;20019:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;19999:9;:17;20009:6;19999:17;;;;;;;;;;;;;;;:73;;;;20097:15;:26;20113:9;20097:26;;;;;;;;;;;;;;;;;;;;;;;;;20096:27;:45;;;;;20127:14;;;;;;;;;;;20096:45;20093:141;;;20211:10;;20175:32;20200:6;20175:9;:20;20185:9;20175:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;:46;;20167:55;;;;;;20093:141;20246:19;20269:11;:19;20281:6;20269:19;;;;;;;;;;;;;;;;;;;;;;;;;20268:20;:47;;;;;20293:11;:22;20305:9;20293:22;;;;;;;;;;;;;;;;;;;;;;;;;20292:23;20268:47;:93;;20355:6;20268:93;;;20318:34;20326:6;20334:9;20345:6;20318:7;:34::i;:::-;20268:93;20246:115;;20395:37;20420:11;20395:9;:20;20405:9;20395:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;20372:9;:20;20382:9;20372:20;;;;;;;;;;;;;;;:60;;;;20478:16;:24;20495:6;20478:24;;;;;;;;;;;;;;;;;;;;;;;;;20474:127;;20523:19;;;;;;;;;;;:28;;;20552:6;20560:9;:17;20570:6;20560:17;;;;;;;;;;;;;;;;20523:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20519:71;;;;;;20474:127;20617:16;:27;20634:9;20617:27;;;;;;;;;;;;;;;;;;;;;;;;;20613:137;;20665:19;;;;;;;;;;;:28;;;20694:9;20705;:20;20715:9;20705:20;;;;;;;;;;;;;;;;20665:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20661:77;;;;;;20613:137;20766:19;;;;;;;;;;;:27;;;20794:14;;20766:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20762:59;;;;;;20855:9;20838:40;;20847:6;20838:40;;;20866:11;20838:40;;;;;;;;;;;;;;;;;;20896:4;20889:11;;;19267:1641;;;;;;:::o;326:136::-;384:7;411:43;415:1;418;411:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;404:50;;326:136;;;;:::o;20920:330::-;21013:4;21050:53;21072:6;21050:53;;;;;;;;;;;;;;;;;:9;:17;21060:6;21050:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;21030:9;:17;21040:6;21030:17;;;;;;;;;;;;;;;:73;;;;21137:32;21162:6;21137:9;:20;21147:9;21137:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;21114:9;:20;21124:9;21114:20;;;;;;;;;;;;;;;:55;;;;21202:9;21185:35;;21194:6;21185:35;;;21213:6;21185:35;;;;;;;;;;;;;;;;;;21238:4;21231:11;;20920:330;;;;;:::o;21811:1927::-;13225:4;13206:16;;:23;;;;;;;;;;;;;;;;;;21873::::1;21899:9;:24;21917:4;21899:24;;;;;;;;;;;;;;;;21873:50;;21934:23;21960:54;22012:1;21960:47;21998:8;;21960:33;21980:12;;21960:15;:19;;:33;;;;:::i;:::-;:37;;:47;;;;:::i;:::-;:51;;:54;;;;:::i;:::-;21934:80;;22025:20;22048:36;22068:15;22048;:19;;:36;;;;:::i;:::-;22025:59;;22097:21;22135:1;22121:16;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22097:40;;22166:4;22148;22153:1;22148:7;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;22192:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;22182:4;22187:1;22182:7;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;22218:6;;;;;;;;;;;:57;;;22290:12;22317:1;22333:4;22360;22380:15;22218:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22419:17;22439:21;22419:41;;22473:19;22495:33;22508:19;22525:1;22508:12;;:16;;:19;;;;:::i;:::-;22495:8;;:12;;:33;;;;:::i;:::-;22473:55;;22549:26;22578:51;22627:1;22578:44;22610:11;22578:27;22592:12;;22578:9;:13;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;:48;;:51;;;;:::i;:::-;22549:80;;22640:27;22670:42;22700:11;22670:25;22684:10;;22670:9;:13;;:25;;;;:::i;:::-;:29;;:42;;;;:::i;:::-;22640:72;;22723:27;22753:58;22791:19;22753:33;22767:18;22753:9;:13;;:33;;;;:::i;:::-;:37;;:58;;;;:::i;:::-;22723:88;;22828:19;;;;;;;;;;;:27;;;22863:19;22828:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;22824:73;;;;;;22917:23;22943:33;22974:1;22943:26;22967:1;22943:19;:23;;:26;;;;:::i;:::-;:30;;:33;;;;:::i;:::-;22917:59;;22987:16;23006:40;23030:15;23006:19;:23;;:40;;;;:::i;:::-;22987:59;;23068:15;23096:16;;;;;;;;;;;23088:30;;23126:15;23148:5;23088:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23067:91;;;23170:16;23199:9;;;;;;;;;;;23191:23;;23222:8;23237:5;23191:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23169:78;;;23321:5;23308:18;;23351:5;23337:19;;23390:1;23372:15;:19;23369:362;;;23407:6;;;;;;;;;;;:22;;;23437:18;23483:4;23507:15;23541:1;23561::::0;23581:21:::1;;;;;;;;;;;23621:15;23407:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23671:48;23683:18;23703:15;23671:48;;;;;;;;;;;;;;;;;;;;;;;;23369:362;13240:1;;;;;;;;;;;;;13271:5:::0;13252:16;;:24;;;;;;;;;;;;;;;;;;21811:1927::o;15646:90::-;15689:4;15727:1;15713:10;;:15;;15706:22;;15646:90;:::o;15744:71::-;15795:12;15782:10;:25;;;;15744:71::o;21258:439::-;21344:7;21374:21;21406:9;21398:17;;:4;;;;;;;;;;;:17;;;:48;;21438:8;;21398:48;;;21418:17;;21398:48;21374:72;;21457:17;21477:34;21507:3;21477:25;21488:13;21477:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;21457:54;;21551:39;21580:9;21551;:24;21569:4;21551:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;21524:9;:24;21542:4;21524:24;;;;;;;;;;;;;;;:66;;;;21631:4;21606:42;;21615:6;21606:42;;;21638:9;21606:42;;;;;;;;;;;;;;;;;;21668:21;21679:9;21668:6;:10;;:21;;;;:::i;:::-;21661:28;;;;21258:439;;;;;:::o;668:224::-;726:7;755:1;750;:6;746:25;;;767:1;760:8;;;;746:25;781:9;797:1;793;:5;781:17;;826:1;821;817;:5;;;;;;:10;809:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;883:1;876:8;;;668:224;;;;;:::o;900:132::-;958:7;985:39;989:1;992;985:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;978:46;;900:132;;;;:::o;1040:189::-;1126:7;1158:1;1154;:5;1161:12;1146:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1185:9;1201:1;1197;:5;;;;;;1185:17;;1220:1;1213:8;;;1040:189;;;;;:::o

Swarm Source

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