Contract 0xC50d9Ec1F70b907Ca639E314e525C5ADfd4285Ba 1

 

Contract Overview

Balance:
0.815723704986462022 BNB

BNB Value:
$466.68 (@ $572.10/BNB)

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xcad2e23c30b22d2382c618167800e19d34ec7d7d2255d8933bcff6a45842d1bcApprove132311212021-12-06 1:35:4519 hrs 21 mins ago0xd57cee7eb34e78df6ba4202763f1154e530c55f6 IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000266706
0x3f10a89936ad57676dcd6fac43346fb92dd941158844bed5fd4d718aa96c7b31Claim Dividend132190412021-12-05 15:17:241 day 5 hrs ago0xd57cee7eb34e78df6ba4202763f1154e530c55f6 IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.00024865
0x0b4677132f9a7c22814e069a66270c48e44ce3161ef5c879e33d5a2d0cb76be6Approve Max132073712021-12-05 5:18:111 day 15 hrs ago0x34836ba4dadb4c947fc65362897cb9c94909bbba IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000219705
0x3651be78967ff7cf201032b8735847b79cc9968c42577ab24212d386e3f5cbe2Approve131988672021-12-04 22:11:351 day 22 hrs ago0xce4ff92392e271efd8967f822449c2b4dc64a74e IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000222255
0x2b2be609600dc5a9800b3849ce5c0f88b8699b6fe93797914fd29cdec38642fdApprove131974772021-12-04 21:02:051 day 23 hrs ago0x59b04f64f70270cbb9c833c79082e363a178f8bc IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000222255
0xaaa55e97c90496fa9d32dca120899e1154aeea2eefee1b9c3553a42d4a1cbd6aSet Fee Receiver...131956722021-12-04 19:31:502 days 1 hr agoSon of Doge: Deployer IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000185725
0x2af82ac736469e0ce0e08ffe3750fb9d19b05118f5ea3af34a66ef53c1eff18eApprove131919182021-12-04 16:23:222 days 4 hrs ago0x0da8dabaec0a0ce5a37e92fc7f995b1fd163144c IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000222255
0xf658de5f1ef30add25f6ee39e693242883502a82975c4ef7a8d07d5be5ff1959Approve131908582021-12-04 15:29:462 days 5 hrs ago0x4a7b43e768c84de938072ea2d29ba16e6382f653 IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000222255
0x442a75e790ba0b37758fa16882e69f840a35183ed932594975fbdc22c14b35d9Approve131864872021-12-04 11:45:292 days 9 hrs ago0x8275d85fe2e84d2286c692217235b0e9cdd984b5 IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000222255
0xbcfb3c76493b1a1465617d6bd74b23225e6731fea4603dc2c11b1de6a42fe79cApprove131724422021-12-03 23:51:422 days 21 hrs ago0x7f4c9ad4cdae4e7a8895e7ef30808a117c4e139c IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.00007267
0xb5e62357a03a536d50c30408f08e53494eca505aca5516ff6bdc6ad8eb611d23Approve131683472021-12-03 20:25:533 days 31 mins ago0x69499c039c05c75a2d351826fff9484b1634ce5d IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000222255
0xd15b4b90d734452d5266966bb1e5b4a45a3e6328cfbbe44f0f1f8c3c3329990cClaim Dividend131601572021-12-03 13:30:473 days 7 hrs ago0x14129b0edc98c4f51cc9877c332e136d033db95f IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.00024865
0x314ed6ad81a749f1c97ff4b089930566a723ceb933ed41e0b78d1f031913aafbApprove131560072021-12-03 9:56:403 days 11 hrs ago0x9ec33629429c8ab910a345f8ad83d7b3ba7454ef IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000222255
0xc4e0699bd92bb8e60869846785df9852019c83884931ec21e7fc1e1e18f1daf7Transfer131490592021-12-03 4:03:483 days 16 hrs ago0x66647acacd4c224be1386dcba770c39239fa545b IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.00513835
0x6b23188f4a53e782e3f7f9cf0fbf145c1d554778d7cadce55415287ac387be2dApprove Max131474662021-12-03 2:43:143 days 18 hrs ago0x64dc38c3029b248f305a89814a9d102d522f9d43 IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000219705
0xbe99edd9852a90411caab78f75acd0af3bb1048259146c5be997a7dabc7c6100Approve131411912021-12-02 21:28:323 days 23 hrs ago0xd2fcf69cf25c738af22700a3d4b10beef792db50 IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000222255
0x08fcc31eb9928b7f5366d3b2499ae1532a8ed757ae1630adebacfb259e50c191Approve131364682021-12-02 17:32:014 days 3 hrs ago0xc10d26816447b4637f14ade773fe2b6832e5c600 IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.00007264
0x099cdb8de81a5d4d9c365514dc8e6107525933bc4ba2159c64fd47e511f577aeApprove131364552021-12-02 17:31:224 days 3 hrs ago0xc10d26816447b4637f14ade773fe2b6832e5c600 IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.00007267
0x04f9f411e899bdf8377fac3206ee8003bc77ca0894552df5f1b744977bbdd8e8Approve131308502021-12-02 12:45:114 days 8 hrs ago0xeda05ac796cf43e7f44bfe07d87417a9f48a6624 IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000222255
0xd2aeeb9bebf324641e4d26efd0499fe8629421d0cbb6695c2f2b70e2b621a08bApprove Max131282112021-12-02 10:26:264 days 10 hrs ago0xd1fcaa1d3312a2540ac4506994dbd9b3f09fd639 IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000123705
0x68d560518cb34bc9db42aad2ee304b986ee2adca08d5705f84232d39719c2c89Approve Max131282062021-12-02 10:26:114 days 10 hrs ago0xd1fcaa1d3312a2540ac4506994dbd9b3f09fd639 IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000219705
0x4254555770b89f66601ce146713c2635c588dbf263c448d900419fd44a82668eApprove131278222021-12-02 10:06:494 days 10 hrs ago0x7f39295aa544e9d951e3ab90af70c19635f92ca3 IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000222255
0xa38600a220b5ed5fc6e673313919d702dc686c186c1c2dd1ae29a23cd47e6993Approve131168022021-12-02 0:22:384 days 20 hrs ago0xb1b9b4bbe8a92d535f5df2368e7fd2ecfb3a1950 IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000124815
0xc8803e97b48165384824ba5b28b52d7580fcc6c73d6906a7c72448c130c49222Approve131167522021-12-02 0:19:514 days 20 hrs ago0xb1b9b4bbe8a92d535f5df2368e7fd2ecfb3a1950 IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000220815
0x174c96841dbb27c4c0fc6829472985255fdc06ad00c9a3264142ad1ba75a0089Approve Max131143472021-12-01 22:18:454 days 22 hrs ago0x345fb002c97314d7326883cb34a5ff194d6fcc2d IN  0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0 BNB0.000219705
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x683dfa321611079acb97500554b480f21d4c206bf61fab1de525c4a8774bd1f4132516022021-12-06 19:20:511 hr 36 mins ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0x157ea0cca424b10bea96c3a87ca740cfdbe402820.016056354533460441 BNB
0x683dfa321611079acb97500554b480f21d4c206bf61fab1de525c4a8774bd1f4132516022021-12-06 19:20:511 hr 36 mins ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba 0xa1219be901250f900f217797bcbb864f4a970d340.020070443166825552 BNB
0x683dfa321611079acb97500554b480f21d4c206bf61fab1de525c4a8774bd1f4132516022021-12-06 19:20:511 hr 36 mins ago PancakeSwap: Router v2 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0.040140886333651104 BNB
0x2f8c2658728a522591d631d83264cde37fd9f1c0b091ccc121e725b6972c75ea132311412021-12-06 1:36:4519 hrs 20 mins ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0x157ea0cca424b10bea96c3a87ca740cfdbe402820.016090666850762404 BNB
0x2f8c2658728a522591d631d83264cde37fd9f1c0b091ccc121e725b6972c75ea132311412021-12-06 1:36:4519 hrs 20 mins ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba 0xa1219be901250f900f217797bcbb864f4a970d340.020113333563453006 BNB
0x2f8c2658728a522591d631d83264cde37fd9f1c0b091ccc121e725b6972c75ea132311412021-12-06 1:36:4519 hrs 20 mins ago PancakeSwap: Router v2 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0.040226667126906012 BNB
0xc55bf72c83df8c435504ae0856b1ead8c06b0db74f99521e0c25cb32f9ca46b7132137092021-12-05 10:36:101 day 10 hrs ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0x157ea0cca424b10bea96c3a87ca740cfdbe402820.016118344107389181 BNB
0xc55bf72c83df8c435504ae0856b1ead8c06b0db74f99521e0c25cb32f9ca46b7132137092021-12-05 10:36:101 day 10 hrs ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba 0xa1219be901250f900f217797bcbb864f4a970d340.020147930134236477 BNB
0xc55bf72c83df8c435504ae0856b1ead8c06b0db74f99521e0c25cb32f9ca46b7132137092021-12-05 10:36:101 day 10 hrs ago PancakeSwap: Router v2 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0.040295860268472954 BNB
0x408877febe45d537a9360db8705f121cb1208ae2f028b3a6781ba98ec8bda4bc132073982021-12-05 5:19:321 day 15 hrs ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0x157ea0cca424b10bea96c3a87ca740cfdbe402820.016141432073564034 BNB
0x408877febe45d537a9360db8705f121cb1208ae2f028b3a6781ba98ec8bda4bc132073982021-12-05 5:19:321 day 15 hrs ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba 0xa1219be901250f900f217797bcbb864f4a970d340.020176790091955043 BNB
0x408877febe45d537a9360db8705f121cb1208ae2f028b3a6781ba98ec8bda4bc132073982021-12-05 5:19:321 day 15 hrs ago PancakeSwap: Router v2 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0.040353580183910087 BNB
0xe25899fc0b88f6726ea154b3b50ec6d9dce6610d29de750f9da2256fed0b22be131988772021-12-04 22:12:051 day 22 hrs ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0x157ea0cca424b10bea96c3a87ca740cfdbe402820.016204579927645822 BNB
0xe25899fc0b88f6726ea154b3b50ec6d9dce6610d29de750f9da2256fed0b22be131988772021-12-04 22:12:051 day 22 hrs ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba 0xa1219be901250f900f217797bcbb864f4a970d340.020255724909557278 BNB
0xe25899fc0b88f6726ea154b3b50ec6d9dce6610d29de750f9da2256fed0b22be131988772021-12-04 22:12:051 day 22 hrs ago PancakeSwap: Router v2 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0.040511449819114557 BNB
0x8491970733c97ee0aa88159f62ffd0f862a7c3cbffde7ff68ee73c81e9e3ab50131975262021-12-04 21:04:321 day 23 hrs ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0x157ea0cca424b10bea96c3a87ca740cfdbe402820.016265159948061119 BNB
0x8491970733c97ee0aa88159f62ffd0f862a7c3cbffde7ff68ee73c81e9e3ab50131975262021-12-04 21:04:321 day 23 hrs ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba 0xa1219be901250f900f217797bcbb864f4a970d340.020331449935076399 BNB
0x8491970733c97ee0aa88159f62ffd0f862a7c3cbffde7ff68ee73c81e9e3ab50131975262021-12-04 21:04:321 day 23 hrs ago PancakeSwap: Router v2 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0.040662899870152799 BNB
0x400208789e46120bbc5cdf2791675b0ed458144334ff56e08743eccf12143f11131972162021-12-04 20:49:022 days 8 mins ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0x157ea0cca424b10bea96c3a87ca740cfdbe402820.016288564327887406 BNB
0x400208789e46120bbc5cdf2791675b0ed458144334ff56e08743eccf12143f11131972162021-12-04 20:49:022 days 8 mins ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba 0xa1219be901250f900f217797bcbb864f4a970d340.020360705409859257 BNB
0x400208789e46120bbc5cdf2791675b0ed458144334ff56e08743eccf12143f11131972162021-12-04 20:49:022 days 8 mins ago PancakeSwap: Router v2 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0.040721410819718515 BNB
0x007360b8cea11631fb7aaa1e181c40738f2b0695db73bd281a2bd098e1cc3922131919542021-12-04 16:25:102 days 4 hrs ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285baSon of Doge: Deployer0.018759154361571147 BNB
0x007360b8cea11631fb7aaa1e181c40738f2b0695db73bd281a2bd098e1cc3922131919542021-12-04 16:25:102 days 4 hrs ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba 0xa1219be901250f900f217797bcbb864f4a970d340.023448942951963934 BNB
0x007360b8cea11631fb7aaa1e181c40738f2b0695db73bd281a2bd098e1cc3922131919542021-12-04 16:25:102 days 4 hrs ago PancakeSwap: Router v2 0xc50d9ec1f70b907ca639e314e525c5adfd4285ba0.046897885903927868 BNB
0x58eaa463acac326b5f06eb2a7b6dbcd0c9c9763849725ca23726cf7acc5f0e78131919152021-12-04 16:23:132 days 4 hrs ago 0xc50d9ec1f70b907ca639e314e525c5adfd4285baSon of Doge: Deployer0.018788147982168863 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HodlADA

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-09-05
*/

/**
 *Submitted for verification at BscScan.com on 2021-09-02
*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

/**

'##::::'##::'#######::'########::'##:::::::::::'######:::'########:::'#######::'##::::'##:'########::
 ##:::: ##:'##.... ##: ##.... ##: ##::::::::::'##... ##:: ##.... ##:'##.... ##: ##:::: ##: ##.... ##:
 ##:::: ##: ##:::: ##: ##:::: ##: ##:::::::::: ##:::..::: ##:::: ##: ##:::: ##: ##:::: ##: ##:::: ##:
 #########: ##:::: ##: ##:::: ##: ##:::::::::: ##::'####: ########:: ##:::: ##: ##:::: ##: ########::
 ##.... ##: ##:::: ##: ##:::: ##: ##:::::::::: ##::: ##:: ##.. ##::: ##:::: ##: ##:::: ##: ##.....:::
 ##:::: ##: ##:::: ##: ##:::: ##: ##:::::::::: ##::: ##:: ##::. ##:: ##:::: ##: ##:::: ##: ##::::::::
 ##:::: ##:. #######:: ########:: ########::::. ######::: ##:::. ##:. #######::. #######:: ##::::::::
..:::::..:::.......:::........:::........::::::......::::..:::::..:::.......::::.......:::..:::::::::          
 * 
 *  HodlADA Website: https://hodlADA.one
 *  Hodlgroup Website: https://hodlgroup.one
 *  Telegram: https://t.me/HodlGroupofCompanies
 *  Twitter: https://twitter.com/HodlCompanies
 */


/**
 * Standard SafeMath, stripped down to just add/sub/mul/div
 */
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

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

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

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

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

        return c;
    }
}

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

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
}

/**
 * Allows for contract ownership along with multi-address authorization for different permissions
 */
abstract contract HADAAuth {
    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);

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

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

    /**
     * Function modifier to require caller to be authorized
     */
    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)]))); _;
    }

    /**
     * Authorize address for one 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);
    }

    /**
     * Authorize address for multiple permissions
     */
    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);
        }
    }

    /**
     * Remove address' authorization
     */
    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);
    }

    /**
     * Unauthorize address for multiple permissions
     */
    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);
        }
    }

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

    /**
     * Return address' authorization status
     */
    function isAuthorizedFor(address adr, string memory permissionName) public view returns (bool) {
        return authorizations[adr][permissionNameToIndex[permissionName]];
    }

    /**
     * Return address' authorization status
     */
    function isAuthorizedFor(address adr, Permission permission) public view returns (bool) {
        return authorizations[adr][uint256(permission)];
    }

    /**
     * Transfer ownership to new address. Caller must be owner.
     */
    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);
    }

    /**
     * Get the index of the permission by its name
     */
    function getPermissionNameToIndex(string memory permissionName) public view returns (uint256) {
        return permissionNameToIndex[permissionName];
    }
    
    /**
     * Get the time the timelock expires
     */
    function getPermissionUnlockTime(string memory permissionName) public view returns (uint256) {
        return lockedPermissions[permissionNameToIndex[permissionName]].expiryTime;
    }

    /**
     * Check if the permission is locked
     */
    function isLocked(string memory permissionName) public view returns (bool) {
        return lockedPermissions[permissionNameToIndex[permissionName]].isLocked;
    }

    /*
     *Locks the permission from being used for the amount of time provided
     */
    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);
    }
    
    /*
     * Unlocks the permission if the lock has expired 
     */
    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 IDividendDistributor {
    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 DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

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

    IBEP20 ADA = IBEP20(0x3EE2200Efb3400fAbB9AacF31297cBdD1d435D47);
    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 = 2 hours; // min 2 hours delay
    uint256 public minDistribution = 3/10 * (10 ** 18); // 1 USD Worth of ADA 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 = ADA.balanceOf(address(this));

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

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

        uint256 amount = ADA.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);
            ADA.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 HodlADA is IBEP20, HADAAuth {
    using SafeMath for uint256;

    address ADA = 0x3EE2200Efb3400fAbB9AacF31297cBdD1d435D47;
    address WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "HodlADA";
    string constant _symbol = "HADA";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1000000000000 * (10 ** _decimals); 
    uint256 public _maxTxAmount = _totalSupply / 10; // 10%

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

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

    uint256 liquidityFee = 200;
    uint256 buybackFee = 1;
    uint256 reflectionFee = 600;
    uint256 marketingFee = 500;
    uint256 totalBuyFee = 1300;
    uint256 totalSellFee = 1600;
    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;

    DividendDistributor distributor;
    uint256 distributorGas = 500000;

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

    constructor () HADAAuth(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 DividendDistributor(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) {

        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 BNB 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 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);
   
} //From Yubtl with love

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":"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"}]

6080604052600580546001600160a01b0319908116733ee2200efb3400fabb9aacf31297cbdd1d435d471790915560068054821673bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c17905560078054821661dead1790556008805490911690556200006e6009600a62000af1565b6200007f9064e8d4a5100062000bb2565b600955600a60095462000093919062000a85565b600a5560c8601055600160118190556102586012556101f460135561051460149081556106406015556127106016556019556064601a8190556096601f556020556107086022556023805460ff199081169091556207a1206024556025805490911690911790556009546200010c906113889062000a85565b6026553480156200011c57600080fd5b50600080546001600160a01b031916339081178255905b600a81101562000181576001600160a01b0382166000908152600160208181526040808420858552909152909120805460ff1916909117905580620001788162000c11565b91505062000133565b506000604051694368616e67654665657360b01b8152600290600a01908152604051908190036020019020556001604051664275796261636b60c81b81526002906007019081526040519081900360200190205560026040517f41646a757374436f6e74726163745661726961626c6573000000000000000000815260029060170190815260405190819003602001902055600360405168417574686f72697a6560b81b81526002906009019081526040519081900360200190205560046040516a556e617574686f72697a6560a81b8152600290600b019081526040519081900360200190205560056040517f5061757365556e7061757365436f6e747261637400000000000000000000000081526002906014019081526040519081900360200190205560066040516a427970617373506175736560a81b8152600290600b019081526040519081900360200190205560076040516e4c6f636b5065726d697373696f6e7360881b8152600290600f019081526040519081900360200190205560086040516d4578636c756465496e636c75646560901b8152600290600e01908152604080519182900360209081018320939093558181019052600a8152694368616e67654665657360b01b828201908152600080526003909252516200038c917f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff916200099f565b506040805180820190915260078152664275796261636b60c81b60208083019182526001600052600390529051620003e6917fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c916200099f565b5060408051808201909152601781527f41646a757374436f6e74726163745661726961626c65730000000000000000006020808301918252600260005260039052905162000456917fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d916200099f565b50604080518082019091526009815268417574686f72697a6560b81b60208083019182526003600081905290529051620004b2917fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495af916200099f565b5060408051808201909152600b81526a556e617574686f72697a6560a81b6020808301918252600460005260039052905162000510917f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe93772465916200099f565b5060408051808201909152601481527f5061757365556e7061757365436f6e74726163740000000000000000000000006020808301918252600560005260039052905162000580917f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b465942250916200099f565b5060408051808201909152600b81526a427970617373506175736560a81b60208083019182526006600052600390529051620005de917fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f3916200099f565b5060408051808201909152600f81526e4c6f636b5065726d697373696f6e7360881b6020808301918252600760005260039052905162000640917ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd2916200099f565b5060408051808201909152600e81526d4578636c756465496e636c75646560901b60208083019182526008600052600390529051620006a1917f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbe916200099f565b5050601b80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e9081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200070357600080fd5b505afa15801562000718573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200073e919062000a53565b6006546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200078b57600080fd5b505af1158015620007a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007c6919062000a53565b601c80546001600160a01b039283166001600160a01b0319918216178255306000908152600c60209081526040808320601b805488168552925280832060001990559354601d805460018101825593527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f9092018054909316918516919091179091555490519116906200085a9062000a2e565b6001600160a01b039091168152602001604051809103906000f08015801562000887573d6000803e3d6000fd5b5060238054610100600160a81b0319166101006001600160a01b0393841602179055336000818152600d60208181526040808420805460ff199081166001908117909255600e8085528387208054831684179055601c5489168752600f8086528488208054841685179055308852848820805484168517905595855283872080548316841790558452828620805482168317905560075490971685529282528084208054909616909217909455601780546001600160a01b031990811685179091556018805490911684179055600954838352600b85528183208190559051908152919283927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000c45565b828054620009ad9062000bd4565b90600052602060002090601f016020900481019282620009d1576000855562000a1c565b82601f10620009ec57805160ff191683800117855562000a1c565b8280016001018555821562000a1c579182015b8281111562000a1c578251825591602001919060010190620009ff565b5062000a2a92915062000a3c565b5090565b611048806200519c83390190565b5b8082111562000a2a576000815560010162000a3d565b60006020828403121562000a6657600080fd5b81516001600160a01b038116811462000a7e57600080fd5b9392505050565b60008262000aa357634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111562000ae957816000190482111562000acd5762000acd62000c2f565b8085161562000adb57918102915b93841c939080029062000aad565b509250929050565b600062000a7e60ff84168360008262000b0d5750600162000bac565b8162000b1c5750600062000bac565b816001811462000b35576002811462000b405762000b60565b600191505062000bac565b60ff84111562000b545762000b5462000c2f565b50506001821b62000bac565b5060208310610133831016604e8410600b841016171562000b85575081810a62000bac565b62000b91838362000aa8565b806000190482111562000ba85762000ba862000c2f565b0290505b92915050565b600081600019048311821515161562000bcf5762000bcf62000c2f565b500290565b600181811c9082168062000be957607f821691505b6020821081141562000c0b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000c285762000c2862000c2f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6145478062000c556000396000f3fe6080604052600436106103795760003560e01c80638101cae3116101d1578063c41235a611610102578063e96fada2116100a0578063f3a54f2c1161006f578063f3a54f2c14610a5d578063f708a64f14610a7d578063f84ba65d14610a9d578063f887ea4014610abd57600080fd5b8063e96fada2146109e8578063f0fc6bca14610a08578063f1f3bca314610a1d578063f2fde38b14610a3d57600080fd5b8063d806d12f116100dc578063d806d12f1461094d578063dd62ed3e14610962578063df20fd49146109a8578063e75cae79146109c857600080fd5b8063c41235a6146108ed578063ca33e64c1461090d578063d51ed1c81461092d57600080fd5b8063a4b45c001161016f578063b210b06d11610149578063b210b06d14610882578063b91ac78814610897578063bf56b371146108b7578063c2b7bbb6146108cd57600080fd5b8063a4b45c0014610822578063a9059cbb14610842578063af05cf931461086257600080fd5b80638da5cb5b116101ab5780638da5cb5b1461079557806395d89b41146107b5578063971563fc146107e25780639d1944f51461080257600080fd5b80638101cae31461072357806386f6c3c114610743578063893d20e81461076357600080fd5b80632d48e896116102ab5780635c85974f116102495780636ddd1713116102235780636ddd17131461069d57806370a08231146106b75780637d1db4a5146106ed5780638032eccb1461070357600080fd5b80635c85974f1461063d578063658d4b7f1461065d5780636a6e3cbe1461067d57600080fd5b806339e67c8a1161028557806339e67c8a146105c3578063571ac8b0146105e357806357b78541146106035780635abe67111461062357600080fd5b80632d48e896146105585780632f54bf6e14610578578063313ce567146105a757600080fd5b806318160ddd11610318578063201e7991116102f2578063201e7991146104e35780632375ce401461050357806323b872dd146105235780632b112e491461054357600080fd5b806318160ddd1461048e5780631ad6084f146104a35780631e8f5283146104c357600080fd5b806306fdde031161035457806306fdde03146103e557806307858b021461041e578063095ea7b31461043e5780631161ae391461046e57600080fd5b806293dc14146103855780630445b6671461039c57806306fbdcd8146103c557600080fd5b3661038057005b600080fd5b34801561039157600080fd5b5061039a610add565b005b3480156103a857600080fd5b506103b260265481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b506103b26103e0366004613d4e565b610bc4565b3480156103f157600080fd5b50604080518082019091526007815266486f646c41444160c81b60208201525b6040516103bc9190614194565b34801561042a57600080fd5b5061039a610439366004613d4e565b610bec565b34801561044a57600080fd5b5061045e610459366004613ceb565b610cce565b60405190151581526020016103bc565b34801561047a57600080fd5b5061045e610489366004613e21565b610d3b565b34801561049a57600080fd5b506009546103b2565b3480156104af57600080fd5b5061039a6104be366004613bac565b610d4f565b3480156104cf57600080fd5b5061039a6104de366004613c9b565b610f55565b3480156104ef57600080fd5b5061039a6104fe366004613e21565b6110a1565b34801561050f57600080fd5b5061039a61051e366004613e43565b611155565b34801561052f57600080fd5b5061045e61053e366004613b6b565b61122e565b34801561054f57600080fd5b506103b26112f0565b34801561056457600080fd5b5061039a610573366004613e21565b611342565b34801561058457600080fd5b5061045e610593366004613b15565b6000546001600160a01b0391821691161490565b3480156105b357600080fd5b50604051600981526020016103bc565b3480156105cf57600080fd5b5061039a6105de366004613de5565b611459565b3480156105ef57600080fd5b5061045e6105fe366004613b15565b611507565b34801561060f57600080fd5b5061045e61061e366004613c69565b611515565b34801561062f57600080fd5b5060235461045e9060ff1681565b34801561064957600080fd5b5061039a610658366004613de5565b61155b565b34801561066957600080fd5b5061039a610678366004613c34565b611625565b34801561068957600080fd5b5061039a610698366004613dfe565b61170b565b3480156106a957600080fd5b5060255461045e9060ff1681565b3480156106c357600080fd5b506103b26106d2366004613b15565b6001600160a01b03166000908152600b602052604090205490565b3480156106f957600080fd5b506103b2600a5481565b34801561070f57600080fd5b5061045e61071e366004613d4e565b611822565b34801561072f57600080fd5b5061039a61073e366004613c9b565b611861565b34801561074f57600080fd5b5061039a61075e366004613e9d565b6119f2565b34801561076f57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103bc565b3480156107a157600080fd5b5060005461077d906001600160a01b031681565b3480156107c157600080fd5b506040805180820190915260048152634841444160e01b6020820152610411565b3480156107ee57600080fd5b5061039a6107fd366004613d8b565b611b74565b34801561080e57600080fd5b5061039a61081d366004613de5565b611cff565b34801561082e57600080fd5b5061039a61083d366004613b32565b611dbd565b34801561084e57600080fd5b5061045e61085d366004613ceb565b611e94565b34801561086e57600080fd5b5061039a61087d366004613bac565b611ea1565b34801561088e57600080fd5b5061039a61204f565b3480156108a357600080fd5b5061077d6108b2366004613de5565b612111565b3480156108c357600080fd5b506103b2601e5481565b3480156108d957600080fd5b5061039a6108e8366004613b15565b61213b565b3480156108f957600080fd5b5061045e610908366004613c9b565b612236565b34801561091957600080fd5b5060175461077d906001600160a01b031681565b34801561093957600080fd5b506103b2610948366004613de5565b61228b565b34801561095957600080fd5b506103b26122cf565b34801561096e57600080fd5b506103b261097d366004613b32565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b3480156109b457600080fd5b5061039a6109c3366004613d32565b612344565b3480156109d457600080fd5b506103b26109e3366004613d4e565b612404565b3480156109f457600080fd5b5060185461077d906001600160a01b031681565b348015610a1457600080fd5b5061039a61244f565b348015610a2957600080fd5b506103b2610a38366004613d17565b6124b9565b348015610a4957600080fd5b5061039a610a58366004613b15565b612522565b348015610a6957600080fd5b5061039a610a78366004613d17565b61263f565b348015610a8957600080fd5b5061039a610a98366004613c34565b6126fb565b348015610aa957600080fd5b5061039a610ab8366004613c34565b61289f565b348015610ac957600080fd5b50601b5461077d906001600160a01b031681565b6002600081905260046020526000805160206144f28339815191525460ff1615610b225760405162461bcd60e51b8152600401610b19906141fc565b60405180910390fd5b610b2c3382611515565b60036000836008811115610b4257610b426143db565b8152602001908152602001600020604051602001610b609190614006565b60405160208183030381529060405290610b8d5760405162461bcd60e51b8152600401610b199190614194565b50601d805480610b9f57610b9f6143f1565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000600282604051610bd69190613f60565b9081526020016040518091039020549050919050565b610bf581612404565b4211610c575760405162461bcd60e51b815260206004820152602b60248201527f5065726d697373696f6e206973206c6f636b656420756e74696c20746865206560448201526a3c3834b93c903a34b6b29760a91b6064820152608401610b19565b6000600282604051610c699190613f60565b9081526040805191829003602090810183205460008181526004909252919020805460ff1916905591507ffc8b383b99ea2b22b71f1093a47597b46df7078bee32a803a3bdd4a206723b8890610cc290849084906141a7565b60405180910390a15050565b336000818152600c602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d299086815260200190565b60405180910390a35060015b92915050565b600082610d478361228b565b119392505050565b6004600081905260208190527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f5460ff1615610d9d5760405162461bcd60e51b8152600401610b19906141fc565b610da73382611515565b60036000836008811115610dbd57610dbd6143db565b8152602001908152602001600020604051602001610ddb9190614006565b60405160208183030381529060405290610e085760405162461bcd60e51b8152600401610b199190614194565b506000546001600160a01b0385811691161415610e615760405162461bcd60e51b815260206004820152601760248201527621b0b713ba103ab730baba3437b934bd329037bbb732b960491b6044820152606401610b19565b60005b82811015610f4e5760006002858584818110610e8257610e82614407565b9050602002810190610e949190614267565b604051610ea2929190613f50565b9081526040805160209281900383019020546001600160a01b0389166000908152600184528281208282529093529120805460ff1916905590507fb26499039c739e76d3891f0102d9af263029408ce80bd90b963ad702b35b5e1186868685818110610f1057610f10614407565b9050602002810190610f229190614267565b84604051610f3394939291906140e1565b60405180910390a15080610f46816143aa565b915050610e64565b5050505050565b6003600081905260046020527f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa05460ff1615610fa35760405162461bcd60e51b8152600401610b19906141fc565b610fad3382611515565b60036000836008811115610fc357610fc36143db565b8152602001908152602001600020604051602001610fe19190614006565b6040516020818303038152906040529061100e5760405162461bcd60e51b8152600401610b199190614194565b5060006002836040516110219190613f60565b908152604080519182900360209081018320546001600160a01b0388166000908152600180845284822083835290935292909220805460ff1916909117905591507f51ff6835511b7f0d6d0df8f2dcc2c818d6eb8d2817b006ff65749f283afec643906110939086908690859061412b565b60405180910390a150505050565b6002600081905260046020526000805160206144f28339815191525460ff16156110dd5760405162461bcd60e51b8152600401610b19906141fc565b6110e73382611515565b600360008360088111156110fd576110fd6143db565b815260200190815260200160002060405160200161111b9190614006565b604051602081830303815290604052906111485760405162461bcd60e51b8152600401610b199190614194565b5050601991909155601a55565b6002600081905260046020526000805160206144f28339815191525460ff16156111915760405162461bcd60e51b8152600401610b19906141fc565b61119b3382611515565b600360008360088111156111b1576111b16143db565b81526020019081526020016000206040516020016111cf9190614006565b604051602081830303815290604052906111fc5760405162461bcd60e51b8152600401610b199190614194565b50600361120984866142f9565b1115801561121657508284115b61121f57600080fd5b50601f92909255602055602255565b6001600160a01b0383166000908152600c60209081526040808320338452909152812054600019146112db576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600c825283812033825290915291909120546112b6918490612985565b6001600160a01b0385166000908152600c602090815260408083203384529091529020555b6112e68484846129bf565b90505b9392505050565b6008546001600160a01b03166000908152600b602052604081205461133d906007546001600160a01b03166000908152600b60205260409020546113379060095490612cf6565b90612cf6565b905090565b6002600081905260046020526000805160206144f28339815191525460ff161561137e5760405162461bcd60e51b8152600401610b19906141fc565b6113883382611515565b6003600083600881111561139e5761139e6143db565b81526020019081526020016000206040516020016113bc9190614006565b604051602081830303815290604052906113e95760405162461bcd60e51b8152600401610b199190614194565b506023546040516316a4744b60e11b815260048101859052602481018490526101009091046001600160a01b031690632d48e896906044015b600060405180830381600087803b15801561143c57600080fd5b505af1158015611450573d6000803e3d6000fd5b50505050505050565b6002600081905260046020526000805160206144f28339815191525460ff16156114955760405162461bcd60e51b8152600401610b19906141fc565b61149f3382611515565b600360008360088111156114b5576114b56143db565b81526020019081526020016000206040516020016114d39190614006565b604051602081830303815290604052906115005760405162461bcd60e51b8152600401610b199190614194565b5050601e55565b6000610d3582600019610cce565b6001600160a01b038216600090815260016020526040812081836008811115611540576115406143db565b815260208101919091526040016000205460ff169392505050565b6002600081905260046020526000805160206144f28339815191525460ff16156115975760405162461bcd60e51b8152600401610b19906141fc565b6115a13382611515565b600360008360088111156115b7576115b76143db565b81526020019081526020016000206040516020016115d59190614006565b604051602081830303815290604052906116025760405162461bcd60e51b8152600401610b199190614194565b506107d060095461161391906142f9565b82101561161f57600080fd5b50600a55565b6008600081905260046020527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a45460ff16156116735760405162461bcd60e51b8152600401610b19906141fc565b61167d3382611515565b60036000836008811115611693576116936143db565b81526020019081526020016000206040516020016116b19190614006565b604051602081830303815290604052906116de5760405162461bcd60e51b8152600401610b199190614194565b50506001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6001600081905260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe055460ff16156117595760405162461bcd60e51b8152600401610b19906141fc565b6117633382611515565b60036000836008811115611779576117796143db565b81526020019081526020016000206040516020016117979190614006565b604051602081830303815290604052906117c45760405162461bcd60e51b8152600401610b199190614194565b506007546117dc9084906001600160a01b0316612d38565b811561181d57426021556022546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a9060200160405180910390a15b505050565b6000600460006002846040516118389190613f60565b908152604080516020928190038301902054835290820192909252016000205460ff1692915050565b6004600081905260208190527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f5460ff16156118af5760405162461bcd60e51b8152600401610b19906141fc565b6118b93382611515565b600360008360088111156118cf576118cf6143db565b81526020019081526020016000206040516020016118ed9190614006565b6040516020818303038152906040529061191a5760405162461bcd60e51b8152600401610b199190614194565b506000546001600160a01b03848116911614156119735760405162461bcd60e51b815260206004820152601760248201527621b0b713ba103ab730baba3437b934bd329037bbb732b960491b6044820152606401610b19565b60006002836040516119859190613f60565b908152604080519182900360209081018320546001600160a01b038816600090815260018352838120828252909252919020805460ff1916905591507fb26499039c739e76d3891f0102d9af263029408ce80bd90b963ad702b35b5e11906110939086908690859061412b565b6002600081905260046020526000805160206144f28339815191525460ff1615611a2e5760405162461bcd60e51b8152600401610b19906141fc565b611a383382611515565b60036000836008811115611a4e57611a4e6143db565b8152602001908152602001600020604051602001611a6c9190614006565b60405160208183030381529060405290611a995760405162461bcd60e51b8152600401610b199190614194565b506010879055601186905560128590556013849055611ac484611abe87818b8b612f4e565b90612f4e565b60145560168390556015829055611adc600a846142f9565b6014541115611b205760405162461bcd60e51b815260206004820152601060248201526f084eaf240cccaca40e8dede40d0d2ced60831b6044820152606401610b19565b6005601654611b2f91906142f9565b60155411156114505760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840cccaca40e8dede40d0d2ced607b1b6044820152606401610b19565b6007600081905260046020527fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e5515460ff1615611bc25760405162461bcd60e51b8152600401610b19906141fc565b611bcc3382611515565b60036000836008811115611be257611be26143db565b8152602001908152602001600020604051602001611c009190614006565b60405160208183030381529060405290611c2d5760405162461bcd60e51b8152600401610b199190614194565b506000600284604051611c409190613f60565b9081526040519081900360200190205490506000611c5e84426142cd565b6040805180820182526001815267ffffffffffffffff83811660208084019182526000888152600490915284902092518354915168ffffffffffffffffff1990921690151568ffffffffffffffff001916176101009190921602179055519091507f1a64a9fcf40ce1b5dcb813e1f2ef6c6f70310b51c853865d4bfe7ca8f37d854f90611cf0908790859085906141c9565b60405180910390a15050505050565b6002600081905260046020526000805160206144f28339815191525460ff1615611d3b5760405162461bcd60e51b8152600401610b19906141fc565b611d453382611515565b60036000836008811115611d5b57611d5b6143db565b8152602001908152602001600020604051602001611d799190614006565b60405160208183030381529060405290611da65760405162461bcd60e51b8152600401610b199190614194565b50620f4240821115611db757600080fd5b50602455565b6002600081905260046020526000805160206144f28339815191525460ff1615611df95760405162461bcd60e51b8152600401610b19906141fc565b611e033382611515565b60036000836008811115611e1957611e196143db565b8152602001908152602001600020604051602001611e379190614006565b60405160208183030381529060405290611e645760405162461bcd60e51b8152600401610b199190614194565b5050601780546001600160a01b039384166001600160a01b03199182161790915560188054929093169116179055565b60006112e93384846129bf565b6003600081905260046020527f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa05460ff1615611eef5760405162461bcd60e51b8152600401610b19906141fc565b611ef93382611515565b60036000836008811115611f0f57611f0f6143db565b8152602001908152602001600020604051602001611f2d9190614006565b60405160208183030381529060405290611f5a5760405162461bcd60e51b8152600401610b199190614194565b5060005b82811015610f4e5760006002858584818110611f7c57611f7c614407565b9050602002810190611f8e9190614267565b604051611f9c929190613f50565b9081526040805160209281900383019020546001600160a01b0389166000908152600180855283822083835290945291909120805460ff191690921790915590507f51ff6835511b7f0d6d0df8f2dcc2c818d6eb8d2817b006ff65749f283afec6438686868581811061201157612011614407565b90506020028101906120239190614267565b8460405161203494939291906140e1565b60405180910390a15080612047816143aa565b915050611f5e565b6001600081905260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe055460ff161561209d5760405162461bcd60e51b8152600401610b19906141fc565b6120a73382611515565b600360008360088111156120bd576120bd6143db565b81526020019081526020016000206040516020016120db9190614006565b604051602081830303815290604052906121085760405162461bcd60e51b8152600401610b199190614194565b50506000602155565b601d818154811061212157600080fd5b6000918252602090912001546001600160a01b0316905081565b6002600081905260046020526000805160206144f28339815191525460ff16156121775760405162461bcd60e51b8152600401610b19906141fc565b6121813382611515565b60036000836008811115612197576121976143db565b81526020019081526020016000206040516020016121b59190614006565b604051602081830303815290604052906121e25760405162461bcd60e51b8152600401610b199190614194565b5050601d80546001810182556000919091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660009081526001602052604080822090518290600290612261908690613f60565b908152604080516020928190038301902054835290820192909252016000205460ff169392505050565b6000610d356122986112f0565b601c546001600160a01b03166000908152600b60205260409020546122c9906122c2906002612fad565b8590612fad565b9061302c565b600080601554905060006122f442611337602254602154612f4e90919063ffffffff16565b90506000612317836113376020546122c9601f5488612fad90919063ffffffff16565b905061233c6123356022546122c98585612fad90919063ffffffff16565b8490612f4e565b935050505090565b6002600081905260046020526000805160206144f28339815191525460ff16156123805760405162461bcd60e51b8152600401610b19906141fc565b61238a3382611515565b600360008360088111156123a0576123a06143db565b81526020019081526020016000206040516020016123be9190614006565b604051602081830303815290604052906123eb5760405162461bcd60e51b8152600401610b199190614194565b50506025805460ff191692151592909217909155602655565b60006004600060028460405161241a9190613f60565b9081526040805160209281900383019020548352908201929092520160002054610100900467ffffffffffffffff1692915050565b602360019054906101000a90046001600160a01b03166001600160a01b031663f0fc6bca6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561249f57600080fd5b505af11580156124b3573d6000803e3d6000fd5b50505050565b600043601e5460016124cb91906142b5565b106124de57601654610d35906001612cf6565b8180156125005750426124fe602254602154612f4e90919063ffffffff16565b115b1561250d57610d356122cf565b8161251a57601454610d35565b505060155490565b6000546001600160a01b031633146125725760405162461bcd60e51b815260206004820152601360248201527227bbb732b939b434b8103932b8bab4b932b21760691b6044820152606401610b19565b600080546001600160a01b038381166001600160a01b0319831617835516905b600a8110156125fa576001600160a01b0380831660009081526001602081815260408084208685528252808420805460ff19908116909155845490951684528282528084208685529091529091208054909216179055806125f2816143aa565b915050612592565b50600054604080516001600160a01b03808516825290921660208301527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09101610cc2565b6002600081905260046020526000805160206144f28339815191525460ff161561267b5760405162461bcd60e51b8152600401610b19906141fc565b6126853382611515565b6003600083600881111561269b5761269b6143db565b81526020019081526020016000206040516020016126b99190614006565b604051602081830303815290604052906126e65760405162461bcd60e51b8152600401610b199190614194565b50506023805460ff1916911515919091179055565b6008600081905260046020527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a45460ff16156127495760405162461bcd60e51b8152600401610b19906141fc565b6127533382611515565b60036000836008811115612769576127696143db565b81526020019081526020016000206040516020016127879190614006565b604051602081830303815290604052906127b45760405162461bcd60e51b8152600401610b199190614194565b506001600160a01b03831630148015906127dc5750601c546001600160a01b03848116911614155b6127e557600080fd5b6001600160a01b0383166000908152600f60205260409020805460ff1916831580159190911790915561285157602354604051630a5b654b60e11b81526001600160a01b03858116600483015260006024830152610100909204909116906314b6ca9690604401611422565b6023546001600160a01b038481166000818152600b602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401611422565b6008600081905260046020527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a45460ff16156128ed5760405162461bcd60e51b8152600401610b19906141fc565b6128f73382611515565b6003600083600881111561290d5761290d6143db565b815260200190815260200160002060405160200161292b9190614006565b604051602081830303815290604052906129585760405162461bcd60e51b8152600401610b199190614194565b50506001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b600081848411156129a95760405162461bcd60e51b8152600401610b199190614194565b5060006129b6848661433a565b95945050505050565b60275460009060ff16156129df576129d884848461306e565b90506112e9565b6129e98483613154565b6129f16131c1565b156129fe576129fe613210565b601e54158015612a1b5750601c546001600160a01b038481169116145b15612a4a576001600160a01b0384166000908152600b6020526040902054612a4257600080fd5b612a4a613764565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600b9091529190912054612a9c918490612985565b6001600160a01b0385166000908152600b6020526040812091909155612ac285856137a4565b612acc5782612ad7565b612ad78585856138fa565b6001600160a01b0385166000908152600b6020526040902054909150612afd9082612f4e565b6001600160a01b038086166000908152600b60209081526040808320949094559188168152600f909152205460ff16612ba6576023546001600160a01b038681166000818152600b602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b158015612b9357600080fd5b505af1925050508015612ba4575060015b505b6001600160a01b0384166000908152600f602052604090205460ff16612c3c576023546001600160a01b038581166000818152600b602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b158015612c2957600080fd5b505af1925050508015612c3a575060015b505b602354602480546040516001624d3b8760e01b0319815260048101919091526101009092046001600160a01b03169163ffb2c4799101600060405180830381600087803b158015612c8c57600080fd5b505af1925050508015612c9d575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ce391815260200190565b60405180910390a3506001949350505050565b60006112e983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612985565b6027805460ff19166001179055604080516002808252606082018352600092602083019080368337505060065482519293506001600160a01b031691839150600090612d8657612d86614407565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612dba57612dba614407565b6001600160a01b039283166020918202929092010152601b5460405163b6f9de9560e01b815291169063b6f9de95908590612e009060009086908890429060040161415f565b6000604051808303818588803b158015612e1957600080fd5b505af193505050508015612e2b575060015b612efe57612e37614433565b806308c379a01415612e8e5750612e4c61444f565b80612e575750612e90565b80604051602001612e689190613f7c565b60408051601f198184030181529082905262461bcd60e51b8252610b1991600401614194565b505b60405162461bcd60e51b815260206004820152603860248201527f4275796261636b206661696c656420776974686f757420616e206572726f722060448201527f6d6573736167652066726f6d2070616e63616b655377617000000000000000006064820152608401610b19565b604080518481526001600160a01b03841660208201527fe27ecc9c85b6367f7abddc4723456b31bb75434354f83adc03236515846f31e1910160405180910390a150506027805460ff1916905550565b600080612f5b83856142b5565b9050838110156112e95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b19565b600082612fbc57506000610d35565b6000612fc8838561431b565b905082612fd585836142f9565b146112e95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b19565b60006112e983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613999565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600b909152918220546130bf918490612985565b6001600160a01b038086166000908152600b602052604080822093909355908516815220546130ee9083612f4e565b6001600160a01b038085166000818152600b602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906131429086815260200190565b60405180910390a35060019392505050565b600a548111158061317d57506001600160a01b0382166000908152600e602052604090205460ff165b6131bd5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b19565b5050565b601c546000906001600160a01b031633148015906131e2575060275460ff16155b80156131f0575060255460ff165b801561133d575050602654306000908152600b6020526040902054101590565b6027805460ff19166001179055601954601a5460009161322f91610d3b565b61323b5760105461323e565b60005b9050600061326260026122c96014546122c986602654612fad90919063ffffffff16565b9050600061327b82602654612cf690919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106132b5576132b5614407565b6001600160a01b0392831660209182029290920101526006548251911690829060019081106132e6576132e6614407565b6001600160a01b039283166020918202929092010152601b5460405163791ac94760e01b81524792919091169063791ac9479061333090869060009087903090429060040161422b565b600060405180830381600087803b15801561334a57600080fd5b505af192505050801561335b575060015b61347557613367614433565b806308c379a014156133e1575061337c61444f565b8061338757506133e3565b7fc41a20ad8c23d3903584975786330c6ec73ccfcc657629f10237b792268b0e02816040516020016133b99190613fc1565b60408051601f19818403018152908290526133d391614194565b60405180910390a150613753565b505b7fc41a20ad8c23d3903584975786330c6ec73ccfcc657629f10237b792268b0e026040516134689060208082526039908201527f537761704261636b206661696c656420776974686f757420616e206572726f7260408201527f206d6573736167652066726f6d2070616e63616b655377617000000000000000606082015260800190565b60405180910390a1613753565b60006134814783612cf6565b9050600061349c61349388600261302c565b60145490612cf6565b905060006134b160026122c98481878d612fad565b905060006134ce836122c960125487612fad90919063ffffffff16565b905060006134eb846122c960135488612fad90919063ffffffff16565b9050602360019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561353d57600080fd5b505af19350505050801561354f575060015b506018546040516000916001600160a01b03169061753090849084818181858888f193505050503d80600081146135a2576040519150601f19603f3d011682016040523d82523d6000602084013e6135a7565b606091505b50509050806135f85760405162461bcd60e51b815260206004820152601e60248201527f72656365697665722072656a656374656420424e42207472616e7366657200006044820152606401610b19565b891561371957601b5460175460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c4016060604051808303818588803b15801561366957600080fd5b505af19350505050801561369a575060408051601f3d908101601f1916820190925261369791810190613e6f565b60015b6136dc5760408051600080825260208201527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506910160405180910390a1613719565b5050604080518c8152602081018790527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6040518981527fb39214ef4f33ea2d9d329fb67a4f17e7588bf6e00ed15a7967137ba819697a279060200160405180910390a15050505050505b50506027805460ff19169055505050565b43601e819055604080519182524260208301527f87dcd6626ffde0faf682a10e7b64aff36ea73a5470d5fa6cc7ebd372e4b19001910160405180910390a1565b6001600160a01b0382166000908152600d602052604081205460ff16806137e357506001600160a01b0382166000908152600d602052604090205460ff165b806137ee5750601e54155b156137fb57506000610d35565b6000601d80548060200260200160405190810160405280929190818152602001828054801561385357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613835575b5050505050905060005b81518110156138eb5781818151811061387857613878614407565b60200260200101516001600160a01b0316856001600160a01b031614806138c957508181815181106138ac576138ac614407565b60200260200101516001600160a01b0316846001600160a01b0316145b156138d957600192505050610d35565b806138e3816143aa565b91505061385d565b505060235460ff169392505050565b6000806139196016546122c9613912610a38886139c7565b8690612fad565b306000908152600b60205260409020549091506139369082612f4e565b306000818152600b6020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906139879085815260200190565b60405180910390a36129b68382612cf6565b600081836139ba5760405162461bcd60e51b8152600401610b199190614194565b5060006129b684866142f9565b600080601d805480602002602001604051908101604052809291908181526020018280548015613a2057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613a02575b5050505050905060005b8151811015613a8257818181518110613a4557613a45614407565b60200260200101516001600160a01b0316846001600160a01b03161415613a70575060019392505050565b80613a7a816143aa565b915050613a2a565b5060009392505050565b80358015158114613a9c57600080fd5b919050565b600082601f830112613ab257600080fd5b813567ffffffffffffffff811115613acc57613acc61441d565b604051613ae3601f8301601f19166020018261437d565b818152846020838601011115613af857600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613b2757600080fd5b81356112e9816144d9565b60008060408385031215613b4557600080fd5b8235613b50816144d9565b91506020830135613b60816144d9565b809150509250929050565b600080600060608486031215613b8057600080fd5b8335613b8b816144d9565b92506020840135613b9b816144d9565b929592945050506040919091013590565b600080600060408486031215613bc157600080fd5b8335613bcc816144d9565b9250602084013567ffffffffffffffff80821115613be957600080fd5b818601915086601f830112613bfd57600080fd5b813581811115613c0c57600080fd5b8760208260051b8501011115613c2157600080fd5b6020830194508093505050509250925092565b60008060408385031215613c4757600080fd5b8235613c52816144d9565b9150613c6060208401613a8c565b90509250929050565b60008060408385031215613c7c57600080fd5b8235613c87816144d9565b9150602083013560098110613b6057600080fd5b60008060408385031215613cae57600080fd5b8235613cb9816144d9565b9150602083013567ffffffffffffffff811115613cd557600080fd5b613ce185828601613aa1565b9150509250929050565b60008060408385031215613cfe57600080fd5b8235613d09816144d9565b946020939093013593505050565b600060208284031215613d2957600080fd5b6112e982613a8c565b60008060408385031215613d4557600080fd5b613d0983613a8c565b600060208284031215613d6057600080fd5b813567ffffffffffffffff811115613d7757600080fd5b613d8384828501613aa1565b949350505050565b60008060408385031215613d9e57600080fd5b823567ffffffffffffffff80821115613db657600080fd5b613dc286838701613aa1565b9350602085013591508082168214613dd957600080fd5b50809150509250929050565b600060208284031215613df757600080fd5b5035919050565b60008060408385031215613e1157600080fd5b82359150613c6060208401613a8c565b60008060408385031215613e3457600080fd5b50508035926020909101359150565b600080600060608486031215613e5857600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e8457600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215613eb657600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600081518084526020808501945080840160005b83811015613f195781516001600160a01b031687529582019590820190600101613ef4565b509495945050505050565b60008151808452613f3c816020860160208601614351565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b60008251613f72818460208701614351565b9190910192915050565b7f4275796261636b206661696c65642077697468206572726f7220000000000000815260008251613fb481601a850160208701614351565b91909101601a0192915050565b7f537761704261636b206661696c65642077697468206572726f72200000000000815260008251613ff981601b850160208701614351565b91909101601b0192915050565b7f4e6f7420617574686f72697a65642e20596f75206e656564207468652070657281526000602067036b4b9b9b4b7b7160c51b8184015260286000855481600182811c91508083168061405a57607f831692505b86831081141561407857634e487b7160e01b85526022600452602485fd5b80801561408c57600181146140a1576140d2565b60ff1985168a880152838a01870195506140d2565b60008b81526020902060005b858110156140c85781548c82018a01529084019089016140ad565b505086848b010195505b50939998505050505050505050565b6001600160a01b038516815260606020820181905281018390528284608083013760006080848301015260006080601f19601f860116830101905082604083015295945050505050565b6001600160a01b038416815260606020820181905260009061414f90830185613f24565b9050826040830152949350505050565b8481526080602082015260006141786080830186613ee0565b6001600160a01b03949094166040830152506060015292915050565b6020815260006112e96020830184613f24565b6040815260006141ba6040830185613f24565b90508260208301529392505050565b6060815260006141dc6060830186613f24565b905083602083015267ffffffffffffffff83166040830152949350505050565b6020808252601590820152742832b936b4b9b9b4b7b71034b9903637b1b5b2b21760591b604082015260600190565b85815284602082015260a06040820152600061424a60a0830186613ee0565b6001600160a01b0394909416606083015250608001529392505050565b6000808335601e1984360301811261427e57600080fd5b83018035915067ffffffffffffffff82111561429957600080fd5b6020019150368190038213156142ae57600080fd5b9250929050565b600082198211156142c8576142c86143c5565b500190565b600067ffffffffffffffff8083168185168083038211156142f0576142f06143c5565b01949350505050565b60008261431657634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614335576143356143c5565b500290565b60008282101561434c5761434c6143c5565b500390565b60005b8381101561436c578181015183820152602001614354565b838111156124b35750506000910152565b601f8201601f1916810167ffffffffffffffff811182821017156143a3576143a361441d565b6040525050565b60006000198214156143be576143be6143c5565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561444c5760046000803e5060005160e01c5b90565b600060443d101561445d5790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561448d57505050505090565b82850191508151818111156144a55750505050505090565b843d87010160208285010111156144bf5750505050505090565b6144ce6020828601018761437d565b509095945050505050565b6001600160a01b03811681146144ee57600080fd5b5056fe91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a7a26469706673582212200c1d716326fd82eea092c6941003255112a26b67882cef60b8b17ab4531bc4e664736f6c634300080700336080604052600180546001600160a01b0319908116733ee2200efb3400fabb9aacf31297cbdd1d435d47179091556002805490911673bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c1790556ec097ce7bc90715b34b9f1000000000600c55611c20600d55670429d069189e0000600e5534801561007d57600080fd5b5060405161104838038061104883398101604081905261009c916100f6565b6001600160a01b0381166100c4577310ed43c718714eb63d5aa57b78b54704e256024e6100c6565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610126565b60006020828403121561010857600080fd5b81516001600160a01b038116811461011f57600080fd5b9392505050565b610f13806101356000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610224578063f0fc6bca1461023a578063ffb2c4791461024f578063ffd49c841461026f57600080fd5b8063ce7c2ac2146101af578063d0e30db014610206578063e2d2e2191461020e57600080fd5b80632d48e896116100bb5780632d48e8961461014d5780633a98ef391461016d5780634fab0ae814610183578063997664d71461019957600080fd5b806311ce023d146100e257806314b6ca961461010b57806328fd31981461012d575b600080fd5b3480156100ee57600080fd5b506100f8600c5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b610126366004610cb1565b610285565b005b34801561013957600080fd5b506100f8610148366004610c96565b6103fd565b34801561015957600080fd5b5061012b610168366004610d2f565b610486565b34801561017957600080fd5b506100f860085481565b34801561018f57600080fd5b506100f8600e5481565b3480156101a557600080fd5b506100f860095481565b3480156101bb57600080fd5b506101eb6101ca366004610c96565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104a8565b34801561021a57600080fd5b506100f8600b5481565b34801561023057600080fd5b506100f8600a5481565b34801561024657600080fd5b5061012b6106f5565b34801561025b57600080fd5b5061012b61026a366004610cfd565b610700565b34801561027b57600080fd5b506100f8600d5481565b6000546001600160a01b0316331461029c57600080fd5b6001600160a01b038216600090815260076020526040902054156102c3576102c382610800565b6000811180156102e957506001600160a01b038216600090815260076020526040902054155b1561034f57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169091179055610382565b8015801561037457506001600160a01b03821660009081526007602052604090205415155b15610382576103828261092b565b6001600160a01b0382166000908152600760205260409020546008546103b39183916103ad91610a40565b90610a8b565b6008556001600160a01b03821660009081526007602052604090208190556103da81610aef565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b03811660009081526007602052604081205461042257506000919050565b6001600160a01b03821660009081526007602052604081205461044490610aef565b6001600160a01b038416600090815260076020526040902060010154909150808211610474575060009392505050565b61047e8282610a40565b949350505050565b6000546001600160a01b0316331461049d57600080fd5b600d91909155600e55565b6000546001600160a01b031633146104bf57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561050357600080fd5b505afa158015610517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053b9190610d16565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061058157610581610ec7565b6001600160a01b03928316602091820292909201015260018054835192169183919081106105b1576105b1610ec7565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de959034906105f790600090869030904290600401610d51565b6000604051808303818588803b15801561061057600080fd5b505af1158015610624573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152306004820152600094506106b393508692506001600160a01b03909116906370a082319060240160206040518083038186803b15801561067557600080fd5b505afa158015610689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ad9190610d16565b90610a40565b6009549091506106c39082610a8b565b600955600854600c546106ed916106e4916106de9085610b0c565b90610b8b565b600b5490610a8b565b600b55505050565b6106fe33610800565b565b6000546001600160a01b0316331461071757600080fd5b60045480610723575050565b6000805a905060005b848310801561073a57508381105b156107f95783600f541061074e576000600f555b6107806004600f548154811061076657610766610ec7565b6000918252602090912001546001600160a01b0316610bcd565b156107b7576107b76004600f548154811061079d5761079d610ec7565b6000918252602090912001546001600160a01b0316610800565b6107cc6107c55a8490610a40565b8490610a8b565b92505a600f805491935060006107e183610e80565b919050555080806107f190610e80565b91505061072c565b5050505050565b6001600160a01b0381166000908152600760205260409020546108205750565b600061082b826103fd565b9050801561092757600a546108409082610a8b565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b15801561089157600080fd5b505af11580156108a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c99190610cdb565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546108fd9082610a8b565b6001600160a01b03831660009081526007602052604090206002810191909155546103da90610aef565b5050565b6004805461093b90600190610e69565b8154811061094b5761094b610ec7565b60009182526020808320909101546001600160a01b038481168452600590925260409092205460048054929093169291811061098957610989610ec7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916109d590600190610e69565b815481106109e5576109e5610ec7565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610a1b57610a1b610eb1565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610a8283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c12565b90505b92915050565b600080610a988385610e10565b905083811015610a825760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610a85600c546106de600b5485610b0c90919063ffffffff16565b600082610b1b57506000610a85565b6000610b278385610e4a565b905082610b348583610e28565b14610a825760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ae6565b6000610a8283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610c4c565b600d546001600160a01b03821660009081526006602052604081205490914291610bf79190610e10565b108015610a855750600e54610c0b836103fd565b1192915050565b60008184841115610c365760405162461bcd60e51b8152600401610ae69190610dbb565b506000610c438486610e69565b95945050505050565b60008183610c6d5760405162461bcd60e51b8152600401610ae69190610dbb565b506000610c438486610e28565b80356001600160a01b0381168114610c9157600080fd5b919050565b600060208284031215610ca857600080fd5b610a8282610c7a565b60008060408385031215610cc457600080fd5b610ccd83610c7a565b946020939093013593505050565b600060208284031215610ced57600080fd5b81518015158114610a8257600080fd5b600060208284031215610d0f57600080fd5b5035919050565b600060208284031215610d2857600080fd5b5051919050565b60008060408385031215610d4257600080fd5b50508035926020909101359150565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610d9b5784516001600160a01b031683529383019391830191600101610d76565b50506001600160a01b039690961660408501525050506060015292915050565b600060208083528351808285015260005b81811015610de857858101830151858201604001528201610dcc565b81811115610dfa576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610e2357610e23610e9b565b500190565b600082610e4557634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610e6457610e64610e9b565b500290565b600082821015610e7b57610e7b610e9b565b500390565b6000600019821415610e9457610e94610e9b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea2646970667358221220fa00818e07e1ddec3bd9adb8e7ec883e71d71c0c3079d393b98c476b39f03edd64736f6c63430008070033

Deployed ByteCode Sourcemap

19307:16340:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34874:115;;;;;;;;;;;;;:::i;:::-;;21034:50;;;;;;;;;;;;;;;;;;;20649:25:1;;;20637:2;20622:18;21034:50:0;;;;;;;;11127:157;;;;;;;;;;-1:-1:-1;11127:157:0;;;;;:::i;:::-;;:::i;22421:80::-;;;;;;;;;;-1:-1:-1;22493:5:0;;;;;;;;;;;;-1:-1:-1;;;22493:5:0;;;;22421:80;;;;;;;:::i;12368:389::-;;;;;;;;;;-1:-1:-1;12368:389:0;;;;;:::i;:::-;;:::i;22843:216::-;;;;;;;;;;-1:-1:-1;22843:216:0;;;;;:::i;:::-;;:::i;:::-;;;14088:14:1;;14081:22;14063:41;;14051:2;14036:18;22843:216:0;13923:187:1;34487:150:0;;;;;;;;;;-1:-1:-1;34487:150:0;;;;;:::i;:::-;;:::i;22151:88::-;;;;;;;;;;-1:-1:-1;22224:12:0;;22151:88;;9501:476;;;;;;;;;;-1:-1:-1;9501:476:0;;;;;:::i;:::-;;:::i;8219:293::-;;;;;;;;;;-1:-1:-1;8219:293:0;;;;;:::i;:::-;;:::i;33501:222::-;;;;;;;;;;-1:-1:-1;33501:222:0;;;;;:::i;:::-;;:::i;30779:381::-;;;;;;;;;;-1:-1:-1;30779:381:0;;;;;:::i;:::-;;:::i;23355:364::-;;;;;;;;;;-1:-1:-1;23355:364:0;;;;;:::i;:::-;;:::i;34150:142::-;;;;;;;;;;;;;:::i;33731:222::-;;;;;;;;;;-1:-1:-1;33731:222:0;;;;;:::i;:::-;;:::i;10037:103::-;;;;;;;;;;-1:-1:-1;10037:103:0;;;;;:::i;:::-;10092:4;10127:5;-1:-1:-1;;;;;10116:16:0;;;10127:5;;10116:16;;10037:103;22245:80;;;;;;;;;;-1:-1:-1;22245:80:0;;19749:1;21946:36:1;;21934:2;21919:18;22245:80:0;21804:184:1;35180:142:0;;;;;;;;;;-1:-1:-1;35180:142:0;;;;;:::i;:::-;;:::i;23067:116::-;;;;;;;;;;-1:-1:-1;23067:116:0;;;;;:::i;:::-;;:::i;10461:154::-;;;;;;;;;;-1:-1:-1;10461:154:0;;;;;:::i;:::-;;:::i;20869:41::-;;;;;;;;;;-1:-1:-1;20869:41:0;;;;;;;;31400:184;;;;;;;;;;-1:-1:-1;31400:184:0;;;;;:::i;:::-;;:::i;31989:150::-;;;;;;;;;;-1:-1:-1;31989:150:0;;;;;:::i;:::-;;:::i;29635:335::-;;;;;;;;;;-1:-1:-1;29635:335:0;;;;;:::i;:::-;;:::i;20997:30::-;;;;;;;;;;-1:-1:-1;20997:30:0;;;;;;;;22591:105;;;;;;;;;;-1:-1:-1;22591:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;22675:18:0;22657:7;22675:18;;;:9;:18;;;;;;;22591:105;19823:47;;;;;;;;;;;;;;;;11610:166;;;;;;;;;;-1:-1:-1;11610:166:0;;;;;:::i;:::-;;:::i;9061:361::-;;;;;;;;;;-1:-1:-1;9061:361:0;;;;;:::i;:::-;;:::i;32313:702::-;;;;;;;;;;-1:-1:-1;32313:702:0;;;;;:::i;:::-;;:::i;22507:78::-;;;;;;;;;;-1:-1:-1;22559:7:0;22577:5;-1:-1:-1;;;;;22577:5:0;22507:78;;;-1:-1:-1;;;;;11433:32:1;;;11415:51;;11403:2;11388:18;22507:78:0;11269:203:1;5407:20:0;;;;;;;;;;-1:-1:-1;5407:20:0;;;;-1:-1:-1;;;;;5407:20:0;;;22331:84;;;;;;;;;;-1:-1:-1;22405:7:0;;;;;;;;;;;;-1:-1:-1;;;22405:7:0;;;;22331:84;;11877:406;;;;;;;;;;-1:-1:-1;11877:406:0;;;;;:::i;:::-;;:::i;33961:177::-;;;;;;;;;;-1:-1:-1;33961:177:0;;;;;:::i;:::-;;:::i;33023:267::-;;;;;;;;;;-1:-1:-1;33023:267:0;;;;;:::i;:::-;;:::i;23191:156::-;;;;;;;;;;-1:-1:-1;23191:156:0;;;;;:::i;:::-;;:::i;8589:408::-;;;;;;;;;;-1:-1:-1;8589:408:0;;;;;:::i;:::-;;:::i;29982:128::-;;;;;;;;;;;;;:::i;20612:22::-;;;;;;;;;;-1:-1:-1;20612:22:0;;;;;:::i;:::-;;:::i;20643:25::-;;;;;;;;;;;;;;;;34737:125;;;;;;;;;;-1:-1:-1;34737:125:0;;;;;:::i;:::-;;:::i;10211:179::-;;;;;;;;;;-1:-1:-1;10211:179:0;;;;;:::i;:::-;;:::i;20379:36::-;;;;;;;;;;-1:-1:-1;20379:36:0;;;;-1:-1:-1;;;;;20379:36:0;;;34300:179;;;;;;;;;;-1:-1:-1;34300:179:0;;;;;:::i;:::-;;:::i;26050:430::-;;;;;;;;;;;;;:::i;22702:133::-;;;;;;;;;;-1:-1:-1;22702:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;22804:19:0;;;22786:7;22804:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;22702:133;33298:195;;;;;;;;;;-1:-1:-1;33298:195:0;;;;;:::i;:::-;;:::i;11356:186::-;;;;;;;;;;-1:-1:-1;11356:186:0;;;;;:::i;:::-;;:::i;20422:35::-;;;;;;;;;;-1:-1:-1;20422:35:0;;;;-1:-1:-1;;;;;20422:35:0;;;34645:80;;;;;;;;;;;;;:::i;25708:334::-;;;;;;;;;;-1:-1:-1;25708:334:0;;;;;:::i;:::-;;:::i;10706:343::-;;;;;;;;;;-1:-1:-1;10706:343:0;;;;;:::i;:::-;;:::i;35001:159::-;;;;;;;;;;-1:-1:-1;35001:159:0;;;;;:::i;:::-;;:::i;31592:389::-;;;;;;;;;;-1:-1:-1;31592:389:0;;;;;:::i;:::-;;:::i;32147:158::-;;;;;;;;;;-1:-1:-1;32147:158:0;;;;;:::i;:::-;;:::i;20550:24::-;;;;;;;;;;-1:-1:-1;20550:24:0;;;;-1:-1:-1;;;;;20550:24:0;;;34874:115;34923:34;7891:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7891:47:0;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;;;;;;;;;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;;34970:5:::1;:11;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;34970:11:0;;;;;-1:-1:-1;;;;;;34970:11:0::1;::::0;;;;;-1:-1:-1;34874:115:0:o;11127:157::-;11212:7;11239:21;11261:14;11239:37;;;;;;:::i;:::-;;;;;;;;;;;;;;11232:44;;11127:157;;;:::o;12368:389::-;12476:39;12500:14;12476:23;:39::i;:::-;12458:15;:57;12450:114;;;;-1:-1:-1;;;12450:114:0;;18823:2:1;12450:114:0;;;18805:21:1;18862:2;18842:18;;;18835:30;18901:34;18881:18;;;18874:62;-1:-1:-1;;;18952:18:1;;;18945:41;19003:19;;12450:114:0;18621:407:1;12450:114:0;12575:17;12595:21;12617:14;12595:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12683:5;12643:28;;;:17;:28;;;;;;:45;;-1:-1:-1;;12643:45:0;;;12595:37;-1:-1:-1;12704:45:0;;;;12723:14;;12595:37;;12704:45;:::i;:::-;;;;;;;;12439:318;12368:389;:::o;22843:216::-;22947:10;22918:4;22935:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;22935:32:0;;;;;;;;;;:41;;;22992:37;22918:4;;22935:32;;22992:37;;;;22970:6;20649:25:1;;20637:2;20622:18;;20503:177;22992:37:0;;;;;;;;-1:-1:-1;23047:4:0;22843:216;;;;;:::o;34487:150::-;34567:4;34623:6;34591:29;34611:8;34591:19;:29::i;:::-;:38;;34487:150;-1:-1:-1;;;34487:150:0:o;9501:476::-;9613:22;7891:38;;;;;;;;;:47;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;-1:-1:-1;9663:5:0::1;::::0;-1:-1:-1;;;;;9656:12:0;;::::1;9663:5:::0;::::1;9656:12;;9648:48;;;::::0;-1:-1:-1;;;9648:48:0;;17644:2:1;9648:48:0::1;::::0;::::1;17626:21:1::0;17683:2;17663:18;;;17656:30;-1:-1:-1;;;17702:18:1;;;17695:53;17765:18;;9648:48:0::1;17442:347:1::0;9648:48:0::1;9714:9;9709:261;9725:26:::0;;::::1;9709:261;;;9773:17;9793:21;9815:15;;9831:1;9815:18;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;9793:41;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;9849:19:0;::::1;9882:5;9849:19:::0;;;:14:::1;:19:::0;;;;;:30;;;;;;;;:38;;-1:-1:-1;;9849:38:0::1;::::0;;9793:41;-1:-1:-1;9907:51:0::1;9849:19:::0;9928:15;;9944:1;9928:18;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;9948:9;9907:51;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;9753:3:0;::::1;::::0;::::1;:::i;:::-;;;;9709:261;;;;9501:476:::0;;;;:::o;8219:293::-;8305:20;7891:38;;;;:17;:38;;;:47;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;;8338:17:::1;8358:21;8380:14;8358:37;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;8406:19:0;::::1;;::::0;;;8439:4:::1;8406:19:::0;;;;;;:30;;;;;;;;;;:37;;-1:-1:-1;;8406:37:0::1;::::0;;::::1;::::0;;8358;-1:-1:-1;8459:45:0::1;::::0;::::1;::::0;8421:3;;8478:14;;8358:37;;8459:45:::1;:::i;:::-;;;;;;;;8327:185;8219:293:::0;;;:::o;33501:222::-;33591:34;7891:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7891:47:0;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;33638:15:0::1;:25:::0;;;;33674:26:::1;:41:::0;33501:222::o;30779:381::-;30896:34;7891:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7891:47:0;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;-1:-1:-1;30978:1:0::1;30951:23;30963:11:::0;30951:9;:23:::1;:::i;:::-;:28;;:55;;;;;30995:11;30983:9;:23;30951:55;30943:64;;;::::0;::::1;;-1:-1:-1::0;31018:26:0::1;:38:::0;;;;31067:28:::1;:42:::0;31120:23:::1;:32:::0;30779:381::o;23355:364::-;-1:-1:-1;;;;;23475:19:0;;23455:4;23475:19;;;:11;:19;;;;;;;;23495:10;23475:31;;;;;;;;-1:-1:-1;;23475:46:0;23472:180;;23571:69;;;;;;;;;;;-1:-1:-1;;;23571:69:0;;;;;;;;-1:-1:-1;;;;;23571:19:0;;-1:-1:-1;23571:19:0;;;:11;:19;;;;;23591:10;23571:31;;;;;;;;;;:69;;23607:6;;23571:35;:69::i;:::-;-1:-1:-1;;;;;23537:19:0;;;;;;:11;:19;;;;;;;;23557:10;23537:31;;;;;;;:103;23472:180;23671:40;23685:6;23693:9;23704:6;23671:13;:40::i;:::-;23664:47;;23355:364;;;;;;:::o;34150:142::-;34278:4;;-1:-1:-1;;;;;34278:4:0;34203:7;22675:18;;;:9;:18;;;;;;34230:54;;34257:4;;-1:-1:-1;;;;;34257:4:0;22657:7;22675:18;;;:9;:18;;;;;;34230:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;34223:61;;34150:142;:::o;33731:222::-;33833:34;7891:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7891:47:0;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;-1:-1:-1;33880:11:0::1;::::0;:65:::1;::::0;-1:-1:-1;;;33880:65:0;;::::1;::::0;::::1;15046:25:1::0;;;15087:18;;;15080:34;;;33880:11:0::1;::::0;;::::1;-1:-1:-1::0;;;;;33880:11:0::1;::::0;:35:::1;::::0;15019:18:1;;33880:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33731:222:::0;;;:::o;35180:142::-;35245:34;7891:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7891:47:0;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;35292:10:0::1;:22:::0;35180:142::o;23067:116::-;23122:4;23146:29;23154:7;-1:-1:-1;;23146:7:0;:29::i;10461:154::-;-1:-1:-1;;;;;10567:19:0;;10543:4;10567:19;;;:14;:19;;;;;10543:4;10595:10;10587:19;;;;;;;;:::i;:::-;10567:40;;;;;;;;;;;-1:-1:-1;10567:40:0;;;;;10461:154;-1:-1:-1;;;10461:154:0:o;31400:184::-;31459:34;7891:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7891:47:0;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;;31539:4:::1;31524:12;;:19;;;;:::i;:::-;31514:6;:29;;31506:38;;;::::0;::::1;;-1:-1:-1::0;31555:12:0::1;:21:::0;31400:184::o;31989:150::-;32065:25;7891:38;;;;:17;:38;;;:47;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;32103:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;32103:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31989:150::o;29635:335::-;29729:18;7891:38;;;;:17;:38;;;:47;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;-1:-1:-1;29778:4:0::1;::::0;29760:23:::1;::::0;29770:6;;-1:-1:-1;;;;;29778:4:0::1;29760:9;:23::i;:::-;29797:24;29794:169;;;29868:15;29837:28;:46:::0;29927:23:::1;::::0;29903:48:::1;::::0;20649:25:1;;;29903:48:0::1;::::0;20637:2:1;20622:18;29903:48:0::1;;;;;;;29794:169;29635:335:::0;;;:::o;11610:166::-;11679:4;11703:17;:56;11721:21;11743:14;11721:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;11703:56;;;;;;;;;;-1:-1:-1;11703:56:0;:65;;;;;-1:-1:-1;;11610:166:0:o;9061:361::-;9149:22;7891:38;;;;;;;;;:47;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;-1:-1:-1;9199:5:0::1;::::0;-1:-1:-1;;;;;9192:12:0;;::::1;9199:5:::0;::::1;9192:12;;9184:48;;;::::0;-1:-1:-1;;;9184:48:0;;17644:2:1;9184:48:0::1;::::0;::::1;17626:21:1::0;17683:2;17663:18;;;17656:30;-1:-1:-1;;;17702:18:1;;;17695:53;17765:18;;9184:48:0::1;17442:347:1::0;9184:48:0::1;9245:17;9265:21;9287:14;9265:37;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;9313:19:0;::::1;9346:5;9313:19:::0;;;:14:::1;:19:::0;;;;;:30;;;;;;;;;:38;;-1:-1:-1;;9313:38:0::1;::::0;;9265:37;-1:-1:-1;9367:47:0::1;::::0;::::1;::::0;9328:3;;9388:14;;9265:37;;9367:47:::1;:::i;32313:702::-:0;32492:34;7891:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7891:47:0;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;-1:-1:-1;32539:12:0::1;:28:::0;;;32578:10:::1;:24:::0;;;32613:13:::1;:30:::0;;;32654:12:::1;:28:::0;;;32707:69:::1;32669:13:::0;32707:50:::1;32629:14:::0;32707:50;32554:13;32591:11;32707:17:::1;:30::i;:::-;:34:::0;::::1;:50::i;:69::-;32693:11;:83:::0;32787:14:::1;:32:::0;;;32830:12:::1;:28:::0;;;32892:19:::1;32909:2;32804:15:::0;32892:19:::1;:::i;:::-;32877:11;;:34;;32869:63;;;::::0;-1:-1:-1;;;32869:63:0;;17299:2:1;32869:63:0::1;::::0;::::1;17281:21:1::0;17338:2;17318:18;;;17311:30;-1:-1:-1;;;17357:18:1;;;17350:46;17413:18;;32869:63:0::1;17097:340:1::0;32869:63:0::1;32984:1;32967:14;;:18;;;;:::i;:::-;32951:12;;:34;;32943:64;;;::::0;-1:-1:-1;;;32943:64:0;;19933:2:1;32943:64:0::1;::::0;::::1;19915:21:1::0;19972:2;19952:18;;;19945:30;-1:-1:-1;;;19991:18:1;;;19984:47;20048:18;;32943:64:0::1;19731:341:1::0;11877:406:0;11973:26;7891:38;;;;:17;:38;;;:47;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;;12012:17:::1;12032:21;12054:14;12032:37;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;;-1:-1:-1;12080:17:0::1;12100:30;12126:4:::0;12107:15:::1;12100:30;:::i;:::-;12172:32;::::0;;;;::::1;::::0;;12187:4:::1;12172:32:::0;;::::1;::::0;;::::1;;::::0;;::::1;::::0;;;-1:-1:-1;12141:28:0;;;:17:::1;:28:::0;;;;;;:63;;;;;;-1:-1:-1;;12141:63:0;;;;::::1;;-1:-1:-1::0;;12141:63:0;;::::1;::::0;;;::::1;;;::::0;;12220:55;12172:32;;-1:-1:-1;12220:55:0::1;::::0;::::1;::::0;12237:14;;12141:28;;12172:32;;12220:55:::1;:::i;:::-;;;;;;;;12001:282;;11877:406:::0;;;:::o;33961:177::-;34029:34;7891:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7891:47:0;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;;34091:7:::1;34084:3;:14;;34076:23;;;::::0;::::1;;-1:-1:-1::0;34110:14:0::1;:20:::0;33961:177::o;33023:267::-;33134:34;7891:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7891:47:0;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;33181:21:0::1;:46:::0;;-1:-1:-1;;;;;33181:46:0;;::::1;-1:-1:-1::0;;;;;;33181:46:0;;::::1;;::::0;;;33238:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;33023:267::o;23191:156::-;23271:4;23295:44;23309:10;23321:9;23332:6;23295:13;:44::i;8589:408::-;8699:20;7891:38;;;;:17;:38;;;:47;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;;8737:9:::1;8732:258;8748:26:::0;;::::1;8732:258;;;8796:17;8816:21;8838:15;;8854:1;8838:18;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;8816:41;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;8872:19:0;::::1;;::::0;;;8905:4:::1;8872:19:::0;;;;;;:30;;;;;;;;;;:37;;-1:-1:-1;;8872:37:0::1;::::0;;::::1;::::0;;;8816:41;-1:-1:-1;8929:49:0::1;8872:19:::0;8948:15;;8964:1;8948:18;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;8968:9;8929:49;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;8776:3:0;::::1;::::0;::::1;:::i;:::-;;;;8732:258;;29982:128:::0;30039:18;7891:38;;;;:17;:38;;;:47;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;30101:1:0::1;30070:28;:32:::0;29982:128::o;20612:22::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20612:22:0;;-1:-1:-1;20612:22:0;:::o;34737:125::-;34791:34;7891:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7891:47:0;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;34838:5:0::1;:16:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;34838:16:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;34838:16:0::1;-1:-1:-1::0;;;;;34838:16:0;;;::::1;::::0;;;::::1;::::0;;34737:125::o;10211:179::-;-1:-1:-1;;;;;10324:19:0;;10300:4;10324:19;;;:14;:19;;;;;;10344:37;;10300:4;;10344:21;;:37;;10366:14;;10344:37;:::i;:::-;;;;;;;;;;;;;;;;;10324:58;;;;;;;;;;-1:-1:-1;10324:58:0;;;;;10211:179;-1:-1:-1;;;10211:179:0:o;34300:::-;34368:7;34395:76;34448:22;:20;:22::i;:::-;34418:16;;-1:-1:-1;;;;;34418:16:0;22657:7;22675:18;;;:9;:18;;;;;;34395:48;;34408:34;;34440:1;34408:31;:34::i;:::-;34395:8;;:12;:48::i;:::-;:52;;:76::i;26050:430::-;26099:7;26119:13;26135:12;;26119:28;;26158:21;26182:78;26244:15;26182:57;26215:23;;26182:28;;:32;;:57;;;;:::i;:78::-;26158:102;;26271:19;26293:88;26372:8;26293:74;26338:28;;26293:40;26306:26;;26293:8;:12;;:40;;;;:::i;:88::-;26271:110;;26399:73;26412:59;26447:23;;26412:30;26428:13;26412:11;:15;;:30;;;;:::i;:59::-;26399:8;;:12;:73::i;:::-;26392:80;;;;;26050:430;:::o;33298:195::-;33382:34;7891:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7891:47:0;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;33429:11:0::1;:22:::0;;-1:-1:-1;;33429:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;33462:13:::1;:23:::0;33298:195::o;11356:186::-;11440:7;11467:17;:56;11485:21;11507:14;11485:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;11467:56;;;;;;;;;;-1:-1:-1;11467:56:0;:67;;;;;;;;-1:-1:-1;;11356:186:0:o;34645:80::-;34690:11;;;;;;;;;-1:-1:-1;;;;;34690:11:0;-1:-1:-1;;;;;34690:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34645:80::o;25708:334::-;25764:7;25805:12;25787:10;;25800:1;25787:14;;;;:::i;:::-;:30;25784:67;;25827:14;;:21;;25846:1;25827:18;:21::i;25784:67::-;25864:7;:86;;;;;25935:15;25875:57;25908:23;;25875:28;;:32;;:57;;;;:::i;:::-;:75;25864:86;25861:120;;;25960:18;:16;:18::i;25861:120::-;25998:7;:36;;26023:11;;25998:36;;;-1:-1:-1;;26008:12:0;;;25708:334::o;10706:343::-;10092:4;10127:5;-1:-1:-1;;;;;10127:5:0;7692:10;10116:16;7676:51;;;;-1:-1:-1;;;7676:51:0;;19235:2:1;7676:51:0;;;19217:21:1;19274:2;19254:18;;;19247:30;-1:-1:-1;;;19293:18:1;;;19286:49;19352:18;;7676:51:0;19033:343:1;7676:51:0;10782:16:::1;10801:5:::0;;-1:-1:-1;;;;;10817:11:0;;::::1;-1:-1:-1::0;;;;;;10817:11:0;::::1;;::::0;;10801:5:::1;::::0;10839:150:::1;5580:2;10855:1;:19;10839:150;;;-1:-1:-1::0;;;;;10896:24:0;;::::1;10926:5;10896:24:::0;;;:14:::1;:24;::::0;;;;;;;:27;;;;;;;;:35;;-1:-1:-1;;10896:35:0;;::::1;::::0;;;10961:5;;;;::::1;10946:21:::0;;;;;;;;:24;;;;;;;;;:31;;;;::::1;;::::0;;10921:1;10876:3:::1;10921:1:::0;10876:3:::1;:::i;:::-;;;;10839:150;;;-1:-1:-1::0;11035:5:0::1;::::0;11004:37:::1;::::0;;-1:-1:-1;;;;;11707:15:1;;;11689:34;;11035:5:0;;::::1;11754:2:1::0;11739:18;;11732:43;11004:37:0::1;::::0;11624:18:1;11004:37:0::1;11477:304:1::0;35001:159:0;35073:34;7891:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7891:47:0;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;35120:21:0::1;:32:::0;;-1:-1:-1;;35120:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35001:159::o;31592:389::-;31673:25;7891:38;;;;:17;:38;;;:47;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;31719:23:0;::::1;31737:4;31719:23;::::0;::::1;::::0;:53:::1;;-1:-1:-1::0;31756:16:0::1;::::0;-1:-1:-1;;;;;31746:26:0;;::::1;31756:16:::0;::::1;31746:26;;31719:53;31711:62;;;::::0;::::1;;-1:-1:-1::0;;;;;31784:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;31784:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;31828:146:::1;;31853:11;::::0;:31:::1;::::0;-1:-1:-1;;;31853:31:0;;-1:-1:-1;;;;;11986:32:1;;;31853:31:0::1;::::0;::::1;11968:51:1::0;31882:1:0::1;12035:18:1::0;;;12028:34;31853:11:0::1;::::0;;::::1;::::0;;::::1;::::0;:20:::1;::::0;11941:18:1;;31853:31:0::1;11786:282:1::0;31828:146:0::1;31915:11;::::0;-1:-1:-1;;;;;31944:17:0;;::::1;;::::0;;;:9:::1;:17;::::0;;;;;;;31915:47;;-1:-1:-1;;;31915:47:0;;::::1;::::0;::::1;11968:51:1::0;;;;12035:18;;;12028:34;31915:11:0::1;::::0;;::::1;;::::0;:20:::1;::::0;11941:18:1;;31915:47:0::1;11786:282:1::0;32147:158:0;32227:25;7891:38;;;;:17;:38;;;:47;;;7890:48;7882:82;;;;-1:-1:-1;;;7882:82:0;;;;;;;:::i;:::-;7983:39;7999:10;8011;7983:15;:39::i;:::-;8092:21;:42;8122:10;8114:19;;;;;;;;:::i;:::-;8092:42;;;;;;;;;;;8031:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7975:162;;;;;-1:-1:-1;;;7975:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;32265:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;32265:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32147:158::o;1595:192::-;1681:7;1717:12;1709:6;;;;1701:29;;;;-1:-1:-1;;;1701:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1741:9:0;1753:5;1757:1;1753;:5;:::i;:::-;1741:17;1595:192;-1:-1:-1;;;;;1595:192:0:o;23727:1027::-;23841:6;;23819:4;;23841:6;;23838:63;;;23857:41;23872:6;23880:9;23891:6;23857:14;:41::i;:::-;23850:48;;;;23838:63;23921:28;23934:6;23942;23921:12;:28::i;:::-;23965:16;:14;:16::i;:::-;23962:35;;;23984:10;:8;:10::i;:::-;31235;;:15;;;24012:44;;-1:-1:-1;24040:16:0;;-1:-1:-1;;;;;24027:29:0;;;24040:16;;24027:29;24012:44;24009:93;;;-1:-1:-1;;;;;24067:17:0;;24087:1;24067:17;;;:9;:17;;;;;;24059:30;;;;;;24091:8;:6;:8::i;:::-;24134:53;;;;;;;;;;;-1:-1:-1;;;24134:53:0;;;;;;;;-1:-1:-1;;;;;24134:17:0;;-1:-1:-1;24134:17:0;;;:9;:17;;;;;;;;:53;;24156:6;;24134:21;:53::i;:::-;-1:-1:-1;;;;;24114:17:0;;;;;;:9;:17;;;;;:73;;;;24225:32;24124:6;24247:9;24225:13;:32::i;:::-;:78;;24297:6;24225:78;;;24260:34;24268:6;24276:9;24287:6;24260:7;:34::i;:::-;-1:-1:-1;;;;;24337:20:0;;;;;;:9;:20;;;;;;24200:103;;-1:-1:-1;24337:40:0;;24200:103;24337:24;:40::i;:::-;-1:-1:-1;;;;;24314:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;24394:24;;;;;:16;:24;;;;;;;24390:96;;24425:11;;-1:-1:-1;;;;;24454:17:0;;;;;;;:9;:17;;;;;;;;24425:47;;-1:-1:-1;;;24425:47:0;;;;;11968:51:1;;;;12035:18;;;12028:34;24425:11:0;;;;;;:20;;11941:18:1;;24425:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24421:63;;-1:-1:-1;;;;;24500:27:0;;;;;;:16;:27;;;;;;;;24496:105;;24534:11;;-1:-1:-1;;;;;24566:20:0;;;;;;;:9;:20;;;;;;;;24534:53;;-1:-1:-1;;;24534:53:0;;;;;11968:51:1;;;;12035:18;;;12028:34;24534:11:0;;;;;;:20;;11941:18:1;;24534:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24530:69;;24617:11;;24637:14;;;24617:35;;-1:-1:-1;;;;;;24617:35:0;;;;;20649:25:1;;;;24617:11:0;;;;-1:-1:-1;;;;;24617:11:0;;:19;;20622:18:1;24617:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24613:51;24698:9;-1:-1:-1;;;;;24681:43:0;24690:6;-1:-1:-1;;;;;24681:43:0;;24709:14;24681:43;;;;20649:25:1;;20637:2;20622:18;;20503:177;24681:43:0;;;;;;;;-1:-1:-1;24742:4:0;;23727:1027;-1:-1:-1;;;;23727:1027:0:o;1453:136::-;1511:7;1538:43;1542:1;1545;1538:43;;;;;;;;;;;;;;;;;:3;:43::i;30118:653::-;21140:6;:13;;-1:-1:-1;;21140:13:0;21149:4;21140:13;;;30218:16:::1;::::0;;30232:1:::1;30218:16:::0;;;;;::::1;::::0;;-1:-1:-1;;30218:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;30255:4:0::1;::::0;30245:7;;;;-1:-1:-1;;;;;;30255:4:0::1;::::0;30245:7;;-1:-1:-1;30255:4:0::1;::::0;30245:7:::1;;;;:::i;:::-;;;;;;:14;-1:-1:-1::0;;;;;30245:14:0::1;;;-1:-1:-1::0;;;;;30245:14:0::1;;;::::0;::::1;30288:4;30270;30275:1;30270:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30270:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;30310:6:::1;::::0;:167:::1;::::0;-1:-1:-1;;;30310:167:0;;:6;::::1;::::0;:57:::1;::::0;30376:6;;30310:167:::1;::::0;:6:::1;::::0;30415:4;;30434:2;;30451:15:::1;::::0;30310:167:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;30306:458;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;30643:6;30596:54;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;30596:54:0;;::::1;::::0;;;;;;;-1:-1:-1;;;30582:70:0;;::::1;::::0;::::1;;;:::i;30306:458::-;;;30686:66;::::0;-1:-1:-1;;;30686:66:0;;17996:2:1;30686:66:0::1;::::0;::::1;17978:21:1::0;18035:2;18015:18;;;18008:30;18074:34;18054:18;;;18047:62;18145:26;18125:18;;;18118:54;18189:19;;30686:66:0::1;17794:420:1::0;30306:458:0::1;30498:22;::::0;;20859:25:1;;;-1:-1:-1;;;;;20920:32:1;;20915:2;20900:18;;20893:60;30498:22:0::1;::::0;20832:18:1;30498:22:0::1;;;;;;;-1:-1:-1::0;;21158:6:0;:14;;-1:-1:-1;;21158:14:0;;;-1:-1:-1;30118:653:0:o;1266:181::-;1324:7;;1356:5;1360:1;1356;:5;:::i;:::-;1344:17;;1385:1;1380;:6;;1372:46;;;;-1:-1:-1;;;1372:46:0;;16943:2:1;1372:46:0;;;16925:21:1;16982:2;16962:18;;;16955:30;17021:29;17001:18;;;16994:57;17068:18;;1372:46:0;16741:351:1;1793:250:0;1851:7;1875:6;1871:47;;-1:-1:-1;1905:1:0;1898:8;;1871:47;1930:9;1942:5;1946:1;1942;:5;:::i;:::-;1930:17;-1:-1:-1;1975:1:0;1966:5;1970:1;1930:17;1966:5;:::i;:::-;:10;1958:56;;;;-1:-1:-1;;;1958:56:0;;18421:2:1;1958:56:0;;;18403:21:1;18460:2;18440:18;;;18433:30;18499:34;18479:18;;;18472:62;-1:-1:-1;;;18550:18:1;;;18543:31;18591:19;;1958:56:0;18219:397:1;2049:132:0;2107:7;2134:39;2138:1;2141;2134:39;;;;;;;;;;;;;;;;;:3;:39::i;24766:330::-;24896:53;;;;;;;;;;;-1:-1:-1;;;24896:53:0;;;;;;;;-1:-1:-1;;;;;24896:17:0;;24859:4;24896:17;;;:9;:17;;;;;;;:53;;24918:6;;24896:21;:53::i;:::-;-1:-1:-1;;;;;24876:17:0;;;;;;;:9;:17;;;;;;:73;;;;24983:20;;;;;;;:32;;25008:6;24983:24;:32::i;:::-;-1:-1:-1;;;;;24960:20:0;;;;;;;:9;:20;;;;;;;:55;;;;25031:35;;;;;;;;;;25059:6;20649:25:1;;20637:2;20622:18;;20503:177;25031:35:0;;;;;;;;-1:-1:-1;25084:4:0;24766:330;;;;;:::o;25104:166::-;25201:12;;25191:6;:22;;:49;;;-1:-1:-1;;;;;;25217:23:0;;;;;;:15;:23;;;;;;;;25191:49;25183:79;;;;-1:-1:-1;;;25183:79:0;;16597:2:1;25183:79:0;;;16579:21:1;16636:2;16616:18;;;16609:30;-1:-1:-1;;;16655:18:1;;;16648:47;16712:18;;25183:79:0;16395:341:1;25183:79:0;25104:166;;:::o;27149:209::-;27236:16;;27198:4;;-1:-1:-1;;;;;27236:16:0;27222:10;:30;;;;:50;;-1:-1:-1;27266:6:0;;;;27265:7;27222:50;:74;;;;-1:-1:-1;27285:11:0;;;;27222:74;:128;;;;-1:-1:-1;;27337:13:0;;27327:4;27309:24;;;;:9;:24;;;;;;:41;;;27149:209::o;27366:2261::-;21140:6;:13;;-1:-1:-1;;21140:13:0;21149:4;21140:13;;;27461:15:::1;::::0;27478:26:::1;::::0;21140:6;;27445:60:::1;::::0;:15:::1;:60::i;:::-;:79;;27512:12;;27445:79;;;27508:1;27445:79;27415:109;;27535:23;27561:62;27621:1;27561:55;27604:11;;27561:38;27579:19;27561:13;;:17;;:38;;;;:::i;:62::-;27535:88;;27634:20;27657:34;27675:15;27657:13;;:17;;:34;;;;:::i;:::-;27728:16;::::0;;27742:1:::1;27728:16:::0;;;;;::::1;::::0;;27634:57;;-1:-1:-1;27704:21:0::1;::::0;27728:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27728:16:0::1;27704:40;;27773:4;27755;27760:1;27755:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27755:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;27799:4:::1;::::0;27789:7;;27799:4;::::1;::::0;27789;;27799;;27789:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;27789:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;27878:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;27878:188:0;;27840:21:::1;::::0;27878:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;27950:12;;27816:21:::1;::::0;27993:4;;28020::::1;::::0;28040:15:::1;::::0;27878:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;27874:1746;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;29420:74;29490:1;29442:50;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;29442:50:0;;::::1;::::0;;;;;;;29420:74:::1;::::0;::::1;:::i;:::-;;;;;;;;29371:135;27874:1746;;;;;29533:75;;;;;20279:2:1::0;20261:21;;;20318:2;20298:18;;;20291:30;20357:34;20352:2;20337:18;;20330:62;20428:27;20423:2;20408:18;;20401:55;20488:3;20473:19;;20077:421;29533:75:0::1;;;;;;;;27874:1746;;;28084:17;28104:40;:21;28130:13:::0;28104:25:::1;:40::i;:::-;28084:60:::0;-1:-1:-1;28161:19:0::1;28183:43;28199:26;:19:::0;28223:1:::1;28199:23;:26::i;:::-;28183:11;::::0;;:15:::1;:43::i;:::-;28161:65:::0;-1:-1:-1;28243:26:0::1;28272:58;28328:1;28272:51;28161:65:::0;28272:51;:9;28286:19;28272:13:::1;:34::i;:58::-;28243:87;;28345:27;28375:45;28408:11;28375:28;28389:13;;28375:9;:13;;:28;;;;:::i;:45::-;28345:75;;28435:26;28464:44;28496:11;28464:27;28478:12;;28464:9;:13;;:27;;;;:::i;:44::-;28435:73;;28528:11;;;;;;;;;-1:-1:-1::0;;;;;28528:11:0::1;-1:-1:-1::0;;;;;28528:19:0::1;;28555;28528:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;28653:20:0::1;::::0;28645:77:::1;::::0;28604:12:::1;::::0;-1:-1:-1;;;;;28653:20:0::1;::::0;28712:5:::1;::::0;28687:18;;28604:12;28645:77;28604:12;28645:77;28687:18;28653:20;28712:5;28645:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28603:119;;;28745:7;28737:50;;;::::0;-1:-1:-1;;;28737:50:0;;16238:2:1;28737:50:0::1;::::0;::::1;16220:21:1::0;16277:2;16257:18;;;16250:30;16316:32;16296:18;;;16289:60;16366:18;;28737:50:0::1;16036:354:1::0;28737:50:0::1;28807:19:::0;;28804:504:::1;;28850:6;::::0;29046:21:::1;::::0;28850:274:::1;::::0;-1:-1:-1;;;28850:274:0;;28932:4:::1;28850:274;::::0;::::1;13652:34:1::0;13702:18;;;13695:34;;;28850:6:0::1;13745:18:1::0;;;13738:34;;;13788:18;;;13781:34;-1:-1:-1;;;;;29046:21:0;;::::1;13831:19:1::0;;;13824:44;29090:15:0::1;13884:19:1::0;;;13877:35;28850:6:0;::::1;::::0;:22:::1;::::0;28881:18;;13586:19:1;;28850:274:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;-1:-1:-1::0;28850:274:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;28850:274:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;28846:447;;29256:17;::::0;;29268:1:::1;15046:25:1::0;;;15102:2;15087:18;;15080:34;29256:17:0::1;::::0;15019:18:1;29256:17:0::1;;;;;;;28846:447;;;-1:-1:-1::0;;29153:48:0::1;::::0;;15046:25:1;;;15102:2;15087:18;;15080:34;;;29153:48:0::1;::::0;-1:-1:-1;15019:18:1;29153:48:0::1;;;;;;;28846:447;29329:29;::::0;20649:25:1;;;29329:29:0::1;::::0;20637:2:1;20622:18;29329:29:0::1;;;;;;;28067:1303;;;;;;27874:1746;-1:-1:-1::0;;21158:6:0;:14;;-1:-1:-1;;21158:14:0;;;-1:-1:-1;;;27366:2261:0:o;31266:126::-;31317:12;31304:10;:25;;;31345:39;;;15046:25:1;;;31368:15:0;15102:2:1;15087:18;;15080:34;31345:39:0;;15019:18:1;31345:39:0;;;;;;;31266:126::o;25278:422::-;-1:-1:-1;;;;;25380:19:0;;25359:4;25380:19;;;:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;25403:22:0;;;;;;:11;:22;;;;;;;;25380:45;:60;;;-1:-1:-1;31235:10:0;;:15;25380:60;25376:78;;;-1:-1:-1;25449:5:0;25442:12;;25376:78;25467:25;25495:5;25467:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25467:33:0;;;;;;;;;;;;;;;;;;;;;;;25518:9;25513:139;25537:8;:15;25533:1;:19;25513:139;;;25588:8;25597:1;25588:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;25578:21:0;:6;-1:-1:-1;;;;;25578:21:0;;:49;;;;25616:8;25625:1;25616:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;25603:24:0;:9;-1:-1:-1;;;;;25603:24:0;;25578:49;25574:66;;;25636:4;25629:11;;;;;;25574:66;25554:3;;;;:::i;:::-;;;;25513:139;;;-1:-1:-1;;25671:21:0;;;;;25278:422;-1:-1:-1;;;25278:422:0:o;26488:374::-;26574:7;26594:17;26614:62;26661:14;;26614:42;26625:30;26637:17;26644:9;26637:6;:17::i;26625:30::-;26614:6;;:10;:42::i;:62::-;26734:4;26716:24;;;;:9;:24;;;;;;26594:82;;-1:-1:-1;26716:39:0;;26594:82;26716:28;:39::i;:::-;26707:4;26689:24;;;;:9;:24;;;;;;;:66;;;;26771:42;;-1:-1:-1;;;;;26771:42:0;;;;;;;26803:9;20649:25:1;;20637:2;20622:18;;20503:177;26771:42:0;;;;;;;;26833:21;:6;26844:9;26833:10;:21::i;2187:345::-;2273:7;2375:12;2368:5;2360:28;;;;-1:-1:-1;;;2360:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2399:9:0;2411:5;2415:1;2411;:5;:::i;26878:263::-;26936:4;26953:25;26981:5;26953:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26953:33:0;;;;;;;;;;;;;;;;;;;;;;;27002:9;26997:114;27021:8;:15;27017:1;:19;26997:114;;;27075:8;27084:1;27075:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;27062:24:0;:9;-1:-1:-1;;;;;27062:24:0;;27058:41;;;-1:-1:-1;27095:4:0;;26878:263;-1:-1:-1;;;26878:263:0:o;27058:41::-;27038:3;;;;:::i;:::-;;;;26997:114;;;-1:-1:-1;27128:5:0;;26878:263;-1:-1:-1;;;26878: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:411::-;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:1;3540:14;;3530:42;;3568:1;3565;3558:12;3609:457;3687:6;3695;3748:2;3736:9;3727:7;3723:23;3719:32;3716:52;;;3764:1;3761;3754:12;3716:52;3803:9;3790:23;3822:31;3847:5;3822:31;:::i;:::-;3872:5;-1:-1:-1;3928:2:1;3913:18;;3900:32;3955:18;3944:30;;3941:50;;;3987:1;3984;3977:12;3941:50;4010;4052:7;4043:6;4032:9;4028:22;4010:50;:::i;:::-;4000:60;;;3609:457;;;;;:::o;4071:315::-;4139:6;4147;4200:2;4188:9;4179:7;4175:23;4171:32;4168:52;;;4216:1;4213;4206:12;4168:52;4255:9;4242:23;4274:31;4299:5;4274:31;:::i;:::-;4324:5;4376:2;4361:18;;;;4348:32;;-1:-1:-1;;;4071:315:1:o;4391:180::-;4447:6;4500:2;4488:9;4479:7;4475:23;4471:32;4468:52;;;4516:1;4513;4506:12;4468:52;4539:26;4555:9;4539:26;:::i;4576:248::-;4641:6;4649;4702:2;4690:9;4681:7;4677:23;4673:32;4670:52;;;4718:1;4715;4708:12;4670:52;4741:26;4757:9;4741:26;:::i;4829:322::-;4898:6;4951:2;4939:9;4930:7;4926:23;4922:32;4919:52;;;4967:1;4964;4957:12;4919:52;5007:9;4994:23;5040:18;5032:6;5029:30;5026:50;;;5072:1;5069;5062:12;5026:50;5095;5137:7;5128:6;5117:9;5113:22;5095:50;:::i;:::-;5085:60;4829:322;-1:-1:-1;;;;4829:322:1:o;5156:499::-;5233:6;5241;5294:2;5282:9;5273:7;5269:23;5265:32;5262:52;;;5310:1;5307;5300:12;5262:52;5350:9;5337:23;5379:18;5420:2;5412:6;5409:14;5406:34;;;5436:1;5433;5426:12;5406:34;5459:50;5501:7;5492:6;5481:9;5477:22;5459:50;:::i;:::-;5449:60;;5559:2;5548:9;5544:18;5531:32;5518:45;;5603:2;5596:5;5592:14;5585:5;5582:25;5572:53;;5621:1;5618;5611:12;5572:53;;5644:5;5634:15;;;5156:499;;;;;:::o;5660:180::-;5719:6;5772:2;5760:9;5751:7;5747:23;5743:32;5740:52;;;5788:1;5785;5778:12;5740:52;-1:-1:-1;5811:23:1;;5660:180;-1:-1:-1;5660:180:1:o;5845:248::-;5910:6;5918;5971:2;5959:9;5950:7;5946:23;5942:32;5939:52;;;5987:1;5984;5977:12;5939:52;6023:9;6010:23;6000:33;;6052:35;6083:2;6072:9;6068:18;6052:35;:::i;6098:248::-;6166:6;6174;6227:2;6215:9;6206:7;6202:23;6198:32;6195:52;;;6243:1;6240;6233:12;6195:52;-1:-1:-1;;6266:23:1;;;6336:2;6321:18;;;6308:32;;-1:-1:-1;6098:248:1:o;6351:316::-;6428:6;6436;6444;6497:2;6485:9;6476:7;6472:23;6468:32;6465:52;;;6513:1;6510;6503:12;6465:52;-1:-1:-1;;6536:23:1;;;6606:2;6591:18;;6578:32;;-1:-1:-1;6657:2:1;6642:18;;;6629:32;;6351:316;-1:-1:-1;6351:316:1:o;6672:306::-;6760:6;6768;6776;6829:2;6817:9;6808:7;6804:23;6800:32;6797:52;;;6845:1;6842;6835:12;6797:52;6874:9;6868:16;6858:26;;6924:2;6913:9;6909:18;6903:25;6893:35;;6968:2;6957:9;6953:18;6947:25;6937:35;;6672:306;;;;;:::o;6983:523::-;7087:6;7095;7103;7111;7119;7127;7180:3;7168:9;7159:7;7155:23;7151:33;7148:53;;;7197:1;7194;7187:12;7148:53;-1:-1:-1;;7220:23:1;;;7290:2;7275:18;;7262:32;;-1:-1:-1;7341:2:1;7326:18;;7313:32;;7392:2;7377:18;;7364:32;;-1:-1:-1;7443:3:1;7428:19;;7415:33;;-1:-1:-1;7495:3:1;7480:19;7467:33;;-1:-1:-1;6983:523:1;-1:-1:-1;6983:523:1:o;7511:461::-;7564:3;7602:5;7596:12;7629:6;7624:3;7617:19;7655:4;7684:2;7679:3;7675:12;7668:19;;7721:2;7714:5;7710:14;7742:1;7752:195;7766:6;7763:1;7760:13;7752:195;;;7831:13;;-1:-1:-1;;;;;7827:39:1;7815:52;;7887:12;;;;7922:15;;;;7863:1;7781:9;7752:195;;;-1:-1:-1;7963:3:1;;7511:461;-1:-1:-1;;;;;7511:461:1:o;7977:258::-;8019:3;8057:5;8051:12;8084:6;8079:3;8072:19;8100:63;8156:6;8149:4;8144:3;8140:14;8133:4;8126:5;8122:16;8100:63;:::i;:::-;8217:2;8196:15;-1:-1:-1;;8192:29:1;8183:39;;;;8224:4;8179:50;;7977:258;-1:-1:-1;;7977:258:1:o;8240:273::-;8425:6;8417;8412:3;8399:33;8381:3;8451:16;;8476:13;;;8451:16;8240:273;-1:-1:-1;8240:273:1:o;8518:276::-;8649:3;8687:6;8681:13;8703:53;8749:6;8744:3;8737:4;8729:6;8725:17;8703:53;:::i;:::-;8772:16;;;;;8518:276;-1:-1:-1;;8518:276:1:o;8799:445::-;9061:28;9056:3;9049:41;9031:3;9119:6;9113:13;9135:62;9190:6;9185:2;9180:3;9176:12;9169:4;9161:6;9157:17;9135:62;:::i;:::-;9217:16;;;;9235:2;9213:25;;8799:445;-1:-1:-1;;8799:445:1:o;9249:446::-;9511:29;9506:3;9499:42;9481:3;9570:6;9564:13;9586:62;9641:6;9636:2;9631:3;9627:12;9620:4;9612:6;9608:17;9586:62;:::i;:::-;9668:16;;;;9686:2;9664:25;;9249:446;-1:-1:-1;;9249:446:1:o;9910:1354::-;10169:34;10164:3;10157:47;10139:3;10223:2;-1:-1:-1;;;10250:2:1;10245:3;10241:12;10234:32;10285:2;10307:1;10340:6;10334:13;10370:3;10392:1;10420:9;10416:2;10412:18;10402:28;;10480:2;10469:9;10465:18;10502;10492:61;;10546:4;10538:6;10534:17;10524:27;;10492:61;10599:2;10591:6;10588:14;10568:18;10565:38;10562:165;;;-1:-1:-1;;;10626:33:1;;10682:4;10679:1;10672:15;10712:4;10633:3;10700:17;10562:165;10743:18;10770:122;;;;10906:1;10901:338;;;;10736:503;;10770:122;-1:-1:-1;;10812:24:1;;10798:12;;;10791:46;10861:16;;;10857:25;;;-1:-1:-1;10770:122:1;;10901:338;22593:1;22586:14;;;22630:4;22617:18;;10996:1;11010:174;11024:6;11021:1;11018:13;11010:174;;;11111:14;;11093:11;;;11089:20;;11082:44;11154:16;;;;11039:10;;11010:174;;;11014:3;;11226:2;11217:6;11212:3;11208:16;11204:25;11197:32;;10736:503;-1:-1:-1;11255:3:1;;9910:1354;-1:-1:-1;;;;;;;;;9910:1354:1:o;12073:561::-;-1:-1:-1;;;;;12288:32:1;;12270:51;;12357:2;12352;12337:18;;12330:30;;;12376:18;;12369:34;;;12396:6;12446;12440:3;12425:19;;12412:49;12511:1;12505:3;12496:6;12485:9;12481:22;12477:32;12470:43;12251:4;12581:3;12574:2;12570:7;12565:2;12557:6;12553:15;12549:29;12538:9;12534:45;12530:55;12522:63;;12621:6;12616:2;12605:9;12601:18;12594:34;12073:561;;;;;;;:::o;12639:388::-;-1:-1:-1;;;;;12844:32:1;;12826:51;;12913:2;12908;12893:18;;12886:30;;;-1:-1:-1;;12933:45:1;;12959:18;;12951:6;12933:45;:::i;:::-;12925:53;;13014:6;13009:2;12998:9;12994:18;12987:34;12639:388;;;;;;:::o;14341:510::-;14612:6;14601:9;14594:25;14655:3;14650:2;14639:9;14635:18;14628:31;14575:4;14676:57;14728:3;14717:9;14713:19;14705:6;14676:57;:::i;:::-;-1:-1:-1;;;;;14769:32:1;;;;14764:2;14749:18;;14742:60;-1:-1:-1;14833:2:1;14818:18;14811:34;14668:65;14341:510;-1:-1:-1;;14341:510:1:o;15125:220::-;15274:2;15263:9;15256:21;15237:4;15294:45;15335:2;15324:9;15320:18;15312:6;15294:45;:::i;15350:291::-;15527:2;15516:9;15509:21;15490:4;15547:45;15588:2;15577:9;15573:18;15565:6;15547:45;:::i;:::-;15539:53;;15628:6;15623:2;15612:9;15608:18;15601:34;15350:291;;;;;:::o;15646:385::-;15849:2;15838:9;15831:21;15812:4;15869:45;15910:2;15899:9;15895:18;15887:6;15869:45;:::i;:::-;15861:53;;15950:6;15945:2;15934:9;15930:18;15923:34;16005:18;15997:6;15993:31;15988:2;15977:9;15973:18;15966:59;15646:385;;;;;;:::o;19381:345::-;19583:2;19565:21;;;19622:2;19602:18;;;19595:30;-1:-1:-1;;;19656:2:1;19641:18;;19634:51;19717:2;19702:18;;19381:345::o;20964:582::-;21263:6;21252:9;21245:25;21306:6;21301:2;21290:9;21286:18;21279:34;21349:3;21344:2;21333:9;21329:18;21322:31;21226:4;21370:57;21422:3;21411:9;21407:19;21399:6;21370:57;:::i;:::-;-1:-1:-1;;;;;21463:32:1;;;;21458:2;21443:18;;21436:60;-1:-1:-1;21527:3:1;21512:19;21505:35;21362:65;20964:582;-1:-1:-1;;;20964:582:1:o;21993:522::-;22071:4;22077:6;22137:11;22124:25;22231:2;22227:7;22216:8;22200:14;22196:29;22192:43;22172:18;22168:68;22158:96;;22250:1;22247;22240:12;22158:96;22277:33;;22329:20;;;-1:-1:-1;22372:18:1;22361:30;;22358:50;;;22404:1;22401;22394:12;22358:50;22437:4;22425:17;;-1:-1:-1;22468:14:1;22464:27;;;22454:38;;22451:58;;;22505:1;22502;22495:12;22451:58;21993:522;;;;;:::o;22646:128::-;22686:3;22717:1;22713:6;22710:1;22707:13;22704:39;;;22723:18;;:::i;:::-;-1:-1:-1;22759:9:1;;22646:128::o;22779:236::-;22818:3;22846:18;22891:2;22888:1;22884:10;22921:2;22918:1;22914:10;22952:3;22948:2;22944:12;22939:3;22936:21;22933:47;;;22960:18;;:::i;:::-;22996:13;;22779:236;-1:-1:-1;;;;22779:236:1:o;23020:217::-;23060:1;23086;23076:132;;23130:10;23125:3;23121:20;23118:1;23111:31;23165:4;23162:1;23155:15;23193:4;23190:1;23183:15;23076:132;-1:-1:-1;23222:9:1;;23020:217::o;23242:168::-;23282:7;23348:1;23344;23340:6;23336:14;23333:1;23330:21;23325:1;23318:9;23311:17;23307:45;23304:71;;;23355:18;;:::i;:::-;-1:-1:-1;23395:9:1;;23242:168::o;23415:125::-;23455:4;23483:1;23480;23477:8;23474:34;;;23488:18;;:::i;:::-;-1:-1:-1;23525:9:1;;23415:125::o;23545:258::-;23617:1;23627:113;23641:6;23638:1;23635:13;23627:113;;;23717:11;;;23711:18;23698:11;;;23691:39;23663:2;23656:10;23627:113;;;23758:6;23755:1;23752:13;23749:48;;;-1:-1:-1;;23793:1:1;23775:16;;23768:27;23545:258::o;23808:249::-;23918:2;23899:13;;-1:-1:-1;;23895:27:1;23883:40;;23953:18;23938:34;;23974:22;;;23935:62;23932:88;;;24000:18;;:::i;:::-;24036:2;24029:22;-1:-1:-1;;23808:249:1:o;24062:135::-;24101:3;-1:-1:-1;;24122:17:1;;24119:43;;;24142:18;;:::i;:::-;-1:-1:-1;24189:1:1;24178:13;;24062:135::o;24202:127::-;24263:10;24258:3;24254:20;24251:1;24244:31;24294:4;24291:1;24284:15;24318:4;24315:1;24308:15;24334:127;24395:10;24390:3;24386:20;24383:1;24376:31;24426:4;24423:1;24416:15;24450:4;24447:1;24440:15;24466:127;24527:10;24522:3;24518:20;24515:1;24508:31;24558:4;24555:1;24548:15;24582:4;24579:1;24572:15;24598:127;24659:10;24654:3;24650:20;24647:1;24640:31;24690:4;24687:1;24680:15;24714:4;24711:1;24704:15;24730:127;24791:10;24786:3;24782:20;24779:1;24772:31;24822:4;24819:1;24812:15;24846:4;24843:1;24836:15;24862:179;24897:3;24939:1;24921:16;24918:23;24915:120;;;24985:1;24982;24979;24964:23;-1:-1:-1;25022:1:1;25016:8;25011:3;25007:18;24915:120;24862:179;:::o;25046:671::-;25085:3;25127:4;25109:16;25106:26;25103:39;;;25046:671;:::o;25103:39::-;25169:2;25163:9;-1:-1:-1;;25234:16:1;25230:25;;25227:1;25163:9;25206:50;25285:4;25279:11;25309:16;25344:18;25415:2;25408:4;25400:6;25396:17;25393:25;25388:2;25380:6;25377:14;25374:45;25371:58;;;25422:5;;;;;25046:671;:::o;25371:58::-;25459:6;25453:4;25449:17;25438:28;;25495:3;25489:10;25522:2;25514:6;25511:14;25508:27;;;25528:5;;;;;;25046:671;:::o;25508:27::-;25612:2;25593:16;25587:4;25583:27;25579:36;25572:4;25563:6;25558:3;25554:16;25550:27;25547:69;25544:82;;;25619:5;;;;;;25046:671;:::o;25544:82::-;25635:57;25686:4;25677:6;25669;25665:19;25661:30;25655:4;25635:57;:::i;:::-;-1:-1:-1;25708:3:1;;25046:671;-1:-1:-1;;;;;25046:671:1:o;25722:131::-;-1:-1:-1;;;;;25797:31:1;;25787:42;;25777:70;;25843:1;25840;25833:12;25777:70;25722:131;:::o

Swarm Source

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