Contract 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x614fdda3f422787c998bbfadf0be34d1abc9fd0b84f452129e3e718c0227709eApprove130081212021-11-27 22:39:497 days 6 hrs ago0x91266358f29335649e828400afe8ee278edf214d IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000222255
0x799caa75efd84dcc4451ed14478b1c40c44d525f20febc575471d6974110f69bTransfer130049662021-11-27 19:54:097 days 9 hrs ago0x91266358f29335649e828400afe8ee278edf214d IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.003627665
0x3d478a98e41978fca8c8bd08edf1e9a0df458153208497fd5c128de4727f8933Transfer130046252021-11-27 19:36:527 days 9 hrs ago0x91266358f29335649e828400afe8ee278edf214d IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.003567255
0x0d3c3883d7fe3c5ebe54e5d2bfa5638d4a22f20914dfc1646506d8313f33240eSet Is Tx Limit ...122824562021-11-01 17:30:5333 days 11 hrs ago0xebadd1f2935008c35710bd76571087c7c11b6466 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000134815
0xa3a75d9dc0d71d0fb40a89ba558c09a5f54df7b453d65e1a096331853349dcb3Set Is Fee Exemp...122824492021-11-01 17:30:3233 days 11 hrs ago0xebadd1f2935008c35710bd76571087c7c11b6466 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000134715
0xa20fceab1a110674f35cb5b12b25ac74e25b65040141a3f3572e93d87ecb4e4dTransfer118641702021-10-17 23:29:3448 days 5 hrs ago0x8be68f76c97fce80284675d47b64fa10949c4341 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.00459249
0x0751a7dba3875ce8ec1a22241e2a7a4e8c26cbc5c4fedee82c59a7cade86c755Transfer117234092021-10-13 1:17:2353 days 4 hrs ago0x8be68f76c97fce80284675d47b64fa10949c4341 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.00492832
0x016ac6d4270b0a807e62d2f079ef0610ad202a2d9f9df42d3b574687fffc8d44Transfer116945002021-10-12 1:05:0754 days 4 hrs ago0x8be68f76c97fce80284675d47b64fa10949c4341 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.004920725
0xd5fb5408836c21b260f906d98b50d3179fe760f03d1a7eed8fac6e2d4f0caf3bApprove116911482021-10-11 22:15:5754 days 7 hrs ago0x7f715e6aa2278507700c0af45365e960b71f4214 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000222255
0x0dd5deb5d135b5668dd40453036b0da858f70287aff8523fd5a46b22c6f3bd46Approve116607412021-10-10 20:14:0855 days 9 hrs ago0xcdc37910eba3ec686e8115b52648d489e9cba540 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000101738
0x0fe550eb50acddfea59117baac58f85264c6bd5af248e29d8c2ecdaddfe4ad2eApprove111763272021-09-23 22:07:0172 days 7 hrs ago0xbe986e833a72fb182c563910b4b649b221091ea8 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000266706
0xb0a707e8e38d3c72d5a88bb9b0c164ea6bb39b0175d1798dcda503385dd716b2Approve108232972021-09-11 14:38:4784 days 14 hrs ago0x1a712551d56c223bc44c26241e66efb64309cb7f IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000222255
0x33027b57a617e92cb98761eff085b4b5604f6e4a8eec43bfa0baac44fffe59a6Approve108012162021-09-10 20:03:2385 days 9 hrs ago0x4668cad040f3dee3692407665260fcc6da5a6943 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000222255
0xe0705de3ce6de1a72a55eadc1cee95eb48a750c19d4462f6672e4980fbde5012Approve107792252021-09-10 1:29:4286 days 3 hrs ago0x4dd2965101224b6118db8ff9c3f3e990377ddb15 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000222255
0x4e0635ac9843cdbe514477d0ff740a9575cd275939f5e31b19b1d66b06f029d1Approve107092992021-09-07 14:24:1588 days 14 hrs ago0x7d899200847f36fa4d6ad3d087faadad45e40b57 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000222255
0x62b9473995706b59ccd29389889cb8bed070620951630624264d3c9046aa40f2Approve106437962021-09-05 7:25:3490 days 21 hrs ago0xb09cf764d5d2352fd1e3072cf26839c07fb82f84 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000222255
0x6cf11dfd9dfd44ad655410efefd7234b6a349abc9610b6eda135ec83bf9e677fApprove106155852021-09-04 7:47:5691 days 21 hrs ago0x5291664b3e588ef3bb3e47137a582fd69eb94283 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000311157
0x19ad5bc390b7b1c76f154d197a5bd58db78c0a7bd409b0772f4e97bc3915b1e8Approve105837442021-09-03 5:00:2093 days 17 mins ago0x2ddc599cf55a7d106b586aee04ce96426e7acd1f IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.00007267
0x18f27bcd51fdf70802f7053b931181c64e2b7f0707156b4f30a349bd13291cc6Approve105787262021-09-03 0:44:4193 days 4 hrs ago0xfc9d8e00790c02b6d4a11c892ebdc43c0f44bbb2 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000222255
0x6cd6e846b8c1648afe73b56fa440c59fe0129f62c21b649a60c85b6f7ba2ab1cApprove105417582021-09-01 17:38:4694 days 11 hrs ago0xdf1715e3c1211dd8665ec68919bfcafa3b4350f3 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000222255
0x21ebfefaab4b6776895c06814299cfab4d002b74754c1adee53505d1bbcd4907Approve105252162021-09-01 3:38:0895 days 1 hr ago0x2b0d6fdf752ce2e0632bf82cdae999e38479446b IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000222255
0x801feebbe830eeb5f5f66389a7a8d2ea18e5cd149bf803f752994ec402efb86cApprove104959912021-08-31 2:52:0696 days 2 hrs ago0xe064efa67bbe8d44f7f33e640931a7edd6115758 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000222255
0x7a1ae92ca0e58d6adc75d5cf5fe2c79a5c793aaeec80a975b81a688afc244207Transfer104825992021-08-30 15:31:0496 days 13 hrs ago0xe4bbd9e95b61b656e42544070df98a6f1ab51600 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.00072
0x2db90279f51dcd65a1e32234c2c426bf97e586809ae966eaca67e64ae3231f56Approve104820132021-08-30 15:01:4696 days 14 hrs ago0x36b43e2d52d33485ea2a0866b6bfdccab11c4bc1 IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000222255
0xaf3ee1ef51d26a144f315860230734639675a1ff5385f3f4e8e00836b9ee866eApprove104611392021-08-29 21:21:4997 days 7 hrs ago0x5b971450933e0a54e826a93567ebf81195def9dd IN  0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0 BNB0.000222255
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xc26c562ffad12194e360b0201253e90e846d23d19d0e93d430fada90c93530dd130082372021-11-27 22:45:477 days 6 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0xebadd1f2935008c35710bd76571087c7c11b64660.002198238014747832 BNB
0xc26c562ffad12194e360b0201253e90e846d23d19d0e93d430fada90c93530dd130082372021-11-27 22:45:477 days 6 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c 0x60f695d9fcfedda7b8ecb016f4a499b2751c286f0.003077533220646965 BNB
0xc26c562ffad12194e360b0201253e90e846d23d19d0e93d430fada90c93530dd130082372021-11-27 22:45:477 days 6 hrs ago PancakeSwap: Router v2 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0.007034361647193063 BNB
0x799caa75efd84dcc4451ed14478b1c40c44d525f20febc575471d6974110f69b130049662021-11-27 19:54:097 days 9 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0xebadd1f2935008c35710bd76571087c7c11b64660.002198238014747832 BNB
0x799caa75efd84dcc4451ed14478b1c40c44d525f20febc575471d6974110f69b130049662021-11-27 19:54:097 days 9 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c 0x60f695d9fcfedda7b8ecb016f4a499b2751c286f0.003077533220646965 BNB
0x799caa75efd84dcc4451ed14478b1c40c44d525f20febc575471d6974110f69b130049662021-11-27 19:54:097 days 9 hrs ago PancakeSwap: Router v2 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0.007034361647193063 BNB
0x3d478a98e41978fca8c8bd08edf1e9a0df458153208497fd5c128de4727f8933130046252021-11-27 19:36:527 days 9 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0xebadd1f2935008c35710bd76571087c7c11b64660.002198238014747832 BNB
0x3d478a98e41978fca8c8bd08edf1e9a0df458153208497fd5c128de4727f8933130046252021-11-27 19:36:527 days 9 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c 0x60f695d9fcfedda7b8ecb016f4a499b2751c286f0.003077533220646965 BNB
0x3d478a98e41978fca8c8bd08edf1e9a0df458153208497fd5c128de4727f8933130046252021-11-27 19:36:527 days 9 hrs ago PancakeSwap: Router v2 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0.007034361647193063 BNB
0x62ac8d3a6221506dd2eb932c7fda73fa2be80431e6b2973f0b0695aa1be8dab8125255602021-11-10 8:01:2824 days 21 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0xebadd1f2935008c35710bd76571087c7c11b64660.002205207281923746 BNB
0x62ac8d3a6221506dd2eb932c7fda73fa2be80431e6b2973f0b0695aa1be8dab8125255602021-11-10 8:01:2824 days 21 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c 0x60f695d9fcfedda7b8ecb016f4a499b2751c286f0.003087290194693245 BNB
0x62ac8d3a6221506dd2eb932c7fda73fa2be80431e6b2973f0b0695aa1be8dab8125255602021-11-10 8:01:2824 days 21 hrs ago PancakeSwap: Router v2 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0.007056663302155989 BNB
0xc2cd85c4def8d8a3f032d098ae6b35be162e545b42705c40c8473d671e000fdd122824802021-11-01 17:32:0533 days 11 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0xebadd1f2935008c35710bd76571087c7c11b64660.002205207281923746 BNB
0xc2cd85c4def8d8a3f032d098ae6b35be162e545b42705c40c8473d671e000fdd122824802021-11-01 17:32:0533 days 11 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c 0x60f695d9fcfedda7b8ecb016f4a499b2751c286f0.003087290194693245 BNB
0xc2cd85c4def8d8a3f032d098ae6b35be162e545b42705c40c8473d671e000fdd122824802021-11-01 17:32:0533 days 11 hrs ago PancakeSwap: Router v2 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0.007056663302155989 BNB
0x6d778ed3bb7b282f2199d661924116b5144d25a14b72fc7f7418f24da0fed3ac122824612021-11-01 17:31:0833 days 11 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0xebadd1f2935008c35710bd76571087c7c11b64660.002205207281923746 BNB
0x6d778ed3bb7b282f2199d661924116b5144d25a14b72fc7f7418f24da0fed3ac122824612021-11-01 17:31:0833 days 11 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c 0x60f695d9fcfedda7b8ecb016f4a499b2751c286f0.003087290194693245 BNB
0x6d778ed3bb7b282f2199d661924116b5144d25a14b72fc7f7418f24da0fed3ac122824612021-11-01 17:31:0833 days 11 hrs ago PancakeSwap: Router v2 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0.007056663302155989 BNB
0xe4e54c6740a3e0bb4cbdb8ea09e7fe88888fd1ea3933f8ed187e6e012bd8b067122823242021-11-01 17:24:1733 days 11 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0xebadd1f2935008c35710bd76571087c7c11b64660.002205207281923746 BNB
0xe4e54c6740a3e0bb4cbdb8ea09e7fe88888fd1ea3933f8ed187e6e012bd8b067122823242021-11-01 17:24:1733 days 11 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c 0x60f695d9fcfedda7b8ecb016f4a499b2751c286f0.003087290194693245 BNB
0xe4e54c6740a3e0bb4cbdb8ea09e7fe88888fd1ea3933f8ed187e6e012bd8b067122823242021-11-01 17:24:1733 days 11 hrs ago PancakeSwap: Router v2 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0.007056663302155989 BNB
0x916b466149c66319adcfc2685ca352be50000b812c4a8976db466b37712993dd122264622021-10-30 18:05:4135 days 11 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0xebadd1f2935008c35710bd76571087c7c11b64660.002216747945941231 BNB
0x916b466149c66319adcfc2685ca352be50000b812c4a8976db466b37712993dd122264622021-10-30 18:05:4135 days 11 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c 0x60f695d9fcfedda7b8ecb016f4a499b2751c286f0.003103447124317724 BNB
0x916b466149c66319adcfc2685ca352be50000b812c4a8976db466b37712993dd122264622021-10-30 18:05:4135 days 11 hrs ago PancakeSwap: Router v2 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0.007093593427011942 BNB
0xc86066548bc8207031766d6c2279c0ca395939156f395ed13d996457a892e986121954642021-10-29 15:18:2236 days 13 hrs ago 0xe81bfbb53a195fa3b6d1b12c4c1ea5452490bb8c0xebadd1f2935008c35710bd76571087c7c11b64660.002245780917360759 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BitDoge

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 * Introducing $BITDOGE, the First Token of its type to provide its users with BTC rewards💵💵,
 * Smart Auto BuyBack features that uses price feeds and trading algorithm to strategically 
 * buy back tokens and burn them, 
 * immediately rising the price and rarity and thus benefiting its holders.
                       
                       
                         JOIN THE BIGGEST FAIR LAUNCH OF THE YEAR 
                                LAUNCHING ON PANCAKESWAP
                                   27TH AUG 5 PM UTC
                                  
 * https://BitDogeCoin.org
 * https://t.me/BitDogeCoinBsc
 * https://twitter.com/BitDogeCoinBsc
 * https://instagram.com/BitDogeCoinBsc
 */

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.6;

/**

 * https://BitDogeCoin.org
 * https://t.me/BitDogeCoinBsc
 * https://twitter.com/BitDogeCoinBsc
 * https://instagram.com/BitDogeCoinBsc
 */
 
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

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

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

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

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

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

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

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

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

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

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

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

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

enum Permission {
    ChangeFees,
    Buyback,
    AdjustContractVariables,
    Authorize,
    Unauthorize,
    PauseUnpauseContract,
    BypassPause,
    LockPermissions,
    ExcludeInclude,
    Blacklist
}

abstract contract BitDogeAuth {
    struct PermissionLock {
        bool isLocked;
        uint64 expiryTime;
    }

    address public owner;
    mapping(address => mapping(uint256 => bool)) private authorizations; // uint256 is permission index
    
    uint256 constant NUM_PERMISSIONS = 10; // always has to be adjusted when Permission element is added or removed
    mapping(string => uint256) permissionNameToIndex;
    mapping(uint256 => string) permissionIndexToName;

    mapping(uint256 => PermissionLock) lockedPermissions;

    constructor(address owner_) {
        owner = owner_;
        for (uint256 i; i < NUM_PERMISSIONS; i++) {
            authorizations[owner_][i] = true;
        }

        permissionNameToIndex["ChangeFees"] = uint256(Permission.ChangeFees);
        permissionNameToIndex["Buyback"] = uint256(Permission.Buyback);
        permissionNameToIndex["AdjustContractVariables"] = uint256(Permission.AdjustContractVariables);
        permissionNameToIndex["Authorize"] = uint256(Permission.Authorize);
        permissionNameToIndex["Unauthorize"] = uint256(Permission.Unauthorize);
        permissionNameToIndex["PauseUnpauseContract"] = uint256(Permission.PauseUnpauseContract);
        permissionNameToIndex["BypassPause"] = uint256(Permission.BypassPause);
        permissionNameToIndex["LockPermissions"] = uint256(Permission.LockPermissions);
        permissionNameToIndex["ExcludeInclude"] = uint256(Permission.ExcludeInclude);
        permissionNameToIndex["Blacklist"] = uint256(Permission.Blacklist);

        permissionIndexToName[uint256(Permission.ChangeFees)] = "ChangeFees";
        permissionIndexToName[uint256(Permission.Buyback)] = "Buyback";
        permissionIndexToName[uint256(Permission.AdjustContractVariables)] = "AdjustContractVariables";
        permissionIndexToName[uint256(Permission.Authorize)] = "Authorize";
        permissionIndexToName[uint256(Permission.Unauthorize)] = "Unauthorize";
        permissionIndexToName[uint256(Permission.PauseUnpauseContract)] = "PauseUnpauseContract";
        permissionIndexToName[uint256(Permission.BypassPause)] = "BypassPause";
        permissionIndexToName[uint256(Permission.LockPermissions)] = "LockPermissions";
        permissionIndexToName[uint256(Permission.ExcludeInclude)] = "ExcludeInclude";
        permissionIndexToName[uint256(Permission.Blacklist)] = "Blacklist";
    }

   
    modifier onlyOwner() {
        require(isOwner(msg.sender), "Ownership required."); _;
    }

   
    modifier authorizedFor(Permission permission) {
        require(!lockedPermissions[uint256(permission)].isLocked, "Permission is locked.");
        require(isAuthorizedFor(msg.sender, permission), string(abi.encodePacked("Not authorized. You need the permission ", permissionIndexToName[uint256(permission)]))); _;
    }

   
    function authorizeFor(address adr, string memory permissionName) public authorizedFor(Permission.Authorize) {
        uint256 permIndex = permissionNameToIndex[permissionName];
        authorizations[adr][permIndex] = true;
        emit AuthorizedFor(adr, permissionName, permIndex);
    }

   
    function authorizeForMultiplePermissions(address adr, string[] calldata permissionNames) public authorizedFor(Permission.Authorize) {
        for (uint256 i; i < permissionNames.length; i++) {
            uint256 permIndex = permissionNameToIndex[permissionNames[i]];
            authorizations[adr][permIndex] = true;
            emit AuthorizedFor(adr, permissionNames[i], permIndex);
        }
    }

   
    function unauthorizeFor(address adr, string memory permissionName) public authorizedFor(Permission.Unauthorize) {
        require(adr != owner, "Can't unauthorize owner");

        uint256 permIndex = permissionNameToIndex[permissionName];
        authorizations[adr][permIndex] = false;
        emit UnauthorizedFor(adr, permissionName, permIndex);
    }

  
    function unauthorizeForMultiplePermissions(address adr, string[] calldata permissionNames) public authorizedFor(Permission.Unauthorize) {
        require(adr != owner, "Can't unauthorize owner");

        for (uint256 i; i < permissionNames.length; i++) {
            uint256 permIndex = permissionNameToIndex[permissionNames[i]];
            authorizations[adr][permIndex] = false;
            emit UnauthorizedFor(adr, permissionNames[i], permIndex);
        }
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

  
    function isAuthorizedFor(address adr, string memory permissionName) public view returns (bool) {
        return authorizations[adr][permissionNameToIndex[permissionName]];
    }

 
    function isAuthorizedFor(address adr, Permission permission) public view returns (bool) {
        return authorizations[adr][uint256(permission)];
    }


    function transferOwnership(address payable adr) public onlyOwner {
        address oldOwner = owner;
        owner = adr;
        for (uint256 i; i < NUM_PERMISSIONS; i++) {
            authorizations[oldOwner][i] = false;
            authorizations[owner][i] = true;
        }
        emit OwnershipTransferred(oldOwner, owner);
    }

 
    function getPermissionNameToIndex(string memory permissionName) public view returns (uint256) {
        return permissionNameToIndex[permissionName];
    }
    

    function getPermissionUnlockTime(string memory permissionName) public view returns (uint256) {
        return lockedPermissions[permissionNameToIndex[permissionName]].expiryTime;
    }


    function isLocked(string memory permissionName) public view returns (bool) {
        return lockedPermissions[permissionNameToIndex[permissionName]].isLocked;
    }


    function lockPermission(string memory permissionName, uint64 time) public virtual authorizedFor(Permission.LockPermissions) {
        uint256 permIndex = permissionNameToIndex[permissionName];
        uint64 expiryTime = uint64(block.timestamp) + time;
        lockedPermissions[permIndex] = PermissionLock(true, expiryTime);
        emit PermissionLocked(permissionName, permIndex, expiryTime);
    }
    

    function unlockPermission(string memory permissionName) public virtual {
        require(block.timestamp > getPermissionUnlockTime(permissionName) , "Permission is locked until the expiry time.");
        uint256 permIndex = permissionNameToIndex[permissionName];
        lockedPermissions[permIndex].isLocked = false;
        emit PermissionUnlocked(permissionName, permIndex);
    }

    event PermissionLocked(string permissionName, uint256 permissionIndex, uint64 expiryTime);
    event PermissionUnlocked(string permissionName, uint256 permissionIndex);
    event OwnershipTransferred(address from, address to);
    event AuthorizedFor(address adr, string permissionName, uint256 permissionIndex);
    event UnauthorizedFor(address adr, string permissionName, uint256 permissionIndex);
}

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

contract DividendBit_Doge is IDividendBit_Doge {
    using SafeMath for uint256;

    address _token;

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

    IBEP20 BTCB = IBEP20(0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c);
    address WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    IDEXRouter router;

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

    mapping (address => Share) public shares;

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

    uint256 public minPeriod = 30 minutes; // min 30 minutes delay
    uint256 public minDistribution = 30 / 1000000 * (10 ** 18); // 1 USD of BTCB minimum auto send

    uint256 currentIndex;

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

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

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

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

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

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

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

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

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

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

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

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

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

        if(shareholderCount == 0) { return; }

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

        uint256 iterations = 0;

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

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

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

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

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            BTCB.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 override {
        distributeDividend(msg.sender);
    }

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

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

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

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

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

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

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

contract BitDoge is IBEP20, BitDogeAuth {
    using SafeMath for uint256;

    address BTCB = 0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c;
    address WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "BitDoge Coin";
    string constant _symbol = "BITDOGE";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1 * 10 ** 15 * (10 ** _decimals); // 1 Quadrillion
    uint256 public _maxTxAmount = _totalSupply / 200; // 0.5%

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

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

    uint256 liquidityFee = 100;
    uint256 buybackFee = 300;
    uint256 reflectionFee = 700;
    uint256 marketingFee = 500;
    uint256 totalBuyFee = 1600;
    uint256 totalSellFee = 3200;
    uint256 feeDenominator = 10000;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address pancakeV2BNBPair;
    address[] public pairs;

    uint256 public launchedAt;

    uint256 buybackMultiplierNumerator = 150;
    uint256 buybackMultiplierDenominator = 100;
    uint256 buybackMultiplierTriggeredAt;
    uint256 buybackMultiplierLength = 30 minutes;

    bool public feesOnNormalTransfers = false;

    DividendBit_Doge distributor;
    uint256 distributorGas = 500000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 5000; // 0.02%
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () BitDogeAuth(msg.sender) {
        router = IDEXRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        pancakeV2BNBPair = IDEXFactory(router.factory()).createPair(WBNB, address(this));
        _allowances[address(this)][address(router)] = ~uint256(0);

        pairs.push(pancakeV2BNBPair);
        distributor = new DividendBit_Doge(address(router));

        address owner_ = msg.sender;

        isFeeExempt[owner_] = true;
        isTxLimitExempt[owner_] = true;
        isDividendExempt[pancakeV2BNBPair] = true;
        isDividendExempt[address(this)] = true;
        isFeeExempt[address(this)] = true;
        isTxLimitExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        autoLiquidityReceiver = owner_;
        marketingFeeReceiver = owner_;

        _balances[owner_] = _totalSupply;
        emit Transfer(address(0), owner_, _totalSupply);
    }

    receive() external payable { }

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

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

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

    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(0)){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(!isBlacklisted[sender], "Address is blacklisted");

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }
        
        checkTxLimit(sender, amount);

        if(shouldSwapBack()){ swapBack(); }

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

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

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

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

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

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

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

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        if (isFeeExempt[sender] || isFeeExempt[recipient] || !launched()) return false;

        address[] memory liqPairs = pairs;

        for (uint256 i = 0; i < liqPairs.length; i++) {
            if (sender == liqPairs[i] || recipient == liqPairs[i]) return true;
        }

        return feesOnNormalTransfers;
    }

    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + 1 >= block.number){ return feeDenominator.sub(1); }
        if(selling && buybackMultiplierTriggeredAt.add(buybackMultiplierLength) > block.timestamp){ return getMultipliedFee(); }
        return selling ? totalSellFee : totalBuyFee;
    }

    function getMultipliedFee() public view returns (uint256) {
        uint totalFee = totalSellFee;
        uint256 remainingTime = buybackMultiplierTriggeredAt.add(buybackMultiplierLength).sub(block.timestamp);
        uint256 feeIncrease = totalFee.mul(buybackMultiplierNumerator).div(buybackMultiplierDenominator).sub(totalFee);
        return totalFee.add(feeIncrease.mul(remainingTime).div(buybackMultiplierLength));
    }

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

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

        return amount.sub(feeAmount);
    }
        
    function isSell(address recipient) internal view returns (bool) {
        address[] memory liqPairs = pairs;
        for (uint256 i = 0; i < liqPairs.length; i++) {
            if (recipient == liqPairs[i]) return true;
        }
        return false;
    }

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

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

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

        uint256 balanceBefore = address(this).balance;

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

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

            uint256 totalBNBFee = totalBuyFee.sub(dynamicLiquidityFee.div(2));

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

            try distributor.deposit{value: amountBNBReflection}() {} catch {}
            (bool success, /* bytes memory data */) = payable(marketingFeeReceiver).call{value: amountBNBMarketing, gas: 30000}("");
            require(success, "receiver rejected ETH transfer");

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

            emit SwapBackSuccess(amountToSwap);
        } catch Error(string memory e) {
            emit SwapBackFailed(string(abi.encodePacked("SwapBack failed with error ", e)));
        } catch {
            emit SwapBackFailed("SwapBack failed without an error message from pancakeSwap");
        }
    }

    function triggerBuyback(uint256 amount, bool triggerBuybackMultiplier) external authorizedFor(Permission.Buyback) {
        buyTokens(amount, DEAD);
        if(triggerBuybackMultiplier){
            buybackMultiplierTriggeredAt = block.timestamp;
            emit BuybackMultiplierActive(buybackMultiplierLength);
        }
    }
    
    function clearBuybackMultiplier() external authorizedFor(Permission.Buyback) {
        buybackMultiplierTriggeredAt = 0;
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(this);

        try router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: amount }(
            0,
            path,
            to,
            block.timestamp
        ) {
            emit BoughtBack(amount, to);
        } catch Error(string memory reason) {
            revert(string(abi.encodePacked("Buyback failed with error ", reason)));
        } catch {
            revert("Buyback failed without an error message from pancakeSwap");
        }
    }

    function setBuybackMultiplierSettings(uint256 numerator, uint256 denominator, uint256 length) external authorizedFor(Permission.AdjustContractVariables) {
        require(numerator / denominator <= 3 && numerator > denominator);
        buybackMultiplierNumerator = numerator;
        buybackMultiplierDenominator = denominator;
        buybackMultiplierLength = length;
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
        emit Launched(block.number, block.timestamp);
    }

    function setTxLimit(uint256 amount) external authorizedFor(Permission.AdjustContractVariables) {
        require(amount >= _totalSupply / 2000);
        _maxTxAmount = amount;
    }

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

    function setIsFeeExempt(address holder, bool exempt) external authorizedFor(Permission.ExcludeInclude) {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external authorizedFor(Permission.ExcludeInclude) {
        isTxLimitExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _buybackFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _feeDenominator, uint256 _totalSellFee) external authorizedFor(Permission.AdjustContractVariables) {
        liquidityFee = _liquidityFee;
        buybackFee = _buybackFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        totalBuyFee = _liquidityFee.add(_buybackFee).add(_reflectionFee).add(_marketingFee);
        feeDenominator = _feeDenominator;
        totalSellFee = _totalSellFee;
        require(totalBuyFee <= feeDenominator / 10, "Buy fee too high");
        require(totalSellFee <= feeDenominator / 5, "Sell fee too high");
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external authorizedFor(Permission.AdjustContractVariables) {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorizedFor(Permission.AdjustContractVariables) {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorizedFor(Permission.AdjustContractVariables) {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorizedFor(Permission.AdjustContractVariables) {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

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

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

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

    function claimDividend() external {
        distributor.claimDividend();
    }
    
    function addPair(address pair) external authorizedFor(Permission.AdjustContractVariables) {
        pairs.push(pair);
    }
    
    function removeLastPair() external authorizedFor(Permission.AdjustContractVariables) {
        pairs.pop();
    }
    
    function setFeesOnNormalTransfers(bool _enabled) external authorizedFor(Permission.AdjustContractVariables) {
        feesOnNormalTransfers = _enabled;
    }
        
    function setIsBlacklisted(address adr, bool blacklisted) external authorizedFor(Permission.Blacklist) {
        isBlacklisted[adr] = blacklisted;
    }

    function setLaunchedAt(uint256 launched_) external authorizedFor(Permission.AdjustContractVariables) {
        launchedAt = launched_;
    }

    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);
    event BuybackMultiplierActive(uint256 duration);
    event BoughtBack(uint256 amount, address to);
    event Launched(uint256 blockNumber, uint256 timestamp);
    event SwapBackSuccess(uint256 amount);
    event SwapBackFailed(string message);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"},{"indexed":false,"internalType":"string","name":"permissionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"permissionIndex","type":"uint256"}],"name":"AuthorizedFor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"BoughtBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"BuybackMultiplierActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Launched","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"permissionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"permissionIndex","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"expiryTime","type":"uint64"}],"name":"PermissionLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"permissionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"permissionIndex","type":"uint256"}],"name":"PermissionUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"SwapBackFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapBackSuccess","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"},{"indexed":false,"internalType":"string","name":"permissionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"permissionIndex","type":"uint256"}],"name":"UnauthorizedFor","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string","name":"permissionName","type":"string"}],"name":"authorizeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string[]","name":"permissionNames","type":"string[]"}],"name":"authorizeForMultiplePermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearBuybackMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"feesOnNormalTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMultipliedFee","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":"string","name":"permissionName","type":"string"}],"name":"getPermissionNameToIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"}],"name":"getPermissionUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"enum Permission","name":"permission","type":"uint8"}],"name":"isAuthorizedFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string","name":"permissionName","type":"string"}],"name":"isAuthorizedFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"}],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"},{"internalType":"uint64","name":"time","type":"uint64"}],"name":"lockPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLastPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"setBuybackMultiplierSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"},{"internalType":"uint256","name":"_totalSellFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnNormalTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"setIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"launched_","type":"uint256"}],"name":"setLaunchedAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"triggerBuybackMultiplier","type":"bool"}],"name":"triggerBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string","name":"permissionName","type":"string"}],"name":"unauthorizeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string[]","name":"permissionNames","type":"string[]"}],"name":"unauthorizeForMultiplePermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"}],"name":"unlockPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600580546001600160a01b0319908116737130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c1790915560068054821673bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c17905560078054821661dead1790556008805490911690556200006e6009600a62000b7b565b620000819066038d7ea4c6800062000c3c565b60095560c860095462000095919062000b0f565b600a556064601181905561012c6012556102bc6013556101f46014908155610640601555610c80601655612710601755601a55601b81905560966020556021556107086023556024805460ff199081169091556207a1206025556026805490911660011790556009546200010d906113889062000b0f565b6027553480156200011d57600080fd5b50600080546001600160a01b031916339081178255905b600a81101562000182576001600160a01b0382166000908152600160208181526040808420858552909152909120805460ff1916909117905580620001798162000c9b565b91505062000134565b506000604051694368616e67654665657360b01b8152600290600a01908152604051908190036020019020556001604051664275796261636b60c81b81526002906007019081526040519081900360200190205560026040517f41646a757374436f6e74726163745661726961626c6573000000000000000000815260029060170190815260405190819003602001902055600360405168417574686f72697a6560b81b81526002906009019081526040519081900360200190205560046040516a556e617574686f72697a6560a81b8152600290600b019081526040519081900360200190205560056040517f5061757365556e7061757365436f6e747261637400000000000000000000000081526002906014019081526040519081900360200190205560066040516a427970617373506175736560a81b8152600290600b019081526040519081900360200190205560076040516e4c6f636b5065726d697373696f6e7360881b8152600290600f019081526040519081900360200190205560086040516d4578636c756465496e636c75646560901b8152600290600e0190815260405190819003602001902055600960405168109b1858dadb1a5cdd60ba1b8152600290600901908152604080519182900360209081018320939093558181019052600a8152694368616e67654665657360b01b82820190815260008052600390925251620003b7917f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff9162000a29565b506040805180820190915260078152664275796261636b60c81b6020808301918252600160005260039052905162000411917fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c9162000a29565b5060408051808201909152601781527f41646a757374436f6e74726163745661726961626c65730000000000000000006020808301918252600260005260039052905162000481917fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d9162000a29565b50604080518082019091526009815268417574686f72697a6560b81b60208083019182526003600081905290529051620004dd917fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495af9162000a29565b5060408051808201909152600b81526a556e617574686f72697a6560a81b602080830191825260046000526003905290516200053b917f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe937724659162000a29565b5060408051808201909152601481527f5061757365556e7061757365436f6e747261637400000000000000000000000060208083019182526005600052600390529051620005ab917f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b4659422509162000a29565b5060408051808201909152600b81526a427970617373506175736560a81b6020808301918252600660005260039052905162000609917fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f39162000a29565b5060408051808201909152600f81526e4c6f636b5065726d697373696f6e7360881b602080830191825260076000526003905290516200066b917ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd29162000a29565b5060408051808201909152600e81526d4578636c756465496e636c75646560901b60208083019182526008600052600390529051620006cc917f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbe9162000a29565b5060408051808201909152600980825268109b1858dadb1a5cdd60ba1b6020808401918252600092909252600390915290516200072b917f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb4589162000a29565b5050601c80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e9081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200078d57600080fd5b505afa158015620007a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007c8919062000add565b6006546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200081557600080fd5b505af11580156200082a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000850919062000add565b601d80546001600160a01b039283166001600160a01b0319918216178255306000908152600c60209081526040808320601c805488168552925280832060001990559354601e805460018101825593527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350909201805490931691851691909117909155549051911690620008e49062000ab8565b6001600160a01b039091168152602001604051809103906000f08015801562000911573d6000803e3d6000fd5b5060248054610100600160a81b0319166101006001600160a01b0393841602179055336000818152600d60208181526040808420805460ff199081166001908117909255600e8085528387208054831684179055601d5489168752600f8086528488208054841685179055308852848820805484168517905595855283872080548316841790558452828620805482168317905560075490971685529282528084208054909616909217909455601880546001600160a01b031990811685179091556019805490911684179055600954838352600b85528183208190559051908152919283927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000ccf565b82805462000a379062000c5e565b90600052602060002090601f01602090048101928262000a5b576000855562000aa6565b82601f1062000a7657805160ff191683800117855562000aa6565b8280016001018555821562000aa6579182015b8281111562000aa657825182559160200191906001019062000a89565b5062000ab492915062000ac6565b5090565b61104680620053a983390190565b5b8082111562000ab4576000815560010162000ac7565b60006020828403121562000af057600080fd5b81516001600160a01b038116811462000b0857600080fd5b9392505050565b60008262000b2d57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111562000b7357816000190482111562000b575762000b5762000cb9565b8085161562000b6557918102915b93841c939080029062000b37565b509250929050565b600062000b0860ff84168360008262000b975750600162000c36565b8162000ba65750600062000c36565b816001811462000bbf576002811462000bca5762000bea565b600191505062000c36565b60ff84111562000bde5762000bde62000cb9565b50506001821b62000c36565b5060208310610133831016604e8410600b841016171562000c0f575081810a62000c36565b62000c1b838362000b32565b806000190482111562000c325762000c3262000cb9565b0290505b92915050565b600081600019048311821515161562000c595762000c5962000cb9565b500290565b600181811c9082168062000c7357607f821691505b6020821081141562000c9557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000cb25762000cb262000cb9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6146ca8062000cdf6000396000f3fe6080604052600436106103845760003560e01c806386f6c3c1116101d1578063c41235a611610102578063e96fada2116100a0578063f3a54f2c1161006f578063f3a54f2c14610a90578063f708a64f14610ab0578063f84ba65d14610ad0578063f887ea4014610af057600080fd5b8063e96fada214610a1b578063f0fc6bca14610a3b578063f1f3bca314610a50578063f2fde38b14610a7057600080fd5b8063d806d12f116100dc578063d806d12f14610980578063dd62ed3e14610995578063df20fd49146109db578063e75cae79146109fb57600080fd5b8063c41235a614610920578063ca33e64c14610940578063d51ed1c81461096057600080fd5b8063a4b45c001161016f578063b210b06d11610149578063b210b06d146108b5578063b91ac788146108ca578063bf56b371146108ea578063c2b7bbb61461090057600080fd5b8063a4b45c0014610855578063a9059cbb14610875578063af05cf931461089557600080fd5b806395d89b41116101ab57806395d89b41146107c5578063971563fc146107f55780639d1944f514610815578063a0e384921461083557600080fd5b806386f6c3c114610753578063893d20e8146107735780638da5cb5b146107a557600080fd5b80632d48e896116102b65780635c85974f1161025457806370a082311161022357806370a08231146106c75780637d1db4a5146106fd5780638032eccb146107135780638101cae31461073357600080fd5b80635c85974f1461064d578063658d4b7f1461066d5780636a6e3cbe1461068d5780636ddd1713146106ad57600080fd5b806339e67c8a1161029057806339e67c8a146105d3578063571ac8b0146105f357806357b78541146106135780635abe67111461063357600080fd5b80632d48e896146105685780632f54bf6e14610588578063313ce567146105b757600080fd5b806318160ddd11610323578063201e7991116102fd578063201e7991146104f35780632375ce401461051357806323b872dd146105335780632b112e491461055357600080fd5b806318160ddd1461049e5780631ad6084f146104b35780631e8f5283146104d357600080fd5b806306fdde031161035f57806306fdde03146103f057806307858b021461042e578063095ea7b31461044e5780631161ae391461047e57600080fd5b806293dc14146103905780630445b667146103a757806306fbdcd8146103d057600080fd5b3661038b57005b600080fd5b34801561039c57600080fd5b506103a5610b10565b005b3480156103b357600080fd5b506103bd60275481565b6040519081526020015b60405180910390f35b3480156103dc57600080fd5b506103bd6103eb366004613ed1565b610bf7565b3480156103fc57600080fd5b5060408051808201909152600c81526b2134ba2237b3b29021b7b4b760a11b60208201525b6040516103c79190614317565b34801561043a57600080fd5b506103a5610449366004613ed1565b610c1f565b34801561045a57600080fd5b5061046e610469366004613e6e565b610d01565b60405190151581526020016103c7565b34801561048a57600080fd5b5061046e610499366004613fa4565b610d6e565b3480156104aa57600080fd5b506009546103bd565b3480156104bf57600080fd5b506103a56104ce366004613d2f565b610d82565b3480156104df57600080fd5b506103a56104ee366004613e1e565b610f88565b3480156104ff57600080fd5b506103a561050e366004613fa4565b6110d4565b34801561051f57600080fd5b506103a561052e366004613fc6565b611188565b34801561053f57600080fd5b5061046e61054e366004613cee565b611261565b34801561055f57600080fd5b506103bd611323565b34801561057457600080fd5b506103a5610583366004613fa4565b611375565b34801561059457600080fd5b5061046e6105a3366004613c98565b6000546001600160a01b0391821691161490565b3480156105c357600080fd5b50604051600981526020016103c7565b3480156105df57600080fd5b506103a56105ee366004613f68565b61148b565b3480156105ff57600080fd5b5061046e61060e366004613c98565b611539565b34801561061f57600080fd5b5061046e61062e366004613dec565b611547565b34801561063f57600080fd5b5060245461046e9060ff1681565b34801561065957600080fd5b506103a5610668366004613f68565b61158d565b34801561067957600080fd5b506103a5610688366004613db7565b611657565b34801561069957600080fd5b506103a56106a8366004613f81565b61173d565b3480156106b957600080fd5b5060265461046e9060ff1681565b3480156106d357600080fd5b506103bd6106e2366004613c98565b6001600160a01b03166000908152600b602052604090205490565b34801561070957600080fd5b506103bd600a5481565b34801561071f57600080fd5b5061046e61072e366004613ed1565b611854565b34801561073f57600080fd5b506103a561074e366004613e1e565b611893565b34801561075f57600080fd5b506103a561076e366004614020565b611a24565b34801561077f57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103c7565b3480156107b157600080fd5b5060005461078d906001600160a01b031681565b3480156107d157600080fd5b50604080518082019091526007815266424954444f474560c81b6020820152610421565b34801561080157600080fd5b506103a5610810366004613f0e565b611ba6565b34801561082157600080fd5b506103a5610830366004613f68565b611d31565b34801561084157600080fd5b506103a5610850366004613db7565b611def565b34801561086157600080fd5b506103a5610870366004613cb5565b611ed5565b34801561088157600080fd5b5061046e610890366004613e6e565b611fac565b3480156108a157600080fd5b506103a56108b0366004613d2f565b611fb9565b3480156108c157600080fd5b506103a5612167565b3480156108d657600080fd5b5061078d6108e5366004613f68565b612229565b3480156108f657600080fd5b506103bd601f5481565b34801561090c57600080fd5b506103a561091b366004613c98565b612253565b34801561092c57600080fd5b5061046e61093b366004613e1e565b61234e565b34801561094c57600080fd5b5060185461078d906001600160a01b031681565b34801561096c57600080fd5b506103bd61097b366004613f68565b6123a3565b34801561098c57600080fd5b506103bd6123e7565b3480156109a157600080fd5b506103bd6109b0366004613cb5565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b3480156109e757600080fd5b506103a56109f6366004613eb5565b61245c565b348015610a0757600080fd5b506103bd610a16366004613ed1565b61251c565b348015610a2757600080fd5b5060195461078d906001600160a01b031681565b348015610a4757600080fd5b506103a5612567565b348015610a5c57600080fd5b506103bd610a6b366004613e9a565b6125d1565b348015610a7c57600080fd5b506103a5610a8b366004613c98565b61263a565b348015610a9c57600080fd5b506103a5610aab366004613e9a565b612757565b348015610abc57600080fd5b506103a5610acb366004613db7565b612813565b348015610adc57600080fd5b506103a5610aeb366004613db7565b6129bd565b348015610afc57600080fd5b50601c5461078d906001600160a01b031681565b6002600081905260046020526000805160206146758339815191525460ff1615610b555760405162461bcd60e51b8152600401610b4c9061437f565b60405180910390fd5b610b5f3382611547565b60036000836009811115610b7557610b7561455e565b8152602001908152602001600020604051602001610b939190614189565b60405160208183030381529060405290610bc05760405162461bcd60e51b8152600401610b4c9190614317565b50601e805480610bd257610bd2614574565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000600282604051610c0991906140e3565b9081526020016040518091039020549050919050565b610c288161251c565b4211610c8a5760405162461bcd60e51b815260206004820152602b60248201527f5065726d697373696f6e206973206c6f636b656420756e74696c20746865206560448201526a3c3834b93c903a34b6b29760a91b6064820152608401610b4c565b6000600282604051610c9c91906140e3565b9081526040805191829003602090810183205460008181526004909252919020805460ff1916905591507ffc8b383b99ea2b22b71f1093a47597b46df7078bee32a803a3bdd4a206723b8890610cf5908490849061432a565b60405180910390a15050565b336000818152600c602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d5c9086815260200190565b60405180910390a35060015b92915050565b600082610d7a836123a3565b119392505050565b6004600081905260208190527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f5460ff1615610dd05760405162461bcd60e51b8152600401610b4c9061437f565b610dda3382611547565b60036000836009811115610df057610df061455e565b8152602001908152602001600020604051602001610e0e9190614189565b60405160208183030381529060405290610e3b5760405162461bcd60e51b8152600401610b4c9190614317565b506000546001600160a01b0385811691161415610e945760405162461bcd60e51b815260206004820152601760248201527621b0b713ba103ab730baba3437b934bd329037bbb732b960491b6044820152606401610b4c565b60005b82811015610f815760006002858584818110610eb557610eb561458a565b9050602002810190610ec791906143ea565b604051610ed59291906140d3565b9081526040805160209281900383019020546001600160a01b0389166000908152600184528281208282529093529120805460ff1916905590507fb26499039c739e76d3891f0102d9af263029408ce80bd90b963ad702b35b5e1186868685818110610f4357610f4361458a565b9050602002810190610f5591906143ea565b84604051610f669493929190614264565b60405180910390a15080610f798161452d565b915050610e97565b5050505050565b6003600081905260046020527f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa05460ff1615610fd65760405162461bcd60e51b8152600401610b4c9061437f565b610fe03382611547565b60036000836009811115610ff657610ff661455e565b81526020019081526020016000206040516020016110149190614189565b604051602081830303815290604052906110415760405162461bcd60e51b8152600401610b4c9190614317565b50600060028360405161105491906140e3565b908152604080519182900360209081018320546001600160a01b0388166000908152600180845284822083835290935292909220805460ff1916909117905591507f51ff6835511b7f0d6d0df8f2dcc2c818d6eb8d2817b006ff65749f283afec643906110c6908690869085906142ae565b60405180910390a150505050565b6002600081905260046020526000805160206146758339815191525460ff16156111105760405162461bcd60e51b8152600401610b4c9061437f565b61111a3382611547565b600360008360098111156111305761113061455e565b815260200190815260200160002060405160200161114e9190614189565b6040516020818303038152906040529061117b5760405162461bcd60e51b8152600401610b4c9190614317565b5050601a91909155601b55565b6002600081905260046020526000805160206146758339815191525460ff16156111c45760405162461bcd60e51b8152600401610b4c9061437f565b6111ce3382611547565b600360008360098111156111e4576111e461455e565b81526020019081526020016000206040516020016112029190614189565b6040516020818303038152906040529061122f5760405162461bcd60e51b8152600401610b4c9190614317565b50600361123c848661447c565b1115801561124957508284115b61125257600080fd5b50602092909255602155602355565b6001600160a01b0383166000908152600c602090815260408083203384529091528120546000191461130e576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600c825283812033825290915291909120546112e9918490612aa3565b6001600160a01b0385166000908152600c602090815260408083203384529091529020555b611319848484612add565b90505b9392505050565b6008546001600160a01b03166000908152600b6020526040812054611370906007546001600160a01b03166000908152600b602052604090205461136a9060095490612e79565b90612e79565b905090565b6002600081905260046020526000805160206146758339815191525460ff16156113b15760405162461bcd60e51b8152600401610b4c9061437f565b6113bb3382611547565b600360008360098111156113d1576113d161455e565b81526020019081526020016000206040516020016113ef9190614189565b6040516020818303038152906040529061141c5760405162461bcd60e51b8152600401610b4c9190614317565b50602480546040516316a4744b60e11b81526004810186905291820184905261010090046001600160a01b031690632d48e896906044015b600060405180830381600087803b15801561146e57600080fd5b505af1158015611482573d6000803e3d6000fd5b50505050505050565b6002600081905260046020526000805160206146758339815191525460ff16156114c75760405162461bcd60e51b8152600401610b4c9061437f565b6114d13382611547565b600360008360098111156114e7576114e761455e565b81526020019081526020016000206040516020016115059190614189565b604051602081830303815290604052906115325760405162461bcd60e51b8152600401610b4c9190614317565b5050601f55565b6000610d6882600019610d01565b6001600160a01b0382166000908152600160205260408120818360098111156115725761157261455e565b815260208101919091526040016000205460ff169392505050565b6002600081905260046020526000805160206146758339815191525460ff16156115c95760405162461bcd60e51b8152600401610b4c9061437f565b6115d33382611547565b600360008360098111156115e9576115e961455e565b81526020019081526020016000206040516020016116079190614189565b604051602081830303815290604052906116345760405162461bcd60e51b8152600401610b4c9190614317565b506107d0600954611645919061447c565b82101561165157600080fd5b50600a55565b6008600081905260046020527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a45460ff16156116a55760405162461bcd60e51b8152600401610b4c9061437f565b6116af3382611547565b600360008360098111156116c5576116c561455e565b81526020019081526020016000206040516020016116e39190614189565b604051602081830303815290604052906117105760405162461bcd60e51b8152600401610b4c9190614317565b50506001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6001600081905260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe055460ff161561178b5760405162461bcd60e51b8152600401610b4c9061437f565b6117953382611547565b600360008360098111156117ab576117ab61455e565b81526020019081526020016000206040516020016117c99190614189565b604051602081830303815290604052906117f65760405162461bcd60e51b8152600401610b4c9190614317565b5060075461180e9084906001600160a01b0316612ebb565b811561184f57426022556023546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a9060200160405180910390a15b505050565b60006004600060028460405161186a91906140e3565b908152604080516020928190038301902054835290820192909252016000205460ff1692915050565b6004600081905260208190527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f5460ff16156118e15760405162461bcd60e51b8152600401610b4c9061437f565b6118eb3382611547565b600360008360098111156119015761190161455e565b815260200190815260200160002060405160200161191f9190614189565b6040516020818303038152906040529061194c5760405162461bcd60e51b8152600401610b4c9190614317565b506000546001600160a01b03848116911614156119a55760405162461bcd60e51b815260206004820152601760248201527621b0b713ba103ab730baba3437b934bd329037bbb732b960491b6044820152606401610b4c565b60006002836040516119b791906140e3565b908152604080519182900360209081018320546001600160a01b038816600090815260018352838120828252909252919020805460ff1916905591507fb26499039c739e76d3891f0102d9af263029408ce80bd90b963ad702b35b5e11906110c6908690869085906142ae565b6002600081905260046020526000805160206146758339815191525460ff1615611a605760405162461bcd60e51b8152600401610b4c9061437f565b611a6a3382611547565b60036000836009811115611a8057611a8061455e565b8152602001908152602001600020604051602001611a9e9190614189565b60405160208183030381529060405290611acb5760405162461bcd60e51b8152600401610b4c9190614317565b506011879055601286905560138590556014849055611af684611af087818b8b6130d1565b906130d1565b60155560178390556016829055611b0e600a8461447c565b6015541115611b525760405162461bcd60e51b815260206004820152601060248201526f084eaf240cccaca40e8dede40d0d2ced60831b6044820152606401610b4c565b6005601754611b61919061447c565b60165411156114825760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840cccaca40e8dede40d0d2ced607b1b6044820152606401610b4c565b6007600081905260046020527fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e5515460ff1615611bf45760405162461bcd60e51b8152600401610b4c9061437f565b611bfe3382611547565b60036000836009811115611c1457611c1461455e565b8152602001908152602001600020604051602001611c329190614189565b60405160208183030381529060405290611c5f5760405162461bcd60e51b8152600401610b4c9190614317565b506000600284604051611c7291906140e3565b9081526040519081900360200190205490506000611c908442614450565b6040805180820182526001815267ffffffffffffffff83811660208084019182526000888152600490915284902092518354915168ffffffffffffffffff1990921690151568ffffffffffffffff001916176101009190921602179055519091507f1a64a9fcf40ce1b5dcb813e1f2ef6c6f70310b51c853865d4bfe7ca8f37d854f90611d229087908590859061434c565b60405180910390a15050505050565b6002600081905260046020526000805160206146758339815191525460ff1615611d6d5760405162461bcd60e51b8152600401610b4c9061437f565b611d773382611547565b60036000836009811115611d8d57611d8d61455e565b8152602001908152602001600020604051602001611dab9190614189565b60405160208183030381529060405290611dd85760405162461bcd60e51b8152600401610b4c9190614317565b50620f4240821115611de957600080fd5b50602555565b6009600081905260046020527f4ad5a04d53b5856f318545bb721f67d3f6d0a5a999f25eec7e20eaeb4c47b9335460ff1615611e3d5760405162461bcd60e51b8152600401610b4c9061437f565b611e473382611547565b60036000836009811115611e5d57611e5d61455e565b8152602001908152602001600020604051602001611e7b9190614189565b60405160208183030381529060405290611ea85760405162461bcd60e51b8152600401610b4c9190614317565b50506001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6002600081905260046020526000805160206146758339815191525460ff1615611f115760405162461bcd60e51b8152600401610b4c9061437f565b611f1b3382611547565b60036000836009811115611f3157611f3161455e565b8152602001908152602001600020604051602001611f4f9190614189565b60405160208183030381529060405290611f7c5760405162461bcd60e51b8152600401610b4c9190614317565b5050601880546001600160a01b039384166001600160a01b03199182161790915560198054929093169116179055565b600061131c338484612add565b6003600081905260046020527f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa05460ff16156120075760405162461bcd60e51b8152600401610b4c9061437f565b6120113382611547565b600360008360098111156120275761202761455e565b81526020019081526020016000206040516020016120459190614189565b604051602081830303815290604052906120725760405162461bcd60e51b8152600401610b4c9190614317565b5060005b82811015610f8157600060028585848181106120945761209461458a565b90506020028101906120a691906143ea565b6040516120b49291906140d3565b9081526040805160209281900383019020546001600160a01b0389166000908152600180855283822083835290945291909120805460ff191690921790915590507f51ff6835511b7f0d6d0df8f2dcc2c818d6eb8d2817b006ff65749f283afec643868686858181106121295761212961458a565b905060200281019061213b91906143ea565b8460405161214c9493929190614264565b60405180910390a1508061215f8161452d565b915050612076565b6001600081905260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe055460ff16156121b55760405162461bcd60e51b8152600401610b4c9061437f565b6121bf3382611547565b600360008360098111156121d5576121d561455e565b81526020019081526020016000206040516020016121f39190614189565b604051602081830303815290604052906122205760405162461bcd60e51b8152600401610b4c9190614317565b50506000602255565b601e818154811061223957600080fd5b6000918252602090912001546001600160a01b0316905081565b6002600081905260046020526000805160206146758339815191525460ff161561228f5760405162461bcd60e51b8152600401610b4c9061437f565b6122993382611547565b600360008360098111156122af576122af61455e565b81526020019081526020016000206040516020016122cd9190614189565b604051602081830303815290604052906122fa5760405162461bcd60e51b8152600401610b4c9190614317565b5050601e80546001810182556000919091527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216600090815260016020526040808220905182906002906123799086906140e3565b908152604080516020928190038301902054835290820192909252016000205460ff169392505050565b6000610d686123b0611323565b601d546001600160a01b03166000908152600b60205260409020546123e1906123da906002613130565b8590613130565b906131af565b6000806016549050600061240c4261136a6023546022546130d190919063ffffffff16565b9050600061242f8361136a6021546123e16020548861313090919063ffffffff16565b905061245461244d6023546123e1858561313090919063ffffffff16565b84906130d1565b935050505090565b6002600081905260046020526000805160206146758339815191525460ff16156124985760405162461bcd60e51b8152600401610b4c9061437f565b6124a23382611547565b600360008360098111156124b8576124b861455e565b81526020019081526020016000206040516020016124d69190614189565b604051602081830303815290604052906125035760405162461bcd60e51b8152600401610b4c9190614317565b50506026805460ff191692151592909217909155602755565b60006004600060028460405161253291906140e3565b9081526040805160209281900383019020548352908201929092520160002054610100900467ffffffffffffffff1692915050565b602460019054906101000a90046001600160a01b03166001600160a01b031663f0fc6bca6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156125b757600080fd5b505af11580156125cb573d6000803e3d6000fd5b50505050565b600043601f5460016125e39190614438565b106125f657601754610d68906001612e79565b8180156126185750426126166023546022546130d190919063ffffffff16565b115b1561262557610d686123e7565b8161263257601554610d68565b505060165490565b6000546001600160a01b0316331461268a5760405162461bcd60e51b815260206004820152601360248201527227bbb732b939b434b8103932b8bab4b932b21760691b6044820152606401610b4c565b600080546001600160a01b038381166001600160a01b0319831617835516905b600a811015612712576001600160a01b0380831660009081526001602081815260408084208685528252808420805460ff199081169091558454909516845282825280842086855290915290912080549092161790558061270a8161452d565b9150506126aa565b50600054604080516001600160a01b03808516825290921660208301527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09101610cf5565b6002600081905260046020526000805160206146758339815191525460ff16156127935760405162461bcd60e51b8152600401610b4c9061437f565b61279d3382611547565b600360008360098111156127b3576127b361455e565b81526020019081526020016000206040516020016127d19190614189565b604051602081830303815290604052906127fe5760405162461bcd60e51b8152600401610b4c9190614317565b50506024805460ff1916911515919091179055565b6008600081905260046020527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a45460ff16156128615760405162461bcd60e51b8152600401610b4c9061437f565b61286b3382611547565b600360008360098111156128815761288161455e565b815260200190815260200160002060405160200161289f9190614189565b604051602081830303815290604052906128cc5760405162461bcd60e51b8152600401610b4c9190614317565b506001600160a01b03831630148015906128f45750601d546001600160a01b03848116911614155b6128fd57600080fd5b6001600160a01b0383166000908152600f60205260409020805460ff1916831580159190911790915561296c5760248054604051630a5b654b60e11b81526001600160a01b038681166004830152600093820193909352610100909104909116906314b6ca9690604401611454565b602480546001600160a01b038581166000818152600b602052604090819020549051630a5b654b60e11b815260048101929092529381019390935261010090910416906314b6ca9690604401611454565b6008600081905260046020527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a45460ff1615612a0b5760405162461bcd60e51b8152600401610b4c9061437f565b612a153382611547565b60036000836009811115612a2b57612a2b61455e565b8152602001908152602001600020604051602001612a499190614189565b60405160208183030381529060405290612a765760405162461bcd60e51b8152600401610b4c9190614317565b50506001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b60008184841115612ac75760405162461bcd60e51b8152600401610b4c9190614317565b506000612ad484866144bd565b95945050505050565b6001600160a01b03831660009081526010602052604081205460ff1615612b3f5760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610b4c565b60285460ff1615612b5c57612b558484846131f1565b905061131c565b612b6684836132d7565b612b6e613344565b15612b7b57612b7b613393565b601f54158015612b985750601d546001600160a01b038481169116145b15612bc7576001600160a01b0384166000908152600b6020526040902054612bbf57600080fd5b612bc76138e7565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600b9091529190912054612c19918490612aa3565b6001600160a01b0385166000908152600b6020526040812091909155612c3f8585613927565b612c495782612c54565b612c54858585613a7d565b6001600160a01b0385166000908152600b6020526040902054909150612c7a90826130d1565b6001600160a01b038086166000908152600b60209081526040808320949094559188168152600f909152205460ff16612d2657602480546001600160a01b038781166000818152600b602052604090819020549051630a5b654b60e11b815260048101929092529381019390935261010090910416906314b6ca9690604401600060405180830381600087803b158015612d1357600080fd5b505af1925050508015612d24575060015b505b6001600160a01b0384166000908152600f602052604090205460ff16612dbf57602480546001600160a01b038681166000818152600b602052604090819020549051630a5b654b60e11b815260048101929092529381019390935261010090910416906314b6ca9690604401600060405180830381600087803b158015612dac57600080fd5b505af1925050508015612dbd575060015b505b602480546025546040516001624d3b8760e01b0319815260048101919091526101009091046001600160a01b03169163ffb2c4799101600060405180830381600087803b158015612e0f57600080fd5b505af1925050508015612e20575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e6691815260200190565b60405180910390a3506001949350505050565b600061131c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612aa3565b6028805460ff19166001179055604080516002808252606082018352600092602083019080368337505060065482519293506001600160a01b031691839150600090612f0957612f0961458a565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612f3d57612f3d61458a565b6001600160a01b039283166020918202929092010152601c5460405163b6f9de9560e01b815291169063b6f9de95908590612f83906000908690889042906004016142e2565b6000604051808303818588803b158015612f9c57600080fd5b505af193505050508015612fae575060015b61308157612fba6145b6565b806308c379a014156130115750612fcf6145d2565b80612fda5750613013565b80604051602001612feb91906140ff565b60408051601f198184030181529082905262461bcd60e51b8252610b4c91600401614317565b505b60405162461bcd60e51b815260206004820152603860248201527f4275796261636b206661696c656420776974686f757420616e206572726f722060448201527f6d6573736167652066726f6d2070616e63616b655377617000000000000000006064820152608401610b4c565b604080518481526001600160a01b03841660208201527fe27ecc9c85b6367f7abddc4723456b31bb75434354f83adc03236515846f31e1910160405180910390a150506028805460ff1916905550565b6000806130de8385614438565b90508381101561131c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b4c565b60008261313f57506000610d68565b600061314b838561449e565b905082613158858361447c565b1461131c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b4c565b600061131c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b1c565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600b90915291822054613242918490612aa3565b6001600160a01b038086166000908152600b6020526040808220939093559085168152205461327190836130d1565b6001600160a01b038085166000818152600b602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906132c59086815260200190565b60405180910390a35060019392505050565b600a548111158061330057506001600160a01b0382166000908152600e602052604090205460ff165b6133405760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b4c565b5050565b601d546000906001600160a01b03163314801590613365575060285460ff16155b8015613373575060265460ff165b8015611370575050602754306000908152600b6020526040902054101590565b6028805460ff19166001179055601a54601b546000916133b291610d6e565b6133be576011546133c1565b60005b905060006133e560026123e16015546123e18660275461313090919063ffffffff16565b905060006133fe82602754612e7990919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106134385761343861458a565b6001600160a01b0392831660209182029290920101526006548251911690829060019081106134695761346961458a565b6001600160a01b039283166020918202929092010152601c5460405163791ac94760e01b81524792919091169063791ac947906134b39086906000908790309042906004016143ae565b600060405180830381600087803b1580156134cd57600080fd5b505af19250505080156134de575060015b6135f8576134ea6145b6565b806308c379a0141561356457506134ff6145d2565b8061350a5750613566565b7fc41a20ad8c23d3903584975786330c6ec73ccfcc657629f10237b792268b0e028160405160200161353c9190614144565b60408051601f198184030181529082905261355691614317565b60405180910390a1506138d6565b505b7fc41a20ad8c23d3903584975786330c6ec73ccfcc657629f10237b792268b0e026040516135eb9060208082526039908201527f537761704261636b206661696c656420776974686f757420616e206572726f7260408201527f206d6573736167652066726f6d2070616e63616b655377617000000000000000606082015260800190565b60405180910390a16138d6565b60006136044783612e79565b9050600061361f6136168860026131af565b60155490612e79565b9050600061363460026123e18481878d613130565b90506000613651836123e16013548761313090919063ffffffff16565b9050600061366e846123e16014548861313090919063ffffffff16565b9050602460019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156136c057600080fd5b505af1935050505080156136d2575060015b506019546040516000916001600160a01b03169061753090849084818181858888f193505050503d8060008114613725576040519150601f19603f3d011682016040523d82523d6000602084013e61372a565b606091505b505090508061377b5760405162461bcd60e51b815260206004820152601e60248201527f72656365697665722072656a656374656420455448207472616e7366657200006044820152606401610b4c565b891561389c57601c5460185460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c4016060604051808303818588803b1580156137ec57600080fd5b505af19350505050801561381d575060408051601f3d908101601f1916820190925261381a91810190613ff2565b60015b61385f5760408051600080825260208201527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506910160405180910390a161389c565b5050604080518c8152602081018790527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6040518981527fb39214ef4f33ea2d9d329fb67a4f17e7588bf6e00ed15a7967137ba819697a279060200160405180910390a15050505050505b50506028805460ff19169055505050565b43601f819055604080519182524260208301527f87dcd6626ffde0faf682a10e7b64aff36ea73a5470d5fa6cc7ebd372e4b19001910160405180910390a1565b6001600160a01b0382166000908152600d602052604081205460ff168061396657506001600160a01b0382166000908152600d602052604090205460ff165b806139715750601f54155b1561397e57506000610d68565b6000601e8054806020026020016040519081016040528092919081815260200182805480156139d657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116139b8575b5050505050905060005b8151811015613a6e578181815181106139fb576139fb61458a565b60200260200101516001600160a01b0316856001600160a01b03161480613a4c5750818181518110613a2f57613a2f61458a565b60200260200101516001600160a01b0316846001600160a01b0316145b15613a5c57600192505050610d68565b80613a668161452d565b9150506139e0565b505060245460ff169392505050565b600080613a9c6017546123e1613a95610a6b88613b4a565b8690613130565b306000908152600b6020526040902054909150613ab990826130d1565b306000818152600b6020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613b0a9085815260200190565b60405180910390a3612ad48382612e79565b60008183613b3d5760405162461bcd60e51b8152600401610b4c9190614317565b506000612ad4848661447c565b600080601e805480602002602001604051908101604052809291908181526020018280548015613ba357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613b85575b5050505050905060005b8151811015613c0557818181518110613bc857613bc861458a565b60200260200101516001600160a01b0316846001600160a01b03161415613bf3575060019392505050565b80613bfd8161452d565b915050613bad565b5060009392505050565b80358015158114613c1f57600080fd5b919050565b600082601f830112613c3557600080fd5b813567ffffffffffffffff811115613c4f57613c4f6145a0565b604051613c66601f8301601f191660200182614500565b818152846020838601011115613c7b57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613caa57600080fd5b813561131c8161465c565b60008060408385031215613cc857600080fd5b8235613cd38161465c565b91506020830135613ce38161465c565b809150509250929050565b600080600060608486031215613d0357600080fd5b8335613d0e8161465c565b92506020840135613d1e8161465c565b929592945050506040919091013590565b600080600060408486031215613d4457600080fd5b8335613d4f8161465c565b9250602084013567ffffffffffffffff80821115613d6c57600080fd5b818601915086601f830112613d8057600080fd5b813581811115613d8f57600080fd5b8760208260051b8501011115613da457600080fd5b6020830194508093505050509250925092565b60008060408385031215613dca57600080fd5b8235613dd58161465c565b9150613de360208401613c0f565b90509250929050565b60008060408385031215613dff57600080fd5b8235613e0a8161465c565b91506020830135600a8110613ce357600080fd5b60008060408385031215613e3157600080fd5b8235613e3c8161465c565b9150602083013567ffffffffffffffff811115613e5857600080fd5b613e6485828601613c24565b9150509250929050565b60008060408385031215613e8157600080fd5b8235613e8c8161465c565b946020939093013593505050565b600060208284031215613eac57600080fd5b61131c82613c0f565b60008060408385031215613ec857600080fd5b613e8c83613c0f565b600060208284031215613ee357600080fd5b813567ffffffffffffffff811115613efa57600080fd5b613f0684828501613c24565b949350505050565b60008060408385031215613f2157600080fd5b823567ffffffffffffffff80821115613f3957600080fd5b613f4586838701613c24565b9350602085013591508082168214613f5c57600080fd5b50809150509250929050565b600060208284031215613f7a57600080fd5b5035919050565b60008060408385031215613f9457600080fd5b82359150613de360208401613c0f565b60008060408385031215613fb757600080fd5b50508035926020909101359150565b600080600060608486031215613fdb57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561400757600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c0878903121561403957600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600081518084526020808501945080840160005b8381101561409c5781516001600160a01b031687529582019590820190600101614077565b509495945050505050565b600081518084526140bf8160208601602086016144d4565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b600082516140f58184602087016144d4565b9190910192915050565b7f4275796261636b206661696c65642077697468206572726f722000000000000081526000825161413781601a8501602087016144d4565b91909101601a0192915050565b7f537761704261636b206661696c65642077697468206572726f7220000000000081526000825161417c81601b8501602087016144d4565b91909101601b0192915050565b7f4e6f7420617574686f72697a65642e20596f75206e656564207468652070657281526000602067036b4b9b9b4b7b7160c51b8184015260286000855481600182811c9150808316806141dd57607f831692505b8683108114156141fb57634e487b7160e01b85526022600452602485fd5b80801561420f576001811461422457614255565b60ff1985168a880152838a0187019550614255565b60008b81526020902060005b8581101561424b5781548c82018a0152908401908901614230565b505086848b010195505b50939998505050505050505050565b6001600160a01b038516815260606020820181905281018390528284608083013760006080848301015260006080601f19601f860116830101905082604083015295945050505050565b6001600160a01b03841681526060602082018190526000906142d2908301856140a7565b9050826040830152949350505050565b8481526080602082015260006142fb6080830186614063565b6001600160a01b03949094166040830152506060015292915050565b60208152600061131c60208301846140a7565b60408152600061433d60408301856140a7565b90508260208301529392505050565b60608152600061435f60608301866140a7565b905083602083015267ffffffffffffffff83166040830152949350505050565b6020808252601590820152742832b936b4b9b9b4b7b71034b9903637b1b5b2b21760591b604082015260600190565b85815284602082015260a0604082015260006143cd60a0830186614063565b6001600160a01b0394909416606083015250608001529392505050565b6000808335601e1984360301811261440157600080fd5b83018035915067ffffffffffffffff82111561441c57600080fd5b60200191503681900382131561443157600080fd5b9250929050565b6000821982111561444b5761444b614548565b500190565b600067ffffffffffffffff80831681851680830382111561447357614473614548565b01949350505050565b60008261449957634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156144b8576144b8614548565b500290565b6000828210156144cf576144cf614548565b500390565b60005b838110156144ef5781810151838201526020016144d7565b838111156125cb5750506000910152565b601f8201601f1916810167ffffffffffffffff81118282101715614526576145266145a0565b6040525050565b600060001982141561454157614541614548565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156145cf5760046000803e5060005160e01c5b90565b600060443d10156145e05790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561461057505050505090565b82850191508151818111156146285750505050505090565b843d87010160208285010111156146425750505050505090565b61465160208286010187614500565b509095945050505050565b6001600160a01b038116811461467157600080fd5b5056fe91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a7a2646970667358221220183a1885b4df98068472fca47e994c4050401852562c1efe1da87068713530a164736f6c634300080700336080604052600180546001600160a01b0319908116737130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c179091556002805490911673bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c1790556ec097ce7bc90715b34b9f1000000000600c55610708600d55651b48eb57e000600e5534801561007b57600080fd5b5060405161104638038061104683398101604081905261009a916100f4565b6001600160a01b0381166100c2577310ed43c718714eb63d5aa57b78b54704e256024e6100c4565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610124565b60006020828403121561010657600080fd5b81516001600160a01b038116811461011d57600080fd5b9392505050565b610f13806101336000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610224578063f0fc6bca1461023a578063ffb2c4791461024f578063ffd49c841461026f57600080fd5b8063ce7c2ac2146101af578063d0e30db014610206578063e2d2e2191461020e57600080fd5b80632d48e896116100bb5780632d48e8961461014d5780633a98ef391461016d5780634fab0ae814610183578063997664d71461019957600080fd5b806311ce023d146100e257806314b6ca961461010b57806328fd31981461012d575b600080fd5b3480156100ee57600080fd5b506100f8600c5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b610126366004610cb1565b610285565b005b34801561013957600080fd5b506100f8610148366004610c96565b6103fd565b34801561015957600080fd5b5061012b610168366004610d2f565b610486565b34801561017957600080fd5b506100f860085481565b34801561018f57600080fd5b506100f8600e5481565b3480156101a557600080fd5b506100f860095481565b3480156101bb57600080fd5b506101eb6101ca366004610c96565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104a8565b34801561021a57600080fd5b506100f8600b5481565b34801561023057600080fd5b506100f8600a5481565b34801561024657600080fd5b5061012b6106f5565b34801561025b57600080fd5b5061012b61026a366004610cfd565b610700565b34801561027b57600080fd5b506100f8600d5481565b6000546001600160a01b0316331461029c57600080fd5b6001600160a01b038216600090815260076020526040902054156102c3576102c382610800565b6000811180156102e957506001600160a01b038216600090815260076020526040902054155b1561034f57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169091179055610382565b8015801561037457506001600160a01b03821660009081526007602052604090205415155b15610382576103828261092b565b6001600160a01b0382166000908152600760205260409020546008546103b39183916103ad91610a40565b90610a8b565b6008556001600160a01b03821660009081526007602052604090208190556103da81610aef565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b03811660009081526007602052604081205461042257506000919050565b6001600160a01b03821660009081526007602052604081205461044490610aef565b6001600160a01b038416600090815260076020526040902060010154909150808211610474575060009392505050565b61047e8282610a40565b949350505050565b6000546001600160a01b0316331461049d57600080fd5b600d91909155600e55565b6000546001600160a01b031633146104bf57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561050357600080fd5b505afa158015610517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053b9190610d16565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061058157610581610ec7565b6001600160a01b03928316602091820292909201015260018054835192169183919081106105b1576105b1610ec7565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de959034906105f790600090869030904290600401610d51565b6000604051808303818588803b15801561061057600080fd5b505af1158015610624573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152306004820152600094506106b393508692506001600160a01b03909116906370a082319060240160206040518083038186803b15801561067557600080fd5b505afa158015610689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ad9190610d16565b90610a40565b6009549091506106c39082610a8b565b600955600854600c546106ed916106e4916106de9085610b0c565b90610b8b565b600b5490610a8b565b600b55505050565b6106fe33610800565b565b6000546001600160a01b0316331461071757600080fd5b60045480610723575050565b6000805a905060005b848310801561073a57508381105b156107f95783600f541061074e576000600f555b6107806004600f548154811061076657610766610ec7565b6000918252602090912001546001600160a01b0316610bcd565b156107b7576107b76004600f548154811061079d5761079d610ec7565b6000918252602090912001546001600160a01b0316610800565b6107cc6107c55a8490610a40565b8490610a8b565b92505a600f805491935060006107e183610e80565b919050555080806107f190610e80565b91505061072c565b5050505050565b6001600160a01b0381166000908152600760205260409020546108205750565b600061082b826103fd565b9050801561092757600a546108409082610a8b565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b15801561089157600080fd5b505af11580156108a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c99190610cdb565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546108fd9082610a8b565b6001600160a01b03831660009081526007602052604090206002810191909155546103da90610aef565b5050565b6004805461093b90600190610e69565b8154811061094b5761094b610ec7565b60009182526020808320909101546001600160a01b038481168452600590925260409092205460048054929093169291811061098957610989610ec7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916109d590600190610e69565b815481106109e5576109e5610ec7565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610a1b57610a1b610eb1565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610a8283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c12565b90505b92915050565b600080610a988385610e10565b905083811015610a825760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610a85600c546106de600b5485610b0c90919063ffffffff16565b600082610b1b57506000610a85565b6000610b278385610e4a565b905082610b348583610e28565b14610a825760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ae6565b6000610a8283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610c4c565b600d546001600160a01b03821660009081526006602052604081205490914291610bf79190610e10565b108015610a855750600e54610c0b836103fd565b1192915050565b60008184841115610c365760405162461bcd60e51b8152600401610ae69190610dbb565b506000610c438486610e69565b95945050505050565b60008183610c6d5760405162461bcd60e51b8152600401610ae69190610dbb565b506000610c438486610e28565b80356001600160a01b0381168114610c9157600080fd5b919050565b600060208284031215610ca857600080fd5b610a8282610c7a565b60008060408385031215610cc457600080fd5b610ccd83610c7a565b946020939093013593505050565b600060208284031215610ced57600080fd5b81518015158114610a8257600080fd5b600060208284031215610d0f57600080fd5b5035919050565b600060208284031215610d2857600080fd5b5051919050565b60008060408385031215610d4257600080fd5b50508035926020909101359150565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610d9b5784516001600160a01b031683529383019391830191600101610d76565b50506001600160a01b039690961660408501525050506060015292915050565b600060208083528351808285015260005b81811015610de857858101830151858201604001528201610dcc565b81811115610dfa576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610e2357610e23610e9b565b500190565b600082610e4557634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610e6457610e64610e9b565b500290565b600082821015610e7b57610e7b610e9b565b500390565b6000600019821415610e9457610e94610e9b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea2646970667358221220aeef744a39c1174ab4ed846dd857eb128f9362951ed1f4a9a32c7fb5b42c104f64736f6c63430008070033

Deployed ByteCode Sourcemap

18047:16635:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33757:115;;;;;;;;;;;;;:::i;:::-;;19848:50;;;;;;;;;;;;;;;;;;;21001:25:1;;;20989:2;20974:18;19848:50:0;;;;;;;;10140:157;;;;;;;;;;-1:-1:-1;10140:157:0;;;;;:::i;:::-;;:::i;21235:80::-;;;;;;;;;;-1:-1:-1;21307:5:0;;;;;;;;;;;;-1:-1:-1;;;21307:5:0;;;;21235:80;;;;;;;:::i;11103:389::-;;;;;;;;;;-1:-1:-1;11103:389:0;;;;;:::i;:::-;;:::i;21657:216::-;;;;;;;;;;-1:-1:-1;21657:216:0;;;;;:::i;:::-;;:::i;:::-;;;14089:14:1;;14082:22;14064:41;;14052:2;14037:18;21657:216:0;13924:187:1;33370:150:0;;;;;;;;;;-1:-1:-1;33370:150:0;;;;;:::i;:::-;;:::i;20965:88::-;;;;;;;;;;-1:-1:-1;21038:12:0;;20965:88;;8833:476;;;;;;;;;;-1:-1:-1;8833:476:0;;;;;:::i;:::-;;:::i;7733:293::-;;;;;;;;;;-1:-1:-1;7733:293:0;;;;;:::i;:::-;;:::i;32384:222::-;;;;;;;;;;-1:-1:-1;32384:222:0;;;;;:::i;:::-;;:::i;29662:381::-;;;;;;;;;;-1:-1:-1;29662:381:0;;;;;:::i;:::-;;:::i;22169:364::-;;;;;;;;;;-1:-1:-1;22169:364:0;;;;;:::i;:::-;;:::i;33033:142::-;;;;;;;;;;;;;:::i;32614:222::-;;;;;;;;;;-1:-1:-1;32614:222:0;;;;;:::i;:::-;;:::i;9317:103::-;;;;;;;;;;-1:-1:-1;9317:103:0;;;;;:::i;:::-;9372:4;9407:5;-1:-1:-1;;;;;9396:16:0;;;9407:5;;9396:16;;9317:103;21059:80;;;;;;;;;;-1:-1:-1;21059:80:0;;18501:1;22298:36:1;;22286:2;22271:18;21059:80:0;22156:184:1;34220:142:0;;;;;;;;;;-1:-1:-1;34220:142:0;;;;;:::i;:::-;;:::i;21881:116::-;;;;;;;;;;-1:-1:-1;21881:116:0;;;;;:::i;:::-;;:::i;9622:154::-;;;;;;;;;;-1:-1:-1;9622:154:0;;;;;:::i;:::-;;:::i;19686:41::-;;;;;;;;;;-1:-1:-1;19686:41:0;;;;;;;;30283:184;;;;;;;;;;-1:-1:-1;30283:184:0;;;;;:::i;:::-;;:::i;30872:150::-;;;;;;;;;;-1:-1:-1;30872:150:0;;;;;:::i;:::-;;:::i;28518:335::-;;;;;;;;;;-1:-1:-1;28518:335:0;;;;;:::i;:::-;;:::i;19811:30::-;;;;;;;;;;-1:-1:-1;19811:30:0;;;;;;;;21405:105;;;;;;;;;;-1:-1:-1;21405:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;21489:18:0;21471:7;21489:18;;;:9;:18;;;;;;;21405:105;18590:48;;;;;;;;;;;;;;;;10507:166;;;;;;;;;;-1:-1:-1;10507:166:0;;;;;:::i;:::-;;:::i;8460:361::-;;;;;;;;;;-1:-1:-1;8460:361:0;;;;;:::i;:::-;;:::i;31196:702::-;;;;;;;;;;-1:-1:-1;31196:702:0;;;;;:::i;:::-;;:::i;21321:78::-;;;;;;;;;;-1:-1:-1;21373:7:0;21391:5;-1:-1:-1;;;;;21391:5:0;21321:78;;;-1:-1:-1;;;;;11434:32:1;;;11416:51;;11404:2;11389:18;21321:78:0;11270:203:1;4977:20:0;;;;;;;;;;-1:-1:-1;4977:20:0;;;;-1:-1:-1;;;;;4977:20:0;;;21145:84;;;;;;;;;;-1:-1:-1;21219:7:0;;;;;;;;;;;;-1:-1:-1;;;21219:7:0;;;;21145:84;;10683:406;;;;;;;;;;-1:-1:-1;10683:406:0;;;;;:::i;:::-;;:::i;32844:177::-;;;;;;;;;;-1:-1:-1;32844:177:0;;;;;:::i;:::-;;:::i;34059:153::-;;;;;;;;;;-1:-1:-1;34059:153:0;;;;;:::i;:::-;;:::i;31906:267::-;;;;;;;;;;-1:-1:-1;31906:267:0;;;;;:::i;:::-;;:::i;22005:156::-;;;;;;;;;;-1:-1:-1;22005:156:0;;;;;:::i;:::-;;:::i;8039:408::-;;;;;;;;;;-1:-1:-1;8039:408:0;;;;;:::i;:::-;;:::i;28865:128::-;;;;;;;;;;;;;:::i;19429:22::-;;;;;;;;;;-1:-1:-1;19429:22:0;;;;;:::i;:::-;;:::i;19460:25::-;;;;;;;;;;;;;;;;33620:125;;;;;;;;;;-1:-1:-1;33620:125:0;;;;;:::i;:::-;;:::i;9432:179::-;;;;;;;;;;-1:-1:-1;9432:179:0;;;;;:::i;:::-;;:::i;19196:36::-;;;;;;;;;;-1:-1:-1;19196:36:0;;;;-1:-1:-1;;;;;19196:36:0;;;33183:179;;;;;;;;;;-1:-1:-1;33183:179:0;;;;;:::i;:::-;;:::i;24932:430::-;;;;;;;;;;;;;:::i;21516:133::-;;;;;;;;;;-1:-1:-1;21516:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;21618:19:0;;;21600:7;21618:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;21516:133;32181:195;;;;;;;;;;-1:-1:-1;32181:195:0;;;;;:::i;:::-;;:::i;10311:186::-;;;;;;;;;;-1:-1:-1;10311:186:0;;;;;:::i;:::-;;:::i;19239:35::-;;;;;;;;;;-1:-1:-1;19239:35:0;;;;-1:-1:-1;;;;;19239:35:0;;;33528:80;;;;;;;;;;;;;:::i;24590:334::-;;;;;;;;;;-1:-1:-1;24590:334:0;;;;;:::i;:::-;;:::i;9786:343::-;;;;;;;;;;-1:-1:-1;9786:343:0;;;;;:::i;:::-;;:::i;33884:159::-;;;;;;;;;;-1:-1:-1;33884:159:0;;;;;:::i;:::-;;:::i;30475:389::-;;;;;;;;;;-1:-1:-1;30475:389:0;;;;;:::i;:::-;;:::i;31030:158::-;;;;;;;;;;-1:-1:-1;31030:158:0;;;;;:::i;:::-;;:::i;19367:24::-;;;;;;;;;;-1:-1:-1;19367:24:0;;;;-1:-1:-1;;;;;19367:24:0;;;33757:115;33806:34;7463:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7463:47:0;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;;;;;;;;;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;;33853:5:::1;:11;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;33853:11:0;;;;;-1:-1:-1;;;;;;33853:11:0::1;::::0;;;;;-1:-1:-1;33757:115:0:o;10140:157::-;10225:7;10252:21;10274:14;10252:37;;;;;;:::i;:::-;;;;;;;;;;;;;;10245:44;;10140:157;;;:::o;11103:389::-;11211:39;11235:14;11211:23;:39::i;:::-;11193:15;:57;11185:114;;;;-1:-1:-1;;;11185:114:0;;18824:2:1;11185:114:0;;;18806:21:1;18863:2;18843:18;;;18836:30;18902:34;18882:18;;;18875:62;-1:-1:-1;;;18953:18:1;;;18946:41;19004:19;;11185:114:0;18622:407:1;11185:114:0;11310:17;11330:21;11352:14;11330:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;11418:5;11378:28;;;:17;:28;;;;;;:45;;-1:-1:-1;;11378:45:0;;;11330:37;-1:-1:-1;11439:45:0;;;;11458:14;;11330:37;;11439:45;:::i;:::-;;;;;;;;11174:318;11103:389;:::o;21657:216::-;21761:10;21732:4;21749:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;21749:32:0;;;;;;;;;;:41;;;21806:37;21732:4;;21749:32;;21806:37;;;;21784:6;21001:25:1;;20989:2;20974:18;;20855:177;21806:37:0;;;;;;;;-1:-1:-1;21861:4:0;21657:216;;;;;:::o;33370:150::-;33450:4;33506:6;33474:29;33494:8;33474:19;:29::i;:::-;:38;;33370:150;-1:-1:-1;;;33370:150:0:o;8833:476::-;8945:22;7463:38;;;;;;;;;:47;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;8995:5:0::1;::::0;-1:-1:-1;;;;;8988:12:0;;::::1;8995:5:::0;::::1;8988:12;;8980:48;;;::::0;-1:-1:-1;;;8980:48:0;;17645:2:1;8980:48:0::1;::::0;::::1;17627:21:1::0;17684:2;17664:18;;;17657:30;-1:-1:-1;;;17703:18:1;;;17696:53;17766:18;;8980:48:0::1;17443:347:1::0;8980:48:0::1;9046:9;9041:261;9057:26:::0;;::::1;9041:261;;;9105:17;9125:21;9147:15;;9163:1;9147:18;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;9125:41;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;9181:19:0;::::1;9214:5;9181:19:::0;;;:14:::1;:19:::0;;;;;:30;;;;;;;;:38;;-1:-1:-1;;9181:38:0::1;::::0;;9125:41;-1:-1:-1;9239:51:0::1;9181:19:::0;9260:15;;9276:1;9260:18;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;9280:9;9239:51;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;9085:3:0;::::1;::::0;::::1;:::i;:::-;;;;9041:261;;;;8833:476:::0;;;;:::o;7733:293::-;7819:20;7463:38;;;;:17;:38;;;:47;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;;7852:17:::1;7872:21;7894:14;7872:37;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;7920:19:0;::::1;;::::0;;;7953:4:::1;7920:19:::0;;;;;;:30;;;;;;;;;;:37;;-1:-1:-1;;7920:37:0::1;::::0;;::::1;::::0;;7872;-1:-1:-1;7973:45:0::1;::::0;::::1;::::0;7935:3;;7992:14;;7872:37;;7973:45:::1;:::i;:::-;;;;;;;;7841:185;7733:293:::0;;;:::o;32384:222::-;32474:34;7463:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7463:47:0;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;32521:15:0::1;:25:::0;;;;32557:26:::1;:41:::0;32384:222::o;29662:381::-;29779:34;7463:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7463:47:0;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;29861:1:0::1;29834:23;29846:11:::0;29834:9;:23:::1;:::i;:::-;:28;;:55;;;;;29878:11;29866:9;:23;29834:55;29826:64;;;::::0;::::1;;-1:-1:-1::0;29901:26:0::1;:38:::0;;;;29950:28:::1;:42:::0;30003:23:::1;:32:::0;29662:381::o;22169:364::-;-1:-1:-1;;;;;22289:19:0;;22269:4;22289:19;;;:11;:19;;;;;;;;22309:10;22289:31;;;;;;;;-1:-1:-1;;22289:46:0;22286:180;;22385:69;;;;;;;;;;;-1:-1:-1;;;22385:69:0;;;;;;;;-1:-1:-1;;;;;22385:19:0;;-1:-1:-1;22385:19:0;;;:11;:19;;;;;22405:10;22385:31;;;;;;;;;;:69;;22421:6;;22385:35;:69::i;:::-;-1:-1:-1;;;;;22351:19:0;;;;;;:11;:19;;;;;;;;22371:10;22351:31;;;;;;;:103;22286:180;22485:40;22499:6;22507:9;22518:6;22485:13;:40::i;:::-;22478:47;;22169:364;;;;;;:::o;33033:142::-;33161:4;;-1:-1:-1;;;;;33161:4:0;33086:7;21489:18;;;:9;:18;;;;;;33113:54;;33140:4;;-1:-1:-1;;;;;33140:4:0;21471:7;21489:18;;;:9;:18;;;;;;33113:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;33106:61;;33033:142;:::o;32614:222::-;32716:34;7463:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7463:47:0;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;32763:11:0::1;::::0;;:65:::1;::::0;-1:-1:-1;;;32763:65:0;;::::1;::::0;::::1;15047:25:1::0;;;15088:18;;;15081:34;;;32763:11:0::1;::::0;::::1;-1:-1:-1::0;;;;;32763:11:0::1;::::0;:35:::1;::::0;15020:18:1;;32763:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32614:222:::0;;;:::o;34220:142::-;34285:34;7463:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7463:47:0;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;34332:10:0::1;:22:::0;34220:142::o;21881:116::-;21936:4;21960:29;21968:7;-1:-1:-1;;21960:7:0;:29::i;9622:154::-;-1:-1:-1;;;;;9728:19:0;;9704:4;9728:19;;;:14;:19;;;;;9704:4;9756:10;9748:19;;;;;;;;:::i;:::-;9728:40;;;;;;;;;;;-1:-1:-1;9728:40:0;;;;;9622:154;-1:-1:-1;;;9622:154:0:o;30283:184::-;30342:34;7463:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7463:47:0;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;;30422:4:::1;30407:12;;:19;;;;:::i;:::-;30397:6;:29;;30389:38;;;::::0;::::1;;-1:-1:-1::0;30438:12:0::1;:21:::0;30283:184::o;30872:150::-;30948:25;7463:38;;;;:17;:38;;;:47;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;30986:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;30986:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30872:150::o;28518:335::-;28612:18;7463:38;;;;:17;:38;;;:47;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;28661:4:0::1;::::0;28643:23:::1;::::0;28653:6;;-1:-1:-1;;;;;28661:4:0::1;28643:9;:23::i;:::-;28680:24;28677:169;;;28751:15;28720:28;:46:::0;28810:23:::1;::::0;28786:48:::1;::::0;21001:25:1;;;28786:48:0::1;::::0;20989:2:1;20974:18;28786:48:0::1;;;;;;;28677:169;28518:335:::0;;;:::o;10507:166::-;10576:4;10600:17;:56;10618:21;10640:14;10618:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;10600:56;;;;;;;;;;-1:-1:-1;10600:56:0;:65;;;;;-1:-1:-1;;10507:166:0:o;8460:361::-;8548:22;7463:38;;;;;;;;;:47;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;8598:5:0::1;::::0;-1:-1:-1;;;;;8591:12:0;;::::1;8598:5:::0;::::1;8591:12;;8583:48;;;::::0;-1:-1:-1;;;8583:48:0;;17645:2:1;8583:48:0::1;::::0;::::1;17627:21:1::0;17684:2;17664:18;;;17657:30;-1:-1:-1;;;17703:18:1;;;17696:53;17766:18;;8583:48:0::1;17443:347:1::0;8583:48:0::1;8644:17;8664:21;8686:14;8664:37;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;8712:19:0;::::1;8745:5;8712:19:::0;;;:14:::1;:19:::0;;;;;:30;;;;;;;;;:38;;-1:-1:-1;;8712:38:0::1;::::0;;8664:37;-1:-1:-1;8766:47:0::1;::::0;::::1;::::0;8727:3;;8787:14;;8664:37;;8766:47:::1;:::i;31196:702::-:0;31375:34;7463:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7463:47:0;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;31422:12:0::1;:28:::0;;;31461:10:::1;:24:::0;;;31496:13:::1;:30:::0;;;31537:12:::1;:28:::0;;;31590:69:::1;31552:13:::0;31590:50:::1;31512:14:::0;31590:50;31437:13;31474:11;31590:17:::1;:30::i;:::-;:34:::0;::::1;:50::i;:69::-;31576:11;:83:::0;31670:14:::1;:32:::0;;;31713:12:::1;:28:::0;;;31775:19:::1;31792:2;31687:15:::0;31775:19:::1;:::i;:::-;31760:11;;:34;;31752:63;;;::::0;-1:-1:-1;;;31752:63:0;;16941:2:1;31752:63:0::1;::::0;::::1;16923:21:1::0;16980:2;16960:18;;;16953:30;-1:-1:-1;;;16999:18:1;;;16992:46;17055:18;;31752:63:0::1;16739:340:1::0;31752:63:0::1;31867:1;31850:14;;:18;;;;:::i;:::-;31834:12;;:34;;31826:64;;;::::0;-1:-1:-1;;;31826:64:0;;20285:2:1;31826:64:0::1;::::0;::::1;20267:21:1::0;20324:2;20304:18;;;20297:30;-1:-1:-1;;;20343:18:1;;;20336:47;20400:18;;31826:64:0::1;20083:341:1::0;10683:406:0;10779:26;7463:38;;;;:17;:38;;;:47;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;;10818:17:::1;10838:21;10860:14;10838:37;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;;-1:-1:-1;10886:17:0::1;10906:30;10932:4:::0;10913:15:::1;10906:30;:::i;:::-;10978:32;::::0;;;;::::1;::::0;;10993:4:::1;10978:32:::0;;::::1;::::0;;::::1;;::::0;;::::1;::::0;;;-1:-1:-1;10947:28:0;;;:17:::1;:28:::0;;;;;;:63;;;;;;-1:-1:-1;;10947:63:0;;;;::::1;;-1:-1:-1::0;;10947:63:0;;::::1;::::0;;;::::1;;;::::0;;11026:55;10978:32;;-1:-1:-1;11026:55:0::1;::::0;::::1;::::0;11043:14;;10947:28;;10978:32;;11026:55:::1;:::i;:::-;;;;;;;;10807:282;;10683:406:::0;;;:::o;32844:177::-;32912:34;7463:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7463:47:0;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;;32974:7:::1;32967:3;:14;;32959:23;;;::::0;::::1;;-1:-1:-1::0;32993:14:0::1;:20:::0;32844:177::o;34059:153::-;34139:20;7463:38;;;;:17;:38;;;:47;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;34172:18:0;;;::::1;;::::0;;;:13:::1;:18;::::0;;;;:32;;-1:-1:-1;;34172:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34059:153::o;31906:267::-;32017:34;7463:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7463:47:0;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;32064:21:0::1;:46:::0;;-1:-1:-1;;;;;32064:46:0;;::::1;-1:-1:-1::0;;;;;;32064:46:0;;::::1;;::::0;;;32121:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;31906:267::o;22005:156::-;22085:4;22109:44;22123:10;22135:9;22146:6;22109:13;:44::i;8039:408::-;8149:20;7463:38;;;;:17;:38;;;:47;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;;8187:9:::1;8182:258;8198:26:::0;;::::1;8182:258;;;8246:17;8266:21;8288:15;;8304:1;8288:18;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;8266:41;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;8322:19:0;::::1;;::::0;;;8355:4:::1;8322:19:::0;;;;;;:30;;;;;;;;;;:37;;-1:-1:-1;;8322:37:0::1;::::0;;::::1;::::0;;;8266:41;-1:-1:-1;8379:49:0::1;8322:19:::0;8398:15;;8414:1;8398:18;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;8418:9;8379:49;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;8226:3:0;::::1;::::0;::::1;:::i;:::-;;;;8182:258;;28865:128:::0;28922:18;7463:38;;;;:17;:38;;;:47;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;28984:1:0::1;28953:28;:32:::0;28865:128::o;19429:22::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19429:22:0;;-1:-1:-1;19429:22:0;:::o;33620:125::-;33674:34;7463:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7463:47:0;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;33721:5:0::1;:16:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;33721:16:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;33721:16:0::1;-1:-1:-1::0;;;;;33721:16:0;;;::::1;::::0;;;::::1;::::0;;33620:125::o;9432:179::-;-1:-1:-1;;;;;9545:19:0;;9521:4;9545:19;;;:14;:19;;;;;;9565:37;;9521:4;;9565:21;;:37;;9587:14;;9565:37;:::i;:::-;;;;;;;;;;;;;;;;;9545:58;;;;;;;;;;-1:-1:-1;9545:58:0;;;;;9432:179;-1:-1:-1;;;9432:179:0:o;33183:::-;33251:7;33278:76;33331:22;:20;:22::i;:::-;33301:16;;-1:-1:-1;;;;;33301:16:0;21471:7;21489:18;;;:9;:18;;;;;;33278:48;;33291:34;;33323:1;33291:31;:34::i;:::-;33278:8;;:12;:48::i;:::-;:52;;:76::i;24932:430::-;24981:7;25001:13;25017:12;;25001:28;;25040:21;25064:78;25126:15;25064:57;25097:23;;25064:28;;:32;;:57;;;;:::i;:78::-;25040:102;;25153:19;25175:88;25254:8;25175:74;25220:28;;25175:40;25188:26;;25175:8;:12;;:40;;;;:::i;:88::-;25153:110;;25281:73;25294:59;25329:23;;25294:30;25310:13;25294:11;:15;;:30;;;;:::i;:59::-;25281:8;;:12;:73::i;:::-;25274:80;;;;;24932:430;:::o;32181:195::-;32265:34;7463:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7463:47:0;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;32312:11:0::1;:22:::0;;-1:-1:-1;;32312:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;32345:13:::1;:23:::0;32181:195::o;10311:186::-;10395:7;10422:17;:56;10440:21;10462:14;10440:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;10422:56;;;;;;;;;;-1:-1:-1;10422:56:0;:67;;;;;;;;-1:-1:-1;;10311:186:0:o;33528:80::-;33573:11;;;;;;;;;-1:-1:-1;;;;;33573:11:0;-1:-1:-1;;;;;33573:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33528:80::o;24590:334::-;24646:7;24687:12;24669:10;;24682:1;24669:14;;;;:::i;:::-;:30;24666:67;;24709:14;;:21;;24728:1;24709:18;:21::i;24666:67::-;24746:7;:86;;;;;24817:15;24757:57;24790:23;;24757:28;;:32;;:57;;;;:::i;:::-;:75;24746:86;24743:120;;;24842:18;:16;:18::i;24743:120::-;24880:7;:36;;24905:11;;24880:36;;;-1:-1:-1;;24890:12:0;;;24590:334::o;9786:343::-;9372:4;9407:5;-1:-1:-1;;;;;9407:5:0;7338:10;9396:16;7322:51;;;;-1:-1:-1;;;7322:51:0;;19236:2:1;7322:51:0;;;19218:21:1;19275:2;19255:18;;;19248:30;-1:-1:-1;;;19294:18:1;;;19287:49;19353:18;;7322:51:0;19034:343:1;7322:51:0;9862:16:::1;9881:5:::0;;-1:-1:-1;;;;;9897:11:0;;::::1;-1:-1:-1::0;;;;;;9897:11:0;::::1;;::::0;;9881:5:::1;::::0;9919:150:::1;5150:2;9935:1;:19;9919:150;;;-1:-1:-1::0;;;;;9976:24:0;;::::1;10006:5;9976:24:::0;;;:14:::1;:24;::::0;;;;;;;:27;;;;;;;;:35;;-1:-1:-1;;9976:35:0;;::::1;::::0;;;10041:5;;;;::::1;10026:21:::0;;;;;;;;:24;;;;;;;;;:31;;;;::::1;;::::0;;10001:1;9956:3:::1;10001:1:::0;9956:3:::1;:::i;:::-;;;;9919:150;;;-1:-1:-1::0;10115:5:0::1;::::0;10084:37:::1;::::0;;-1:-1:-1;;;;;11708:15:1;;;11690:34;;10115:5:0;;::::1;11755:2:1::0;11740:18;;11733:43;10084:37:0::1;::::0;11625:18:1;10084:37:0::1;11478:304:1::0;33884:159:0;33956:34;7463:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7463:47:0;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;34003:21:0::1;:32:::0;;-1:-1:-1;;34003:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33884:159::o;30475:389::-;30556:25;7463:38;;;;:17;:38;;;:47;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;30602:23:0;::::1;30620:4;30602:23;::::0;::::1;::::0;:53:::1;;-1:-1:-1::0;30639:16:0::1;::::0;-1:-1:-1;;;;;30629:26:0;;::::1;30639:16:::0;::::1;30629:26;;30602:53;30594:62;;;::::0;::::1;;-1:-1:-1::0;;;;;30667:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;30667:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;30711:146:::1;;30736:11;::::0;;:31:::1;::::0;-1:-1:-1;;;30736:31:0;;-1:-1:-1;;;;;11987:32:1;;;30736:31:0::1;::::0;::::1;11969:51:1::0;30765:1:0::1;12036:18:1::0;;;12029:34;;;;30736:11:0::1;::::0;;::::1;::::0;;::::1;::::0;:20:::1;::::0;11942:18:1;;30736:31:0::1;11787:282:1::0;30711:146:0::1;30798:11;::::0;;-1:-1:-1;;;;;30827:17:0;;::::1;;::::0;;;:9:::1;:17;::::0;;;;;;;30798:47;;-1:-1:-1;;;30798:47:0;;::::1;::::0;::::1;11969:51:1::0;;;;12036:18;;;12029:34;;;;30798:11:0::1;::::0;;::::1;;::::0;:20:::1;::::0;11942:18:1;;30798:47:0::1;11787:282:1::0;31030:158:0;31110:25;7463:38;;;;:17;:38;;;:47;;;7462:48;7454:82;;;;-1:-1:-1;;;7454:82:0;;;;;;;:::i;:::-;7555:39;7571:10;7583;7555:15;:39::i;:::-;7664:21;:42;7694:10;7686:19;;;;;;;;:::i;:::-;7664:42;;;;;;;;;;;7603:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7547:162;;;;;-1:-1:-1;;;7547:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;31148:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;31148:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31030:158::o;1295:192::-;1381:7;1417:12;1409:6;;;;1401:29;;;;-1:-1:-1;;;1401:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1441:9:0;1453:5;1457:1;1453;:5;:::i;:::-;1441:17;1295:192;-1:-1:-1;;;;;1295:192:0:o;22541:1095::-;-1:-1:-1;;;;;22659:21:0;;22633:4;22659:21;;;:13;:21;;;;;;;;22658:22;22650:57;;;;-1:-1:-1;;;22650:57:0;;19584:2:1;22650:57:0;;;19566:21:1;19623:2;19603:18;;;19596:30;-1:-1:-1;;;19642:18:1;;;19635:52;19704:18;;22650:57:0;19382:346:1;22650:57:0;22723:6;;;;22720:63;;;22739:41;22754:6;22762:9;22773:6;22739:14;:41::i;:::-;22732:48;;;;22720:63;22803:28;22816:6;22824;22803:12;:28::i;:::-;22847:16;:14;:16::i;:::-;22844:35;;;22866:10;:8;:10::i;:::-;30118;;:15;;;22894:44;;-1:-1:-1;22922:16:0;;-1:-1:-1;;;;;22909:29:0;;;22922:16;;22909:29;22894:44;22891:93;;;-1:-1:-1;;;;;22949:17:0;;22969:1;22949:17;;;:9;:17;;;;;;22941:30;;;;;;22973:8;:6;:8::i;:::-;23016:53;;;;;;;;;;;-1:-1:-1;;;23016:53:0;;;;;;;;-1:-1:-1;;;;;23016:17:0;;-1:-1:-1;23016:17:0;;;:9;:17;;;;;;;;:53;;23038:6;;23016:21;:53::i;:::-;-1:-1:-1;;;;;22996:17:0;;;;;;:9;:17;;;;;:73;;;;23107:32;23006:6;23129:9;23107:13;:32::i;:::-;:78;;23179:6;23107:78;;;23142:34;23150:6;23158:9;23169:6;23142:7;:34::i;:::-;-1:-1:-1;;;;;23219:20:0;;;;;;:9;:20;;;;;;23082:103;;-1:-1:-1;23219:40:0;;23082:103;23219:24;:40::i;:::-;-1:-1:-1;;;;;23196:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;23276:24;;;;;:16;:24;;;;;;;23272:96;;23307:11;;;-1:-1:-1;;;;;23336:17:0;;;;;;;:9;:17;;;;;;;;23307:47;;-1:-1:-1;;;23307:47:0;;;;;11969:51:1;;;;12036:18;;;12029:34;;;;23307:11:0;;;;;;:20;;11942:18:1;;23307:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23303:63;;-1:-1:-1;;;;;23382:27:0;;;;;;:16;:27;;;;;;;;23378:105;;23416:11;;;-1:-1:-1;;;;;23448:20:0;;;;;;;:9;:20;;;;;;;;23416:53;;-1:-1:-1;;;23416:53:0;;;;;11969:51:1;;;;12036:18;;;12029:34;;;;23416:11:0;;;;;;:20;;11942:18:1;;23416:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23412:69;;23499:11;;;23519:14;;23499:35;;-1:-1:-1;;;;;;23499:35:0;;;;;21001:25:1;;;;23499:11:0;;;;-1:-1:-1;;;;;23499:11:0;;:19;;20974:18:1;23499:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23495:51;23580:9;-1:-1:-1;;;;;23563:43:0;23572:6;-1:-1:-1;;;;;23563:43:0;;23591:14;23563:43;;;;21001:25:1;;20989:2;20974:18;;20855:177;23563:43:0;;;;;;;;-1:-1:-1;23624:4:0;;22541:1095;-1:-1:-1;;;;22541:1095:0:o;1153:136::-;1211:7;1238:43;1242:1;1245;1238:43;;;;;;;;;;;;;;;;;:3;:43::i;29001:653::-;19954:6;:13;;-1:-1:-1;;19954:13:0;19963:4;19954:13;;;29101:16:::1;::::0;;29115:1:::1;29101:16:::0;;;;;::::1;::::0;;-1:-1:-1;;29101:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;29138:4:0::1;::::0;29128:7;;;;-1:-1:-1;;;;;;29138:4:0::1;::::0;29128:7;;-1:-1:-1;29138:4:0::1;::::0;29128:7:::1;;;;:::i;:::-;;;;;;:14;-1:-1:-1::0;;;;;29128:14:0::1;;;-1:-1:-1::0;;;;;29128:14:0::1;;;::::0;::::1;29171:4;29153;29158:1;29153:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29153:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;29193:6:::1;::::0;:167:::1;::::0;-1:-1:-1;;;29193:167:0;;:6;::::1;::::0;:57:::1;::::0;29259:6;;29193:167:::1;::::0;:6:::1;::::0;29298:4;;29317:2;;29334:15:::1;::::0;29193:167:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;29189:458;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;29526:6;29479:54;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;29479:54:0;;::::1;::::0;;;;;;;-1:-1:-1;;;29465:70:0;;::::1;::::0;::::1;;;:::i;29189:458::-;;;29569:66;::::0;-1:-1:-1;;;29569:66:0;;17997:2:1;29569:66:0::1;::::0;::::1;17979:21:1::0;18036:2;18016:18;;;18009:30;18075:34;18055:18;;;18048:62;18146:26;18126:18;;;18119:54;18190:19;;29569:66:0::1;17795:420:1::0;29189:458:0::1;29381:22;::::0;;21211:25:1;;;-1:-1:-1;;;;;21272:32:1;;21267:2;21252:18;;21245:60;29381:22:0::1;::::0;21184:18:1;29381:22:0::1;;;;;;;-1:-1:-1::0;;19972:6:0;:14;;-1:-1:-1;;19972:14:0;;;-1:-1:-1;29001:653:0:o;966:181::-;1024:7;;1056:5;1060:1;1056;:5;:::i;:::-;1044:17;;1085:1;1080;:6;;1072:46;;;;-1:-1:-1;;;1072:46:0;;16585:2:1;1072:46:0;;;16567:21:1;16624:2;16604:18;;;16597:30;16663:29;16643:18;;;16636:57;16710:18;;1072:46:0;16383:351:1;1493:250:0;1551:7;1575:6;1571:47;;-1:-1:-1;1605:1:0;1598:8;;1571:47;1630:9;1642:5;1646:1;1642;:5;:::i;:::-;1630:17;-1:-1:-1;1675:1:0;1666:5;1670:1;1630:17;1666:5;:::i;:::-;:10;1658:56;;;;-1:-1:-1;;;1658:56:0;;18422:2:1;1658:56:0;;;18404:21:1;18461:2;18441:18;;;18434:30;18500:34;18480:18;;;18473:62;-1:-1:-1;;;18551:18:1;;;18544:31;18592:19;;1658:56:0;18220:397:1;1749:132:0;1807:7;1834:39;1838:1;1841;1834:39;;;;;;;;;;;;;;;;;:3;:39::i;23648:330::-;23778:53;;;;;;;;;;;-1:-1:-1;;;23778:53:0;;;;;;;;-1:-1:-1;;;;;23778:17:0;;23741:4;23778:17;;;:9;:17;;;;;;;:53;;23800:6;;23778:21;:53::i;:::-;-1:-1:-1;;;;;23758:17:0;;;;;;;:9;:17;;;;;;:73;;;;23865:20;;;;;;;:32;;23890:6;23865:24;:32::i;:::-;-1:-1:-1;;;;;23842:20:0;;;;;;;:9;:20;;;;;;;:55;;;;23913:35;;;;;;;;;;23941:6;21001:25:1;;20989:2;20974:18;;20855:177;23913:35:0;;;;;;;;-1:-1:-1;23966:4:0;23648:330;;;;;:::o;23986:166::-;24083:12;;24073:6;:22;;:49;;;-1:-1:-1;;;;;;24099:23:0;;;;;;:15;:23;;;;;;;;24073:49;24065:79;;;;-1:-1:-1;;;24065:79:0;;16239:2:1;24065:79:0;;;16221:21:1;16278:2;16258:18;;;16251:30;-1:-1:-1;;;16297:18:1;;;16290:47;16354:18;;24065:79:0;16037:341:1;24065:79:0;23986:166;;:::o;26031:209::-;26118:16;;26080:4;;-1:-1:-1;;;;;26118:16:0;26104:10;:30;;;;:50;;-1:-1:-1;26148:6:0;;;;26147:7;26104:50;:74;;;;-1:-1:-1;26167:11:0;;;;26104:74;:128;;;;-1:-1:-1;;26219:13:0;;26209:4;26191:24;;;;:9;:24;;;;;;:41;;;26031:209::o;26248:2262::-;19954:6;:13;;-1:-1:-1;;19954:13:0;19963:4;19954:13;;;26343:15:::1;::::0;26360:26:::1;::::0;19954:6;;26327:60:::1;::::0;:15:::1;:60::i;:::-;:79;;26394:12;;26327:79;;;26390:1;26327:79;26297:109;;26417:23;26443:62;26503:1;26443:55;26486:11;;26443:38;26461:19;26443:13;;:17;;:38;;;;:::i;:62::-;26417:88;;26516:20;26539:34;26557:15;26539:13;;:17;;:34;;;;:::i;:::-;26610:16;::::0;;26624:1:::1;26610:16:::0;;;;;::::1;::::0;;26516:57;;-1:-1:-1;26586:21:0::1;::::0;26610:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26610:16:0::1;26586:40;;26655:4;26637;26642:1;26637:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26637:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;26681:4:::1;::::0;26671:7;;26681:4;::::1;::::0;26671;;26681;;26671:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;26671:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;26760:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;26760:188:0;;26722:21:::1;::::0;26760:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;26832:12;;26698:21:::1;::::0;26875:4;;26902::::1;::::0;26922:15:::1;::::0;26760:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;26756:1747;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;28303:74;28373:1;28325:50;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;28325:50:0;;::::1;::::0;;;;;;;28303:74:::1;::::0;::::1;:::i;:::-;;;;;;;;28254:135;26756:1747;;;;;28416:75;;;;;20631:2:1::0;20613:21;;;20670:2;20650:18;;;20643:30;20709:34;20704:2;20689:18;;20682:62;20780:27;20775:2;20760:18;;20753:55;20840:3;20825:19;;20429:421;28416:75:0::1;;;;;;;;26756:1747;;;26966:17;26986:40;:21;27012:13:::0;26986:25:::1;:40::i;:::-;26966:60:::0;-1:-1:-1;27043:19:0::1;27065:43;27081:26;:19:::0;27105:1:::1;27081:23;:26::i;:::-;27065:11;::::0;;:15:::1;:43::i;:::-;27043:65:::0;-1:-1:-1;27125:26:0::1;27154:58;27210:1;27154:51;27043:65:::0;27154:51;:9;27168:19;27154:13:::1;:34::i;:58::-;27125:87;;27227:27;27257:45;27290:11;27257:28;27271:13;;27257:9;:13;;:28;;;;:::i;:45::-;27227:75;;27317:26;27346:44;27378:11;27346:27;27360:12;;27346:9;:13;;:27;;;;:::i;:44::-;27317:73;;27411:11;;;;;;;;;-1:-1:-1::0;;;;;27411:11:0::1;-1:-1:-1::0;;;;;27411:19:0::1;;27438;27411:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;27536:20:0::1;::::0;27528:77:::1;::::0;27487:12:::1;::::0;-1:-1:-1;;;;;27536:20:0::1;::::0;27595:5:::1;::::0;27570:18;;27487:12;27528:77;27487:12;27528:77;27570:18;27536:20;27595:5;27528:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27486:119;;;27628:7;27620:50;;;::::0;-1:-1:-1;;;27620:50:0;;17286:2:1;27620:50:0::1;::::0;::::1;17268:21:1::0;17325:2;17305:18;;;17298:30;17364:32;17344:18;;;17337:60;17414:18;;27620:50:0::1;17084:354:1::0;27620:50:0::1;27690:19:::0;;27687:504:::1;;27733:6;::::0;27929:21:::1;::::0;27733:274:::1;::::0;-1:-1:-1;;;27733:274:0;;27815:4:::1;27733:274;::::0;::::1;13653:34:1::0;13703:18;;;13696:34;;;27733:6:0::1;13746:18:1::0;;;13739:34;;;13789:18;;;13782:34;-1:-1:-1;;;;;27929:21:0;;::::1;13832:19:1::0;;;13825:44;27973:15:0::1;13885:19:1::0;;;13878:35;27733:6:0;::::1;::::0;:22:::1;::::0;27764:18;;13587:19:1;;27733:274:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;-1:-1:-1::0;27733:274:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;27733:274:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;27729:447;;28139:17;::::0;;28151:1:::1;15047:25:1::0;;;15103:2;15088:18;;15081:34;28139:17:0::1;::::0;15020:18:1;28139:17:0::1;;;;;;;27729:447;;;-1:-1:-1::0;;28036:48:0::1;::::0;;15047:25:1;;;15103:2;15088:18;;15081:34;;;28036:48:0::1;::::0;-1:-1:-1;15020:18:1;28036:48:0::1;;;;;;;27729:447;28212:29;::::0;21001:25:1;;;28212:29:0::1;::::0;20989:2:1;20974:18;28212:29:0::1;;;;;;;26949:1304;;;;;;26756:1747;-1:-1:-1::0;;19972:6:0;:14;;-1:-1:-1;;19972:14:0;;;-1:-1:-1;;;26248:2262:0:o;30149:126::-;30200:12;30187:10;:25;;;30228:39;;;15047:25:1;;;30251:15:0;15103:2:1;15088:18;;15081:34;30228:39:0;;15020:18:1;30228:39:0;;;;;;;30149:126::o;24160:422::-;-1:-1:-1;;;;;24262:19:0;;24241:4;24262:19;;;:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;24285:22:0;;;;;;:11;:22;;;;;;;;24262:45;:60;;;-1:-1:-1;30118:10:0;;:15;24262:60;24258:78;;;-1:-1:-1;24331:5:0;24324:12;;24258:78;24349:25;24377:5;24349:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24349:33:0;;;;;;;;;;;;;;;;;;;;;;;24400:9;24395:139;24419:8;:15;24415:1;:19;24395:139;;;24470:8;24479:1;24470:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;24460:21:0;:6;-1:-1:-1;;;;;24460:21:0;;:49;;;;24498:8;24507:1;24498:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;24485:24:0;:9;-1:-1:-1;;;;;24485:24:0;;24460:49;24456:66;;;24518:4;24511:11;;;;;;24456:66;24436:3;;;;:::i;:::-;;;;24395:139;;;-1:-1:-1;;24553:21:0;;;;;24160:422;-1:-1:-1;;;24160:422:0:o;25370:374::-;25456:7;25476:17;25496:62;25543:14;;25496:42;25507:30;25519:17;25526:9;25519:6;:17::i;25507:30::-;25496:6;;:10;:42::i;:62::-;25616:4;25598:24;;;;:9;:24;;;;;;25476:82;;-1:-1:-1;25598:39:0;;25476:82;25598:28;:39::i;:::-;25589:4;25571:24;;;;:9;:24;;;;;;;:66;;;;25653:42;;-1:-1:-1;;;;;25653:42:0;;;;;;;25685:9;21001:25:1;;20989:2;20974:18;;20855:177;25653:42:0;;;;;;;;25715:21;:6;25726:9;25715:10;:21::i;1887:345::-;1973:7;2075:12;2068:5;2060:28;;;;-1:-1:-1;;;2060:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2099:9:0;2111:5;2115:1;2111;:5;:::i;25760:263::-;25818:4;25835:25;25863:5;25835:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25835:33:0;;;;;;;;;;;;;;;;;;;;;;;25884:9;25879:114;25903:8;:15;25899:1;:19;25879:114;;;25957:8;25966:1;25957:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;25944:24:0;:9;-1:-1:-1;;;;;25944:24:0;;25940:41;;;-1:-1:-1;25977:4:0;;25760:263;-1:-1:-1;;;25760:263:0:o;25940:41::-;25920:3;;;;:::i;:::-;;;;25879:114;;;-1:-1:-1;26010:5:0;;25760:263;-1:-1:-1;;;25760:263:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:556::-;222:5;275:3;268:4;260:6;256:17;252:27;242:55;;293:1;290;283:12;242:55;329:6;316:20;355:18;351:2;348:26;345:52;;;377:18;;:::i;:::-;426:2;420:9;438:67;493:2;474:13;;-1:-1:-1;;470:27:1;499:4;466:38;420:9;438:67;:::i;:::-;529:2;521:6;514:18;575:3;568:4;563:2;555:6;551:15;547:26;544:35;541:55;;;592:1;589;582:12;541:55;656:2;649:4;641:6;637:17;630:4;622:6;618:17;605:54;703:1;679:15;;;696:4;675:26;668:37;;;;683:6;179:556;-1:-1:-1;;;179:556:1:o;740:247::-;799:6;852:2;840:9;831:7;827:23;823:32;820:52;;;868:1;865;858:12;820:52;907:9;894:23;926:31;951:5;926:31;:::i;1252:388::-;1320:6;1328;1381:2;1369:9;1360:7;1356:23;1352:32;1349:52;;;1397:1;1394;1387:12;1349:52;1436:9;1423:23;1455:31;1480:5;1455:31;:::i;:::-;1505:5;-1:-1:-1;1562:2:1;1547:18;;1534:32;1575:33;1534:32;1575:33;:::i;:::-;1627:7;1617:17;;;1252:388;;;;;:::o;1645:456::-;1722:6;1730;1738;1791:2;1779:9;1770:7;1766:23;1762:32;1759:52;;;1807:1;1804;1797:12;1759:52;1846:9;1833:23;1865:31;1890:5;1865:31;:::i;:::-;1915:5;-1:-1:-1;1972:2:1;1957:18;;1944:32;1985:33;1944:32;1985:33;:::i;:::-;1645:456;;2037:7;;-1:-1:-1;;;2091:2:1;2076:18;;;;2063:32;;1645:456::o;2106:762::-;2213:6;2221;2229;2282:2;2270:9;2261:7;2257:23;2253:32;2250:52;;;2298:1;2295;2288:12;2250:52;2337:9;2324:23;2356:31;2381:5;2356:31;:::i;:::-;2406:5;-1:-1:-1;2462:2:1;2447:18;;2434:32;2485:18;2515:14;;;2512:34;;;2542:1;2539;2532:12;2512:34;2580:6;2569:9;2565:22;2555:32;;2625:7;2618:4;2614:2;2610:13;2606:27;2596:55;;2647:1;2644;2637:12;2596:55;2687:2;2674:16;2713:2;2705:6;2702:14;2699:34;;;2729:1;2726;2719:12;2699:34;2782:7;2777:2;2767:6;2764:1;2760:14;2756:2;2752:23;2748:32;2745:45;2742:65;;;2803:1;2800;2793:12;2742:65;2834:2;2830;2826:11;2816:21;;2856:6;2846:16;;;;;2106:762;;;;;:::o;2873:315::-;2938:6;2946;2999:2;2987:9;2978:7;2974:23;2970:32;2967:52;;;3015:1;3012;3005:12;2967:52;3054:9;3041:23;3073:31;3098:5;3073:31;:::i;:::-;3123:5;-1:-1:-1;3147:35:1;3178:2;3163:18;;3147:35;:::i;:::-;3137:45;;2873:315;;;;;:::o;3193:412::-;3275:6;3283;3336:2;3324:9;3315:7;3311:23;3307:32;3304:52;;;3352:1;3349;3342:12;3304:52;3391:9;3378:23;3410:31;3435:5;3410:31;:::i;:::-;3460:5;-1:-1:-1;3517:2:1;3502:18;;3489:32;3552:2;3540:15;;3530:43;;3569:1;3566;3559:12;3610:457;3688:6;3696;3749:2;3737:9;3728:7;3724:23;3720:32;3717:52;;;3765:1;3762;3755:12;3717:52;3804:9;3791:23;3823:31;3848:5;3823:31;:::i;:::-;3873:5;-1:-1:-1;3929:2:1;3914:18;;3901:32;3956:18;3945:30;;3942:50;;;3988:1;3985;3978:12;3942:50;4011;4053:7;4044:6;4033:9;4029:22;4011:50;:::i;:::-;4001:60;;;3610:457;;;;;:::o;4072:315::-;4140:6;4148;4201:2;4189:9;4180:7;4176:23;4172:32;4169:52;;;4217:1;4214;4207:12;4169:52;4256:9;4243:23;4275:31;4300:5;4275:31;:::i;:::-;4325:5;4377:2;4362:18;;;;4349:32;;-1:-1:-1;;;4072:315:1:o;4392:180::-;4448:6;4501:2;4489:9;4480:7;4476:23;4472:32;4469:52;;;4517:1;4514;4507:12;4469:52;4540:26;4556:9;4540:26;:::i;4577:248::-;4642:6;4650;4703:2;4691:9;4682:7;4678:23;4674:32;4671:52;;;4719:1;4716;4709:12;4671:52;4742:26;4758:9;4742:26;:::i;4830:322::-;4899:6;4952:2;4940:9;4931:7;4927:23;4923:32;4920:52;;;4968:1;4965;4958:12;4920:52;5008:9;4995:23;5041:18;5033:6;5030:30;5027:50;;;5073:1;5070;5063:12;5027:50;5096;5138:7;5129:6;5118:9;5114:22;5096:50;:::i;:::-;5086:60;4830:322;-1:-1:-1;;;;4830:322:1:o;5157:499::-;5234:6;5242;5295:2;5283:9;5274:7;5270:23;5266:32;5263:52;;;5311:1;5308;5301:12;5263:52;5351:9;5338:23;5380:18;5421:2;5413:6;5410:14;5407:34;;;5437:1;5434;5427:12;5407:34;5460:50;5502:7;5493:6;5482:9;5478:22;5460:50;:::i;:::-;5450:60;;5560:2;5549:9;5545:18;5532:32;5519:45;;5604:2;5597:5;5593:14;5586:5;5583:25;5573:53;;5622:1;5619;5612:12;5573:53;;5645:5;5635:15;;;5157:499;;;;;:::o;5661:180::-;5720:6;5773:2;5761:9;5752:7;5748:23;5744:32;5741:52;;;5789:1;5786;5779:12;5741:52;-1:-1:-1;5812:23:1;;5661:180;-1:-1:-1;5661:180:1:o;5846:248::-;5911:6;5919;5972:2;5960:9;5951:7;5947:23;5943:32;5940:52;;;5988:1;5985;5978:12;5940:52;6024:9;6011:23;6001:33;;6053:35;6084:2;6073:9;6069:18;6053:35;:::i;6099:248::-;6167:6;6175;6228:2;6216:9;6207:7;6203:23;6199:32;6196:52;;;6244:1;6241;6234:12;6196:52;-1:-1:-1;;6267:23:1;;;6337:2;6322:18;;;6309:32;;-1:-1:-1;6099:248:1:o;6352:316::-;6429:6;6437;6445;6498:2;6486:9;6477:7;6473:23;6469:32;6466:52;;;6514:1;6511;6504:12;6466:52;-1:-1:-1;;6537:23:1;;;6607:2;6592:18;;6579:32;;-1:-1:-1;6658:2:1;6643:18;;;6630:32;;6352:316;-1:-1:-1;6352:316:1:o;6673:306::-;6761:6;6769;6777;6830:2;6818:9;6809:7;6805:23;6801:32;6798:52;;;6846:1;6843;6836:12;6798:52;6875:9;6869:16;6859:26;;6925:2;6914:9;6910:18;6904:25;6894:35;;6969:2;6958:9;6954:18;6948:25;6938:35;;6673:306;;;;;:::o;6984:523::-;7088:6;7096;7104;7112;7120;7128;7181:3;7169:9;7160:7;7156:23;7152:33;7149:53;;;7198:1;7195;7188:12;7149:53;-1:-1:-1;;7221:23:1;;;7291:2;7276:18;;7263:32;;-1:-1:-1;7342:2:1;7327:18;;7314:32;;7393:2;7378:18;;7365:32;;-1:-1:-1;7444:3:1;7429:19;;7416:33;;-1:-1:-1;7496:3:1;7481:19;7468:33;;-1:-1:-1;6984:523:1;-1:-1:-1;6984:523:1:o;7512:461::-;7565:3;7603:5;7597:12;7630:6;7625:3;7618:19;7656:4;7685:2;7680:3;7676:12;7669:19;;7722:2;7715:5;7711:14;7743:1;7753:195;7767:6;7764:1;7761:13;7753:195;;;7832:13;;-1:-1:-1;;;;;7828:39:1;7816:52;;7888:12;;;;7923:15;;;;7864:1;7782:9;7753:195;;;-1:-1:-1;7964:3:1;;7512:461;-1:-1:-1;;;;;7512:461:1:o;7978:258::-;8020:3;8058:5;8052:12;8085:6;8080:3;8073:19;8101:63;8157:6;8150:4;8145:3;8141:14;8134:4;8127:5;8123:16;8101:63;:::i;:::-;8218:2;8197:15;-1:-1:-1;;8193:29:1;8184:39;;;;8225:4;8180:50;;7978:258;-1:-1:-1;;7978:258:1:o;8241:273::-;8426:6;8418;8413:3;8400:33;8382:3;8452:16;;8477:13;;;8452:16;8241:273;-1:-1:-1;8241:273:1:o;8519:276::-;8650:3;8688:6;8682:13;8704:53;8750:6;8745:3;8738:4;8730:6;8726:17;8704:53;:::i;:::-;8773:16;;;;;8519:276;-1:-1:-1;;8519:276:1:o;8800:445::-;9062:28;9057:3;9050:41;9032:3;9120:6;9114:13;9136:62;9191:6;9186:2;9181:3;9177:12;9170:4;9162:6;9158:17;9136:62;:::i;:::-;9218:16;;;;9236:2;9214:25;;8800:445;-1:-1:-1;;8800:445:1:o;9250:446::-;9512:29;9507:3;9500:42;9482:3;9571:6;9565:13;9587:62;9642:6;9637:2;9632:3;9628:12;9621:4;9613:6;9609:17;9587:62;:::i;:::-;9669:16;;;;9687:2;9665:25;;9250:446;-1:-1:-1;;9250:446:1:o;9911:1354::-;10170:34;10165:3;10158:47;10140:3;10224:2;-1:-1:-1;;;10251:2:1;10246:3;10242:12;10235:32;10286:2;10308:1;10341:6;10335:13;10371:3;10393:1;10421:9;10417:2;10413:18;10403:28;;10481:2;10470:9;10466:18;10503;10493:61;;10547:4;10539:6;10535:17;10525:27;;10493:61;10600:2;10592:6;10589:14;10569:18;10566:38;10563:165;;;-1:-1:-1;;;10627:33:1;;10683:4;10680:1;10673:15;10713:4;10634:3;10701:17;10563:165;10744:18;10771:122;;;;10907:1;10902:338;;;;10737:503;;10771:122;-1:-1:-1;;10813:24:1;;10799:12;;;10792:46;10862:16;;;10858:25;;;-1:-1:-1;10771:122:1;;10902:338;22945:1;22938:14;;;22982:4;22969:18;;10997:1;11011:174;11025:6;11022:1;11019:13;11011:174;;;11112:14;;11094:11;;;11090:20;;11083:44;11155:16;;;;11040:10;;11011:174;;;11015:3;;11227:2;11218:6;11213:3;11209:16;11205:25;11198:32;;10737:503;-1:-1:-1;11256:3:1;;9911:1354;-1:-1:-1;;;;;;;;;9911:1354:1:o;12074:561::-;-1:-1:-1;;;;;12289:32:1;;12271:51;;12358:2;12353;12338:18;;12331:30;;;12377:18;;12370:34;;;12397:6;12447;12441:3;12426:19;;12413:49;12512:1;12506:3;12497:6;12486:9;12482:22;12478:32;12471:43;12252:4;12582:3;12575:2;12571:7;12566:2;12558:6;12554:15;12550:29;12539:9;12535:45;12531:55;12523:63;;12622:6;12617:2;12606:9;12602:18;12595:34;12074:561;;;;;;;:::o;12640:388::-;-1:-1:-1;;;;;12845:32:1;;12827:51;;12914:2;12909;12894:18;;12887:30;;;-1:-1:-1;;12934:45:1;;12960:18;;12952:6;12934:45;:::i;:::-;12926:53;;13015:6;13010:2;12999:9;12995:18;12988:34;12640:388;;;;;;:::o;14342:510::-;14613:6;14602:9;14595:25;14656:3;14651:2;14640:9;14636:18;14629:31;14576:4;14677:57;14729:3;14718:9;14714:19;14706:6;14677:57;:::i;:::-;-1:-1:-1;;;;;14770:32:1;;;;14765:2;14750:18;;14743:60;-1:-1:-1;14834:2:1;14819:18;14812:34;14669:65;14342:510;-1:-1:-1;;14342:510:1:o;15126:220::-;15275:2;15264:9;15257:21;15238:4;15295:45;15336:2;15325:9;15321:18;15313:6;15295:45;:::i;15351:291::-;15528:2;15517:9;15510:21;15491:4;15548:45;15589:2;15578:9;15574:18;15566:6;15548:45;:::i;:::-;15540:53;;15629:6;15624:2;15613:9;15609:18;15602:34;15351:291;;;;;:::o;15647:385::-;15850:2;15839:9;15832:21;15813:4;15870:45;15911:2;15900:9;15896:18;15888:6;15870:45;:::i;:::-;15862:53;;15951:6;15946:2;15935:9;15931:18;15924:34;16006:18;15998:6;15994:31;15989:2;15978:9;15974:18;15967:59;15647:385;;;;;;:::o;19733:345::-;19935:2;19917:21;;;19974:2;19954:18;;;19947:30;-1:-1:-1;;;20008:2:1;19993:18;;19986:51;20069:2;20054:18;;19733:345::o;21316:582::-;21615:6;21604:9;21597:25;21658:6;21653:2;21642:9;21638:18;21631:34;21701:3;21696:2;21685:9;21681:18;21674:31;21578:4;21722:57;21774:3;21763:9;21759:19;21751:6;21722:57;:::i;:::-;-1:-1:-1;;;;;21815:32:1;;;;21810:2;21795:18;;21788:60;-1:-1:-1;21879:3:1;21864:19;21857:35;21714:65;21316:582;-1:-1:-1;;;21316:582:1:o;22345:522::-;22423:4;22429:6;22489:11;22476:25;22583:2;22579:7;22568:8;22552:14;22548:29;22544:43;22524:18;22520:68;22510:96;;22602:1;22599;22592:12;22510:96;22629:33;;22681:20;;;-1:-1:-1;22724:18:1;22713:30;;22710:50;;;22756:1;22753;22746:12;22710:50;22789:4;22777:17;;-1:-1:-1;22820:14:1;22816:27;;;22806:38;;22803:58;;;22857:1;22854;22847:12;22803:58;22345:522;;;;;:::o;22998:128::-;23038:3;23069:1;23065:6;23062:1;23059:13;23056:39;;;23075:18;;:::i;:::-;-1:-1:-1;23111:9:1;;22998:128::o;23131:236::-;23170:3;23198:18;23243:2;23240:1;23236:10;23273:2;23270:1;23266:10;23304:3;23300:2;23296:12;23291:3;23288:21;23285:47;;;23312:18;;:::i;:::-;23348:13;;23131:236;-1:-1:-1;;;;23131:236:1:o;23372:217::-;23412:1;23438;23428:132;;23482:10;23477:3;23473:20;23470:1;23463:31;23517:4;23514:1;23507:15;23545:4;23542:1;23535:15;23428:132;-1:-1:-1;23574:9:1;;23372:217::o;23594:168::-;23634:7;23700:1;23696;23692:6;23688:14;23685:1;23682:21;23677:1;23670:9;23663:17;23659:45;23656:71;;;23707:18;;:::i;:::-;-1:-1:-1;23747:9:1;;23594:168::o;23767:125::-;23807:4;23835:1;23832;23829:8;23826:34;;;23840:18;;:::i;:::-;-1:-1:-1;23877:9:1;;23767:125::o;23897:258::-;23969:1;23979:113;23993:6;23990:1;23987:13;23979:113;;;24069:11;;;24063:18;24050:11;;;24043:39;24015:2;24008:10;23979:113;;;24110:6;24107:1;24104:13;24101:48;;;-1:-1:-1;;24145:1:1;24127:16;;24120:27;23897:258::o;24160:249::-;24270:2;24251:13;;-1:-1:-1;;24247:27:1;24235:40;;24305:18;24290:34;;24326:22;;;24287:62;24284:88;;;24352:18;;:::i;:::-;24388:2;24381:22;-1:-1:-1;;24160:249:1:o;24414:135::-;24453:3;-1:-1:-1;;24474:17:1;;24471:43;;;24494:18;;:::i;:::-;-1:-1:-1;24541:1:1;24530:13;;24414:135::o;24554:127::-;24615:10;24610:3;24606:20;24603:1;24596:31;24646:4;24643:1;24636:15;24670:4;24667:1;24660:15;24686:127;24747:10;24742:3;24738:20;24735:1;24728:31;24778:4;24775:1;24768:15;24802:4;24799:1;24792:15;24818:127;24879:10;24874:3;24870:20;24867:1;24860:31;24910:4;24907:1;24900:15;24934:4;24931:1;24924:15;24950:127;25011:10;25006:3;25002:20;24999:1;24992:31;25042:4;25039:1;25032:15;25066:4;25063:1;25056:15;25082:127;25143:10;25138:3;25134:20;25131:1;25124:31;25174:4;25171:1;25164:15;25198:4;25195:1;25188:15;25214:179;25249:3;25291:1;25273:16;25270:23;25267:120;;;25337:1;25334;25331;25316:23;-1:-1:-1;25374:1:1;25368:8;25363:3;25359:18;25267:120;25214:179;:::o;25398:671::-;25437:3;25479:4;25461:16;25458:26;25455:39;;;25398:671;:::o;25455:39::-;25521:2;25515:9;-1:-1:-1;;25586:16:1;25582:25;;25579:1;25515:9;25558:50;25637:4;25631:11;25661:16;25696:18;25767:2;25760:4;25752:6;25748:17;25745:25;25740:2;25732:6;25729:14;25726:45;25723:58;;;25774:5;;;;;25398:671;:::o;25723:58::-;25811:6;25805:4;25801:17;25790:28;;25847:3;25841:10;25874:2;25866:6;25863:14;25860:27;;;25880:5;;;;;;25398:671;:::o;25860:27::-;25964:2;25945:16;25939:4;25935:27;25931:36;25924:4;25915:6;25910:3;25906:16;25902:27;25899:69;25896:82;;;25971:5;;;;;;25398:671;:::o;25896:82::-;25987:57;26038:4;26029:6;26021;26017:19;26013:30;26007:4;25987:57;:::i;:::-;-1:-1:-1;26060:3:1;;25398:671;-1:-1:-1;;;;;25398:671:1:o;26074:131::-;-1:-1:-1;;;;;26149:31:1;;26139:42;;26129:70;;26195:1;26192;26185:12;26129:70;26074:131;:::o

Swarm Source

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