Contract 0x55f96c7005d7c684a65ee653b07b5fe1507c56ab 3

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x22d8647880b5eca487677c0b348da7c7f721f2799682c395632b434cb9ec8595Approve129982712021-11-27 13:54:159 mins ago0xe3cb320e6f4ffdfca53d59b18494f270c36cbc00 IN  Wojak: WOJ Token0 BNB0.00022252
0xedbefe60a6ab8b9424bb6898e10acf4e9ed7b2ddab62f0cd2da26514f2987f11Transfer129982672021-11-27 13:54:019 mins ago0x9c371c905b61ee34636b089787907687ffac3d4a IN  Wojak: WOJ Token0 BNB0.00067437
0x63222c74077a02359a0dd91760133d3ffe1a68fbf73b618c1f1d467b4de08ff7Approve129982572021-11-27 13:53:2910 mins ago0x10fa8b93a3cd5491a06d67a91a861f485cd18097 IN  Wojak: WOJ Token0 BNB0.00012652
0xb3db406d0303bbd867e7eacb3e72e8af3bc23460b8dcea04000694cb159f46edApprove129982262021-11-27 13:51:4212 mins ago0x10fa8b93a3cd5491a06d67a91a861f485cd18097 IN  Wojak: WOJ Token0 BNB0.00022252
0x25d6d408b16a5ff954e28328a78ad92f83895674d770c85d94cff9b3d03dfcd9Approve129979712021-11-27 13:38:1625 mins ago0x13ac069cd1a365c563c9fb6a3fa979960ebb5c21 IN  Wojak: WOJ Token0 BNB0.00022252
0x3ca51c55b4147529e5d036a395c0639f2da7c3d44f8adfcb448050a1587d1235Transfer129979042021-11-27 13:34:4529 mins ago0x94d587da97450ac259675e83f5712461df8d28a6 IN  Wojak: WOJ Token0 BNB0.000809724195
0x9073345ec21d686835874091e61d8985dbe3d640bbe94735f2244d649ff92dbfTransfer129977262021-11-27 13:25:0138 mins ago0x23bab31406e60996e83d4b2c7b0c8ece898cbe65 IN  Wojak: WOJ Token0 BNB0.000630285
0x644351dfeb7ba1e7e66f6f2bae5641302ee0328eba344fd9f55930506c4f80b0Transfer129976822021-11-27 13:22:3441 mins ago0xd54c06be40d2d947a60d4ffc6bc1f2d05c0c5861 IN  Wojak: WOJ Token0 BNB0.000555285
0x8df9f6cbfc98f4823f3742daf209779aeb856e7927f72593778ae36b616ce91eTransfer129976002021-11-27 13:18:0045 mins ago0xee9fc09f9618bad5417427df03e91b1fd41490e8 IN  Wojak: WOJ Token0 BNB0.000630285
0x8d2702d563bfe7783d25ac329b569aabfb90bf338a366f961d65d2eb75e177b8Approve129973922021-11-27 13:06:2657 mins ago0x948fcac408c472dfe6a0e9485de5706b7980b75c IN  Wojak: WOJ Token0 BNB0.00022252
0x5642163880d3d0568cf79d5c3b1da5de107235d1dbb19b1e9d9719308cbe294aApprove129971132021-11-27 12:51:051 hr 12 mins ago0x64b33830789ca31ea297f6c890c89ba44e561ca1 IN  Wojak: WOJ Token0 BNB0.000267024
0xe6ac97a83db978fb725654086029d075609a14ea3d8d8d2ed02b3537e0f505d5Approve129970512021-11-27 12:47:391 hr 16 mins ago0x347ae113e5f6de2534aa9c71169a1fdcdd1c4ea3 IN  Wojak: WOJ Token0 BNB0.00022252
0x31a31100c340f444e40090b2ea230b7b0f56885b0b1a2630e9fcd880f966c8ceApprove129969772021-11-27 12:43:351 hr 20 mins ago0x78e2aeeb991ee3d8990e078fa45f764b6e9a6879 IN  Wojak: WOJ Token0 BNB0.00022252
0xc04ee784cc647e51e7d9619436a6d4d843c4210553f8183a2675f671d1b4dfcbApprove129966602021-11-27 12:26:021 hr 37 mins ago0x363e73ab77ae0cb8740a18b2db640d7e837f3851 IN  Wojak: WOJ Token0 BNB0.00022252
0x19efce2927e2b6060cfeecddd4685bc9b09cc26ec17d0b15a07c10e659326f78Transfer129965472021-11-27 12:19:551 hr 43 mins ago0xd4e0edfe8b36fa51cb2795017b7ccdafe9949f48 IN  Wojak: WOJ Token0 BNB0.000756285
0xfb0e46041b47acd731ece0febb7f54d9e2e75182c37ce0cb6adb5a9625789d8eApprove129964822021-11-27 12:16:141 hr 47 mins ago0xd4e0edfe8b36fa51cb2795017b7ccdafe9949f48 IN  Wojak: WOJ Token0 BNB0.00022252
0xbf93147bcad669f17634c11679e8db3485173cc421bd328a233628b4e2c4a9e9Approve129964492021-11-27 12:14:351 hr 49 mins ago0x3f40ba4cba6df259a4eed6842ce1f9b72a617fb2 IN  Wojak: WOJ Token0 BNB0.0002209
0x11cc697b886eec93a34960d118305f6a43157733f03a7c86cdbd80f243cbf0dbApprove129962902021-11-27 12:06:381 hr 57 mins ago0xdaa44060af086b652feba514ee2d7da411564835 IN  Wojak: WOJ Token0 BNB0.00022252
0x9851444c0e86bc05a79fae48dc615e3bf50caa5c7ecdd86b09f9be411b394094Transfer129962482021-11-27 12:04:321 hr 59 mins ago0x40605cbb3d44f95245a2bece4919daab2bae9210 IN  Wojak: WOJ Token0 BNB0.000660225
0x19dcd61c06f79479f637872b7aca9f32391e7688bc893bfe34ac5f18fe911bd9Approve129959902021-11-27 11:50:272 hrs 13 mins ago0xdd75f5886fca6e788bddd297b6ace7ae5098a7fa IN  Wojak: WOJ Token0 BNB0.000267024
0x1c87c9f5da37b4ad51e512eb61efee2b534d7c1bb741d44c4a9d0571b2995e28Approve129959872021-11-27 11:50:182 hrs 13 mins ago0x48d78b8f179697fad40147e0703f7062f6dca1ad IN  Wojak: WOJ Token0 BNB0.00022252
0xfbb0f9942a59f8b85e792c85bdd7021e6746bc7bcdd2d4a45751b25222df83e9Transfer129957472021-11-27 11:37:372 hrs 26 mins ago0x40605cbb3d44f95245a2bece4919daab2bae9210 IN  Wojak: WOJ Token0 BNB0.000534285
0x0ee2c37aef540342b79df6e74ee842d0d8010c41c3a9bcf8b62d2cbf6fbddc4aApprove129956712021-11-27 11:33:212 hrs 30 mins ago0xff92e83902c62dc2ce05f8b5cda9eafa392c5c63 IN  Wojak: WOJ Token0 BNB0.00022252
0x435f30629c10c2b60e6e512b9aabc0cee4725ac5951453d001a751e30b216d9fApprove129954512021-11-27 11:22:152 hrs 41 mins ago0x3f4a705ad70fd26a178515c9057bd2648f601d5a IN  Wojak: WOJ Token0 BNB0.00022252
0x3361407ea55317048dc53180bbdf96bb1d301f6b9eedb4f9fe48692ad9094a73Transfer129953512021-11-27 11:16:582 hrs 46 mins ago0x5fe81245e888e56903a4a7b2ae474b1a20a1c28c IN  Wojak: WOJ Token0 BNB0.000674478
[ Download CSV Export 

OVERVIEW

The $WOJ token is a charity token, based on the BEP20 standard. Using $WOJ tokens the holders can enjoy multiple benefits within our wojak finance ecosystem, as it may be used as the governance token in the future.

Latest 19 internal transactions
Parent Txn Hash Block From To Value
0x5003001be671c8dd43a15748b95f00d66da05eab0f8df6c878edd68d15d5b843115651752021-10-07 12:21:0651 days 1 hr ago Wojak: WOJ Token0xb12b1dc95e1b783395f670af306f73148062792416.738090455418602657 BNB
0x612f36b18202acb02eb6d51b59ea76a97d2fe3234973ae223b21a49d35bb4907115452282021-10-06 19:42:3551 days 18 hrs ago Wojak: WOJ Token0x3452c1836acec851f6d86c0cfcabc81bf6c214f9130.673093494151722708 BNB
0xb43d51edd378d327a440187c799036890b00ad89958aa8b24b185f8cca42f0f3115451892021-10-06 19:40:3851 days 18 hrs ago PancakeSwap: Router v2 Wojak: WOJ Token130.673093494151722708 BNB
0xb43d51edd378d327a440187c799036890b00ad89958aa8b24b185f8cca42f0f3115451892021-10-06 19:40:3851 days 18 hrs ago Wojak: WOJ Token PancakeSwap: Router v2162.721483286623757595 BNB
0xb43d51edd378d327a440187c799036890b00ad89958aa8b24b185f8cca42f0f3115451892021-10-06 19:40:3851 days 18 hrs ago Wojak: WOJ Token0xd79f1f15a94fc9a8875eb291e20419285fc4bb7981.360741643311878796 BNB
0xb43d51edd378d327a440187c799036890b00ad89958aa8b24b185f8cca42f0f3115451892021-10-06 19:40:3851 days 18 hrs ago Wojak: WOJ Token0x597bdac414f295b6c2aee83b790f0443f79e83a381.360741643311878796 BNB
0xb43d51edd378d327a440187c799036890b00ad89958aa8b24b185f8cca42f0f3115451892021-10-06 19:40:3851 days 18 hrs ago PancakeSwap: Router v2 Wojak: WOJ Token325.442966573247515187 BNB
0x7ec0b22d39a7c3a11ab40f182828b76a7cc8e41955ce5e0c826b45c668584b5f114782452021-10-04 11:49:0954 days 2 hrs ago Wojak: WOJ TokenWojak: Deployer2.440279820719719853 BNB
0x2d2e630da6b0826fcda95aa862e5eb27052c25bbda76f782ec1169532f3d4d1e114781322021-10-04 11:43:3054 days 2 hrs ago PancakeSwap: Router v2 Wojak: WOJ Token2.440279820719719853 BNB
0x2d2e630da6b0826fcda95aa862e5eb27052c25bbda76f782ec1169532f3d4d1e114781322021-10-04 11:43:3054 days 2 hrs ago Wojak: WOJ Token PancakeSwap: Router v25.926090848612147311 BNB
0x2d2e630da6b0826fcda95aa862e5eb27052c25bbda76f782ec1169532f3d4d1e114781322021-10-04 11:43:3054 days 2 hrs ago Wojak: WOJ Token0xd79f1f15a94fc9a8875eb291e20419285fc4bb792.963045424306073655 BNB
0x2d2e630da6b0826fcda95aa862e5eb27052c25bbda76f782ec1169532f3d4d1e114781322021-10-04 11:43:3054 days 2 hrs ago Wojak: WOJ Token0x597bdac414f295b6c2aee83b790f0443f79e83a32.963045424306073655 BNB
0x2d2e630da6b0826fcda95aa862e5eb27052c25bbda76f782ec1169532f3d4d1e114781322021-10-04 11:43:3054 days 2 hrs ago PancakeSwap: Router v2 Wojak: WOJ Token11.852181697224294621 BNB
0xc1863f190087f24c0c179c9f562948e895617651cadd1b17c18f53840e8f5a54114780432021-10-04 11:39:0354 days 2 hrs ago Wojak: WOJ TokenWojak: Deployer25.956609027142946175 BNB
0x24df1d70c9828d51700f6ace80c911c7d282de2c39086a48b6426fe6e04ee766114765952021-10-04 10:26:3854 days 3 hrs ago PancakeSwap: Router v2 Wojak: WOJ Token25.956609027142946175 BNB
0x24df1d70c9828d51700f6ace80c911c7d282de2c39086a48b6426fe6e04ee766114765952021-10-04 10:26:3854 days 3 hrs ago Wojak: WOJ Token PancakeSwap: Router v234.316876453047499056 BNB
0x24df1d70c9828d51700f6ace80c911c7d282de2c39086a48b6426fe6e04ee766114765952021-10-04 10:26:3854 days 3 hrs ago Wojak: WOJ Token0xd79f1f15a94fc9a8875eb291e20419285fc4bb7917.133438226523749528 BNB
0x24df1d70c9828d51700f6ace80c911c7d282de2c39086a48b6426fe6e04ee766114765952021-10-04 10:26:3854 days 3 hrs ago Wojak: WOJ Token0x597bdac414f295b6c2aee83b790f0443f79e83a317.133438226523749528 BNB
0x24df1d70c9828d51700f6ace80c911c7d282de2c39086a48b6426fe6e04ee766114765952021-10-04 10:26:3854 days 3 hrs ago PancakeSwap: Router v2 Wojak: WOJ Token68.533752906094998112 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Wojak

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: last one Wojak (4).sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;

import "./Address.sol";
import "./Context.sol";
import "./Ownable.sol";
import "./IERC20.sol";
import "./IFactory.sol";
import "./IRouter.sol";

contract Wojak is Context, Ownable, IERC20 {
    using Address for address;
    using Address for address payable;
    
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping(address => bool) private _isBadActor;


    mapping (address => bool) private _isExcludedFromFee;


    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 50000 * (10**6 * 10**9);   // (*) = million tokens
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;


    string private _name = "Wojak";
    string private _symbol = "WOJ";
    uint8 private _decimals = 9;
    
    uint256 internal MAX_INT = 2**256 - 1;

    struct feeRatesStruct {
      uint256 taxFee;
      uint256 marketingFee;
      uint256 rewardsFee;
      uint256 liquidityFee;
      uint256 swapFee;
      uint256 totFees;
    }
    
    feeRatesStruct public buyFees = feeRatesStruct(
     {taxFee: 2000,
      marketingFee: 2000,
      rewardsFee: 2000,
      liquidityFee: 4000,
      swapFee: 8000, // marketingFee+rewardsFee+liquidityFee
      totFees: 5
    });

    feeRatesStruct public sellFees = feeRatesStruct(
     {taxFee: 1432,
      marketingFee: 1428,
      rewardsFee: 2856,
      liquidityFee: 4284,
      swapFee: 8568, // marketingFee+rewardsFee+liquidityFee
      totFees: 7
    });

    feeRatesStruct private appliedFees = buyFees; //default value
    feeRatesStruct private previousFees;

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rFee;
      uint256 rSwap;
      uint256 tTransferAmount;
      uint256 tFee;
      uint256 tSwap;
    }

    // MAIN
    address payable public marketingWallet = payable(0xD79F1F15A94FC9a8875Eb291e20419285fc4BB79);
    address payable public rewardsWallet = payable(0x597bDAC414f295b6c2AEE83b790F0443f79e83a3);

    //DEV
    //address payable public marketingWallet = payable(0x7EE536e1FC3638EAdF5be06E8dCC562BDccBc340);
    //address payable public rewardsWallet = payable(0x8400be10F230dE2E371224512153e6AC79d7eee8);
    
    

    address public deadAddress = address(0x000000000000000000000000000000000000dEaD); 
    address private deployerAddress = address(0x0000000000000000000000000000000000000000); 
    
    IRouter public pancakeRouter;
    address public pancakePair;
    
    bool internal inSwap;
    bool public swapEnabled = true;
    uint256 private minTokensToSwap = _tTotal/1000; // 0.1%
    uint256 public maxTxAmount = _tTotal/200;
    uint256 public maxWalletTokens = _tTotal/100;


    event swapEnabledUpdated(bool enabled);
    event distributeThresholdPass(uint256 number);

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        _tOwned[_msgSender()] = _tTotal;
        

        IRouter _pancakeRouter = IRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        //IRouter _pancakeRouter = IRouter(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3);   // Testnet
         // Create a uniswap pair for this new token
        pancakePair = IFactory(_pancakeRouter.factory())
            .createPair(address(this), _pancakeRouter.WETH());

        // set the rest of the contract variables
        pancakeRouter = _pancakeRouter;

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[rewardsWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }


    function symbol() public view returns (string memory) {
        return _symbol;
    }


    function decimals() public view returns (uint8) {
        return _decimals;
    }


    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }


    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }


    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }


    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }


    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }


    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }


    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender]+addedValue);
        return true;
    }


    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }


    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }


    function totalFeesCharged() public view returns (uint256) {
        return _tFeeTotal;
    }


    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        valuesFromGetValues memory s = _getValues(tAmount, false);
        _rOwned[sender] -= s.rAmount;
        _rTotal -= s.rAmount;
        _tFeeTotal += tAmount;
    }


    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            valuesFromGetValues memory s = _getValues(tAmount, false);
            return s.rAmount;
        } else {
            valuesFromGetValues memory s = _getValues(tAmount, true);
            return s.rTransferAmount;
        }
    }


    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount/currentRate;
    }


    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function excludeFromReward(address[] memory accounts) public onlyOwner() {
        uint256 length = accounts.length;
        for(uint256 i=0;i<length;i++)
        {
        require(!_isExcluded[accounts[i]], "Account is already excluded");
        if(_rOwned[accounts[i]] > 0) {
            _tOwned[accounts[i]] = tokenFromReflection(_rOwned[accounts[i]]);
        }
        _isExcluded[accounts[i]] = true;
        _excluded.push(accounts[i]);
        }
    }


    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
     //to receive ETH from pancakeRouter when swaping
    receive() external payable {}


     function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal     = _rTotal-rFee;
        _tFeeTotal  = _tFeeTotal+tFee;
    }


    function _getValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rFee, to_return.rSwap) = _getRValues(to_return,tAmount, takeFee, _getRate());
        return to_return;
    }


    function _getTValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory s) {
        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
        s.tFee = tAmount*appliedFees.totFees*appliedFees.taxFee/1000000;
        s.tSwap = tAmount*appliedFees.totFees*appliedFees.swapFee/1000000;
        s.tTransferAmount = tAmount-s.tFee-s.tSwap;
        return s;
    }


    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256, uint256, uint256, uint256) {
        uint256 rAmount = tAmount*currentRate;
        if(!takeFee)
        {
            return (rAmount,rAmount,0,0);
        }
        uint256 rFee = s.tFee*currentRate;
        uint256 rSwap = s.tSwap*currentRate;
        uint256 rTransferAmount = rAmount-rFee-rSwap;
        return (rAmount, rTransferAmount, rFee, rSwap);
    }


    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/tSupply;
    }


    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        uint256 length = _excluded.length;    
        for (uint256 i = 0; i < length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply -=_rOwned[_excluded[i]];
            tSupply -=_tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeSwapFees(uint256 rSwap, uint256 tSwap) private {

        _rOwned[address(this)] +=rSwap;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] +=tSwap;
    }
    
    
            //////////////////////////
           /// Setters functions  ///
          //////////////////////////
        
   function setMarketingWallet(address payable _address) external onlyOwner returns (bool){
        marketingWallet = _address;
        _isExcludedFromFee[marketingWallet] = true;
        return true;
    }
    
    function setRewardsWallet(address payable _address) external onlyOwner returns (bool){
        rewardsWallet = _address;
        _isExcludedFromFee[rewardsWallet] = true;
        return true;
    }
    
    function setDeployerAddress(address payable _address) external onlyOwner returns (bool){
        deployerAddress = _address;
        _isExcludedFromFee[deployerAddress] = true;
        return true;
    }
    
    function setBuyFees(uint256 taxFee, uint256 marketingFee, uint256 rewardsFee, uint256 liquidityFee) external onlyOwner{
        buyFees.taxFee = taxFee;
        buyFees.marketingFee = marketingFee;
        buyFees.rewardsFee = rewardsFee;
        buyFees.liquidityFee = liquidityFee;
        buyFees.swapFee = marketingFee+rewardsFee+liquidityFee;
        require(buyFees.swapFee+buyFees.taxFee == 10000, "sum of all percentages should be 10000");
    }
    
    function setSellFees(uint256 sellTaxFee, uint256 sellMarketingFee, uint256 sellRewardsFee, uint256 sellLiquidityFee) external onlyOwner{
        sellFees.taxFee = sellTaxFee;
        sellFees.marketingFee = sellMarketingFee;
        sellFees.rewardsFee = sellRewardsFee;
        sellFees.liquidityFee = sellLiquidityFee;
        sellFees.swapFee = sellMarketingFee+sellRewardsFee+sellLiquidityFee;
        require(sellFees.swapFee+sellFees.taxFee == 10000, "sum of all percentages should be 10000");
    }
    
    function setTotalBuyFees(uint256 _totFees) external onlyOwner{
        buyFees.totFees = _totFees;
    }
    
    function setTotalSellFees(uint256 _totSellFees) external onlyOwner{
        sellFees.totFees = _totSellFees;
    }

    function setSwapEnabled(bool _enabled) public onlyOwner {
        swapEnabled = _enabled;
        emit swapEnabledUpdated(_enabled);
    }
    
    function setNumTokensToSwap(uint256 amount) external onlyOwner{
        minTokensToSwap = amount * 10**9;
    }
    
    function setMaxTxAmount(uint256 amount) external onlyOwner{
        maxTxAmount = amount * 10**9;
    }
    
    function setMaxWalletAmount(uint256 amount) external onlyOwner{
        maxWalletTokens = amount * 10**9;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }


    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isBadActor[from] && !_isBadActor[to], "Bots are not allowed");
        
        if( to != address(pancakeRouter) && to != deadAddress && !_isExcludedFromFee[from] && !_isExcludedFromFee[to] ) {
            require(amount <= maxTxAmount, 'You are exceeding maxTxAmount');
        }
        
        if( to != owner() &&
            to != address(this) &&
            to != pancakePair &&
            to != marketingWallet &&
            to != rewardsWallet && 
            to != deadAddress && 
            to != address(pancakeRouter) && 
            to != deployerAddress ){
            uint256 heldTokens = balanceOf(to);
            require((heldTokens + amount) <= maxWalletTokens, "Total Holding is currently limited, you can not hold that much.");
        }
        
        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= minTokensToSwap;
        if (
            overMinTokenBalance &&
            !inSwap &&
            from != pancakePair &&
            swapEnabled
        ) {
            emit distributeThresholdPass(contractTokenBalance);
            contractTokenBalance = minTokensToSwap;
            swapAndSendToFees(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        bool isSale = false;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        } else
        {
            if(to == pancakePair){
            isSale = true;
            }
        }
             
        // transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee,isSale);
    }
    
    function swapAndSendToFees(uint256 tokens) private lockTheSwap {
        uint256 tokensForLiquidity = tokens*appliedFees.liquidityFee/appliedFees.swapFee;               //TODO: Check Safemath
        uint256 initialBalance = address(this).balance;                                                 // Balance of BNB
        swapTokensForBNB(tokens - tokensForLiquidity/2);                                                //TODO: Check Safemath  
        uint256 transferBalance = address(this).balance-initialBalance;                                 // Check the new balance of BNB
        rewardsWallet.sendValue(transferBalance*appliedFees.rewardsFee/appliedFees.swapFee);
        marketingWallet.sendValue(transferBalance*appliedFees.marketingFee/appliedFees.swapFee);
        addLiquidity(tokensForLiquidity/2,address(this).balance);
    }


    function swapTokensForBNB(uint256 tokenAmount) private {

        // generate the pancakeswap pair path of token -> wbnb
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = pancakeRouter.WETH();

        if(allowance(address(this), address(pancakeRouter)) < tokenAmount) {
          _approve(address(this), address(pancakeRouter), ~uint256(0));
        }

        // make the swap
        pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of BNB
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private {
        // Approve token transfer to cover all possible scenarios
        _approve(address(this), address(pancakeRouter), tokenAmount);
        // Add the liquidity
        pancakeRouter.addLiquidityETH{value: bnbAmount}(
            address(this),
            tokenAmount,
            0, // Slippage is unavoidable
            0, // Slippage is unavoidable
            owner(),
            block.timestamp
        );
    }


    // this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee, bool isSale) private {
        if(takeFee){
            if(isSale)
            {
                appliedFees = sellFees;
            }
            else
            {
                appliedFees = buyFees;
            }
        }
        
        valuesFromGetValues memory s = _getValues(amount, takeFee);

        if (_isExcluded[sender]) {
            _tOwned[sender] -=amount;
        } 
        if (_isExcluded[recipient]) {
            _tOwned[recipient] += s.tTransferAmount;
        }
        _rOwned[sender] -= s.rAmount;
        _rOwned[recipient] +=s.rTransferAmount;
        
        if(takeFee)
            {
             _takeSwapFees(s.rSwap,s.tSwap);
             _reflectFee(s.rFee, s.tFee);
             emit Transfer(sender, address(this), s.tSwap);
            }
        emit Transfer(sender, recipient, s.tTransferAmount);
    }
    
            //////////////////////////
           /// Emergency functions //
          //////////////////////////


    function rescueBNBFromContract() external onlyOwner {
        address payable _owner = payable(msg.sender);
        _owner.transfer(address(this).balance);
    }
    
    function manualSwap() external onlyOwner lockTheSwap {
        uint256 tokensToSwap = balanceOf(address(this));
        swapTokensForBNB(tokensToSwap);
    }
    
    function manualSend() external onlyOwner{
        swapAndSendToFees(balanceOf(address(this)));
    }


    // To be used for snipe-bots and bad actors communicated on with the community.
    function badActorDefenseMechanism(address account, bool isBadActor) external onlyOwner{
        _isBadActor[account] = isBadActor;
    }
    
    function checkBadActor(address account) public view returns(bool){
        return _isBadActor[account];
    }
    
    function setRouterAddress(address newRouter) external onlyOwner {
        require(address(pancakeRouter) != newRouter, 'Router already set');
        //give the option to change the router down the line 
        IRouter _newRouter = IRouter(newRouter);
        address get_pair = IFactory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        //checks if pair already exists
        if (get_pair == address(0)) {
            pancakePair = IFactory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            pancakePair = get_pair;
        }
        pancakeRouter = _newRouter;
    }
    
}

File 2 of 7: Address.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

library Address {

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

}

File 3 of 7: Context.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }


    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 4 of 7: IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IERC20 {


    function totalSupply() external view returns (uint256);


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

File 5 of 7: IFactory.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}

File 6 of 7: IRouter.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

File 7 of 7: Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */

abstract contract Ownable is Context {
    address private _owner;


    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


    constructor() {
        _setOwner(_msgSender());
    }


    function owner() public view virtual returns (address) {
        return _owner;
    }


    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }


    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }


    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }


    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"number","type":"uint256"}],"name":"distributeThresholdPass","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"swapEnabledUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","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":"account","type":"address"},{"internalType":"bool","name":"isBadActor","type":"bool"}],"name":"badActorDefenseMechanism","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"rewardsFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint256","name":"totFees","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"checkBadActor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakePair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeRouter","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueBNBFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"rewardsFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint256","name":"totFees","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"rewardsFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_address","type":"address"}],"name":"setDeployerAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_address","type":"address"}],"name":"setMarketingWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_address","type":"address"}],"name":"setRewardsWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellRewardsFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totFees","type":"uint256"}],"name":"setTotalBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totSellFees","type":"uint256"}],"name":"setTotalSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesCharged","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526802b5e3af16b188000060088190556200002190600019620006a0565b6200002f906000196200063d565b60095560408051808201909152600580825264576f6a616b60d81b60209092019182526200006091600b916200054e565b50604080518082019091526003808252622ba7a560e91b60209092019182526200008d91600c916200054e565b50600d805460ff19166009179055600019600e556040805160c080820183526107d08083526020808401829052838501829052610fa06060808601829052611f406080808801829052600560a0988901819052600f8790556010879055601187905560128590556013839055601481905589519788018a52610598808952610594898801819052610b289b8a018c90526110bc958a01869052612178938a01849052600799909a01899052601555601698909855601798909855601891909155601996909655601a93909355601b829055601c829055601d91909155601e91909155601f929092559055602780546001600160a01b031990811673d79f1f15a94fc9a8875eb291e20419285fc4bb791790915560288054821673597bdac414f295b6c2aee83b790f0443f79e83a317905560298054821661dead179055602a80549091169055602c805460ff60a81b1916600160a81b179055600854620001f8906103e89062000626565b602d5560c86008546200020c919062000626565b602e55606460085462000220919062000626565b602f553480156200023057600080fd5b506200023c33620004fe565b60095433600090815260016020908152604080832093909355600854600282529183902091909155815163c45a015560e01b815291517310ed43c718714eb63d5aa57b78b54704e256024e92839263c45a015592600480840193829003018186803b158015620002ab57600080fd5b505afa158015620002c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e69190620005f4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032f57600080fd5b505afa15801562000344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036a9190620005f4565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003b357600080fd5b505af1158015620003c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ee9190620005f4565b602c80546001600160a01b03199081166001600160a01b0393841617909155602b8054909116918316919091179055600160056000620004366000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556027548216815260059093528183208054851660019081179091556028549091168352818320805485168217905530835291208054909216179055620004a73390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600854604051620004ef91815260200190565b60405180910390a350620006cd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200055c9062000663565b90600052602060002090601f016020900481019282620005805760008555620005cb565b82601f106200059b57805160ff1916838001178555620005cb565b82800160010185558215620005cb579182015b82811115620005cb578251825591602001919060010190620005ae565b50620005d9929150620005dd565b5090565b5b80821115620005d95760008155600101620005de565b6000602082840312156200060757600080fd5b81516001600160a01b03811681146200061f57600080fd5b9392505050565b600082620006385762000638620006b7565b500490565b6000828210156200065e57634e487b7160e01b600052601160045260246000fd5b500390565b600181811c908216806200067857607f821691505b602082108114156200069a57634e487b7160e01b600052602260045260246000fd5b50919050565b600082620006b257620006b2620006b7565b500690565b634e487b7160e01b600052601260045260246000fd5b61349e80620006dd6000396000f3fe6080604052600436106103035760003560e01c80636ddd171311610190578063ae2c7ef2116100dc578063e01af92c11610095578063ea2f0b371161006f578063ea2f0b37146109ad578063ec28438a146109cd578063f2fde38b146109ed578063f429389014610a0d57600080fd5b8063e01af92c1461090a578063e0f3ccf51461092a578063e4748b9e1461098257600080fd5b8063ae2c7ef21461082f578063b75789401461084f578063b8c9d25c14610864578063c21ebd0714610884578063c4a21834146108a4578063dd62ed3e146108c457600080fd5b80638c0b5e221161014957806395d89b411161012357806395d89b41146107ba578063a1980430146107cf578063a457c2d7146107ef578063a9059cbb1461080f57600080fd5b80638c0b5e22146107665780638da5cb5b1461077c57806392152f181461079a57600080fd5b80636ddd17131461069757806370a08231146106b8578063715018a6146106d857806375f0a874146106ed57806388f820201461070d5780638a339d8e1461074657600080fd5b806341cb87fc1161024f57806357726e141161020857806363a803e1116101e257806363a803e11461061357806365e1d909146106295780636848a03e1461063e5780636c5b28551461067757600080fd5b806357726e14146105b35780635b35f9c9146105d35780635d098b38146105f357600080fd5b806341cb87fc146104e5578063437823ec146105055780634549b0391461052557806351bc3c851461054557806352390c021461055a5780635342acb41461057a57600080fd5b806327a14fc2116102bc578063313ce56711610296578063313ce567146104635780633685d4191461048557806339509351146104a55780633bd5d173146104c557600080fd5b806327a14fc2146103eb57806327c8f8351461040b5780632d8381191461044357600080fd5b806306fdde031461030f578063095ea7b31461033a5780630f569dad1461036a578063178d9b8e1461038c57806318160ddd146103ac57806323b872dd146103cb57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610a22565b6040516103319190613203565b60405180910390f35b34801561034657600080fd5b5061035a610355366004613054565b610ab4565b6040519015158152602001610331565b34801561037657600080fd5b5061038a610385366004613167565b610acb565b005b34801561039857600080fd5b5061038a6103a73660046131d1565b610b12565b3480156103b857600080fd5b506008545b604051908152602001610331565b3480156103d757600080fd5b5061035a6103e6366004612fde565b610bdb565b3480156103f757600080fd5b5061038a610406366004613167565b610c85565b34801561041757600080fd5b5060295461042b906001600160a01b031681565b6040516001600160a01b039091168152602001610331565b34801561044f57600080fd5b506103bd61045e366004613167565b610cc3565b34801561046f57600080fd5b50600d5460405160ff9091168152602001610331565b34801561049157600080fd5b5061038a6104a0366004612f6b565b610d47565b3480156104b157600080fd5b5061035a6104c0366004613054565b610ece565b3480156104d157600080fd5b5061038a6104e0366004613167565b610f0a565b3480156104f157600080fd5b5061038a610500366004612f6b565b610ff4565b34801561051157600080fd5b5061038a610520366004612f6b565b6113cd565b34801561053157600080fd5b506103bd610540366004613180565b61141b565b34801561055157600080fd5b5061038a6114a5565b34801561056657600080fd5b5061038a610575366004612f6b565b611508565b34801561058657600080fd5b5061035a610595366004612f6b565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105bf57600080fd5b5061038a6105ce36600461301f565b61162b565b3480156105df57600080fd5b5060285461042b906001600160a01b031681565b3480156105ff57600080fd5b5061035a61060e366004612f6b565b611680565b34801561061f57600080fd5b506103bd602f5481565b34801561063557600080fd5b5061038a6116ec565b34801561064a57600080fd5b5061035a610659366004612f6b565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561068357600080fd5b5061038a6106923660046131d1565b611744565b3480156106a357600080fd5b50602c5461035a90600160a81b900460ff1681565b3480156106c457600080fd5b506103bd6106d3366004612f6b565b6117a8565b3480156106e457600080fd5b5061038a611807565b3480156106f957600080fd5b5060275461042b906001600160a01b031681565b34801561071957600080fd5b5061035a610728366004612f6b565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561075257600080fd5b5061038a610761366004613080565b61183d565b34801561077257600080fd5b506103bd602e5481565b34801561078857600080fd5b506000546001600160a01b031661042b565b3480156107a657600080fd5b5061035a6107b5366004612f6b565b611a5c565b3480156107c657600080fd5b50610324611ac6565b3480156107db57600080fd5b5061035a6107ea366004612f6b565b611ad5565b3480156107fb57600080fd5b5061035a61080a366004613054565b611b3f565b34801561081b57600080fd5b5061035a61082a366004613054565b611bd8565b34801561083b57600080fd5b5061038a61084a366004613167565b611be5565b34801561085b57600080fd5b50600a546103bd565b34801561087057600080fd5b50602c5461042b906001600160a01b031681565b34801561089057600080fd5b50602b5461042b906001600160a01b031681565b3480156108b057600080fd5b5061038a6108bf366004613167565b611c14565b3480156108d057600080fd5b506103bd6108df366004612fa5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561091657600080fd5b5061038a61092536600461314c565b611c43565b34801561093657600080fd5b50601554601654601754601854601954601a5461095595949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610331565b34801561098e57600080fd5b50600f5460105460115460125460135460145461095595949392919086565b3480156109b957600080fd5b5061038a6109c8366004612f6b565b611cc5565b3480156109d957600080fd5b5061038a6109e8366004613167565b611d10565b3480156109f957600080fd5b5061038a610a08366004612f6b565b611d4e565b348015610a1957600080fd5b5061038a611de9565b6060600b8054610a31906133a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5d906133a5565b8015610aaa5780601f10610a7f57610100808354040283529160200191610aaa565b820191906000526020600020905b815481529060010190602001808311610a8d57829003601f168201915b5050505050905090565b6000610ac1338484611e24565b5060015b92915050565b6000546001600160a01b03163314610afe5760405162461bcd60e51b8152600401610af59061328f565b60405180910390fd5b610b0c81633b9aca0061336f565b602d5550565b6000546001600160a01b03163314610b3c5760405162461bcd60e51b8152600401610af59061328f565b600f84905560108390556011829055601281905580610b5b8385613335565b610b659190613335565b6013819055600f54610b7691613335565b61271014610bd55760405162461bcd60e51b815260206004820152602660248201527f73756d206f6620616c6c2070657263656e74616765732073686f756c6420626560448201526502031303030360d41b6064820152608401610af5565b50505050565b6000610be8848484611f48565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610c6d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610af5565b610c7a8533858403611e24565b506001949350505050565b6000546001600160a01b03163314610caf5760405162461bcd60e51b8152600401610af59061328f565b610cbd81633b9aca0061336f565b602f5550565b6000600954821115610d2a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610af5565b6000610d3461243d565b9050610d40818461334d565b9392505050565b6000546001600160a01b03163314610d715760405162461bcd60e51b8152600401610af59061328f565b6001600160a01b03811660009081526006602052604090205460ff16610da95760405162461bcd60e51b8152600401610af590613258565b60005b600754811015610eca57816001600160a01b031660078281548110610dd357610dd3613427565b6000918252602090912001546001600160a01b03161415610eb85760078054610dfe9060019061338e565b81548110610e0e57610e0e613427565b600091825260209091200154600780546001600160a01b039092169183908110610e3a57610e3a613427565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600690925220805460ff191690556007805480610e9257610e92613411565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ec2816133e0565b915050610dac565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ac1918590610f05908690613335565b611e24565b3360008181526006602052604090205460ff1615610f7f5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610af5565b6000610f8c836000612460565b80516001600160a01b038416600090815260016020526040812080549394509192610fb890849061338e565b9091555050805160098054600090610fd190849061338e565b9250508190555082600a6000828254610fea9190613335565b9091555050505050565b6000546001600160a01b0316331461101e5760405162461bcd60e51b8152600401610af59061328f565b602b546001600160a01b03828116911614156110715760405162461bcd60e51b8152602060048201526012602482015271149bdd5d195c88185b1c9958591e481cd95d60721b6044820152606401610af5565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156110b157600080fd5b505afa1580156110c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e99190612f88565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561113157600080fd5b505afa158015611145573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111699190612f88565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156111af57600080fd5b505afa1580156111c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e79190612f88565b90506001600160a01b03811661138d57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561123057600080fd5b505afa158015611244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112689190612f88565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156112b057600080fd5b505afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e89190612f88565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561133057600080fd5b505af1158015611344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113689190612f88565b602c80546001600160a01b0319166001600160a01b03929092169190911790556113a9565b602c80546001600160a01b0319166001600160a01b0383161790555b50602b80546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b031633146113f75760405162461bcd60e51b8152600401610af59061328f565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b600060085483111561146f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610af5565b8161148b576000611481846000612460565b519150610ac59050565b6000611498846001612460565b602001519150610ac59050565b6000546001600160a01b031633146114cf5760405162461bcd60e51b8152600401610af59061328f565b602c805460ff60a01b1916600160a01b17905560006114ed306117a8565b90506114f8816124d6565b50602c805460ff60a01b19169055565b6000546001600160a01b031633146115325760405162461bcd60e51b8152600401610af59061328f565b6001600160a01b03811660009081526006602052604090205460ff161561156b5760405162461bcd60e51b8152600401610af590613258565b6001600160a01b038116600090815260016020526040902054156115c5576001600160a01b0381166000908152600160205260409020546115ab90610cc3565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6000546001600160a01b031633146116555760405162461bcd60e51b8152600401610af59061328f565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b600080546001600160a01b031633146116ab5760405162461bcd60e51b8152600401610af59061328f565b50602780546001600160a01b0319166001600160a01b0383169081179091556000908152600560205260409020805460ff191660019081179091555b919050565b6000546001600160a01b031633146117165760405162461bcd60e51b8152600401610af59061328f565b604051339081904780156108fc02916000818181858888f19350505050158015610eca573d6000803e3d6000fd5b6000546001600160a01b0316331461176e5760405162461bcd60e51b8152600401610af59061328f565b60158490556016839055601782905560188190558061178d8385613335565b6117979190613335565b6019819055601554610b7691613335565b6001600160a01b03811660009081526006602052604081205460ff16156117e557506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610ac590610cc3565b6000546001600160a01b031633146118315760405162461bcd60e51b8152600401610af59061328f565b61183b6000612670565b565b6000546001600160a01b031633146118675760405162461bcd60e51b8152600401610af59061328f565b805160005b81811015611a57576006600084838151811061188a5761188a613427565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16156118ce5760405162461bcd60e51b8152600401610af590613258565b6000600160008584815181106118e6576118e6613427565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054111561199f5761195c6001600085848151811061192e5761192e613427565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054610cc3565b6002600085848151811061197257611972613427565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055505b6001600660008584815181106119b7576119b7613427565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506007838281518110611a0a57611a0a613427565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b0390921691909117905580611a4f816133e0565b91505061186c565b505050565b600080546001600160a01b03163314611a875760405162461bcd60e51b8152600401610af59061328f565b50602a80546001600160a01b0319166001600160a01b039290921691821790556000908152600560205260409020805460ff1916600190811790915590565b6060600c8054610a31906133a5565b600080546001600160a01b03163314611b005760405162461bcd60e51b8152600401610af59061328f565b50602880546001600160a01b0319166001600160a01b039290921691821790556000908152600560205260409020805460ff1916600190811790915590565b3360009081526003602090815260408083206001600160a01b038616845290915281205482811015611bc15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610af5565b611bce3385858403611e24565b5060019392505050565b6000610ac1338484611f48565b6000546001600160a01b03163314611c0f5760405162461bcd60e51b8152600401610af59061328f565b601a55565b6000546001600160a01b03163314611c3e5760405162461bcd60e51b8152600401610af59061328f565b601455565b6000546001600160a01b03163314611c6d5760405162461bcd60e51b8152600401610af59061328f565b602c8054821515600160a81b0260ff60a81b199091161790556040517f4b2f02f52c63d8e0a67a39776bc2d158740139cfef7438af1666c33a6a29dac390611cba90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611cef5760405162461bcd60e51b8152600401610af59061328f565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b03163314611d3a5760405162461bcd60e51b8152600401610af59061328f565b611d4881633b9aca0061336f565b602e5550565b6000546001600160a01b03163314611d785760405162461bcd60e51b8152600401610af59061328f565b6001600160a01b038116611ddd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610af5565b611de681612670565b50565b6000546001600160a01b03163314611e135760405162461bcd60e51b8152600401610af59061328f565b61183b611e1f306117a8565b6126c0565b6001600160a01b038316611e865760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610af5565b6001600160a01b038216611ee75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610af5565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611fac5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610af5565b6001600160a01b03821661200e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610af5565b600081116120705760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610af5565b6001600160a01b03831660009081526004602052604090205460ff161580156120b257506001600160a01b03821660009081526004602052604090205460ff16155b6120f55760405162461bcd60e51b8152602060048201526014602482015273109bdd1cc8185c99481b9bdd08185b1b1bddd95960621b6044820152606401610af5565b602b546001600160a01b0383811691161480159061212157506029546001600160a01b03838116911614155b801561214657506001600160a01b03831660009081526005602052604090205460ff16155b801561216b57506001600160a01b03821660009081526005602052604090205460ff16155b156121c257602e548111156121c25760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61785478416d6f756e740000006044820152606401610af5565b6000546001600160a01b038381169116148015906121e957506001600160a01b0382163014155b80156122035750602c546001600160a01b03838116911614155b801561221d57506027546001600160a01b03838116911614155b801561223757506028546001600160a01b03838116911614155b801561225157506029546001600160a01b03838116911614155b801561226b5750602b546001600160a01b03838116911614155b80156122855750602a546001600160a01b03838116911614155b1561231b576000612295836117a8565b602f549091506122a58383613335565b11156123195760405162461bcd60e51b815260206004820152603f60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f7420686f6c642074686174206d7563682e006064820152608401610af5565b505b6000612326306117a8565b602d54909150811080159081906123475750602c54600160a01b900460ff16155b80156123615750602c546001600160a01b03868116911614155b80156123765750602c54600160a81b900460ff165b156123bc576040518281527f5d8e138ea7e8cc683e5a4bd2547601dfa8eb0c1fa889034c488886f1c4fd70f09060200160405180910390a1602d5491506123bc826126c0565b6001600160a01b0385166000908152600560205260408120546001919060ff16806123ff57506001600160a01b03861660009081526005602052604090205460ff165b1561240d5760009150612427565b602c546001600160a01b0387811691161415612427575060015b61243487878785856127a8565b50505050505050565b600080600061244a6129ec565b9092509050612459818361334d565b9250505090565b6124a06040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6124aa8383612b75565b90506124bf8184846124ba61243d565b612c4a565b606085015260408401526020830152815292915050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061250b5761250b613427565b6001600160a01b03928316602091820292909201810191909152602b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561255f57600080fd5b505afa158015612573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125979190612f88565b816001815181106125aa576125aa613427565b6001600160a01b03928316602091820292909201810191909152602b543060009081526003835260408082209290941681529152205482111561260157602b546126019030906001600160a01b0316600019611e24565b602b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061263a9085906000908690309042906004016132c4565b600060405180830381600087803b15801561265457600080fd5b505af1158015612668573d6000803e3d6000fd5b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602c805460ff60a01b1916600160a01b179055601f54601e54600091906126e7908461336f565b6126f1919061334d565b90504761271161270260028461334d565b61270c908561338e565b6124d6565b600061271d824761338e565b601f54601d5491925061275091612734908461336f565b61273e919061334d565b6028546001600160a01b031690612cc9565b601f54601c546127819190612765908461336f565b61276f919061334d565b6027546001600160a01b031690612cc9565b61279561278f60028561334d565b47612de2565b5050602c805460ff60a01b191690555050565b81156128025780156127dd57601554601b55601654601c55601754601d55601854601e55601954601f55601a54602055612802565b600f54601b55601054601c55601154601d55601254601e55601354601f556014546020555b600061280e8484612460565b6001600160a01b03871660009081526006602052604090205490915060ff1615612860576001600160a01b0386166000908152600260205260408120805486929061285a90849061338e565b90915550505b6001600160a01b03851660009081526006602052604090205460ff16156128b45760808101516001600160a01b038616600090815260026020526040812080549091906128ae908490613335565b90915550505b80516001600160a01b038716600090815260016020526040812080549091906128de90849061338e565b90915550506020808201516001600160a01b0387166000908152600190925260408220805491929091612912908490613335565b909155505082156129935761292f81606001518260c00151612ec6565b61294181604001518260a00151612f2a565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161298a91815260200190565b60405180910390a35b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83608001516040516129dc91815260200190565b60405180910390a3505050505050565b60095460085460075460009283929091835b81811015612b4257836001600060078481548110612a1e57612a1e613427565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a895750826002600060078481548110612a6257612a62613427565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612aa05760095460085495509550505050509091565b6001600060078381548110612ab757612ab7613427565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612ae6908561338e565b93506002600060078381548110612aff57612aff613427565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612b2e908461338e565b925080612b3a816133e0565b9150506129fe565b50600854600954612b53919061334d565b831015612b6b57600954600854945094505050509091565b5090939092509050565b612bb56040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81612bc65760808101839052610ac5565b601b54602054620f42409190612bdc908661336f565b612be6919061336f565b612bf0919061334d565b60a0820152601f54602054620f42409190612c0b908661336f565b612c15919061336f565b612c1f919061334d565b60c0820181905260a0820151612c35908561338e565b612c3f919061338e565b608082015292915050565b600080808080612c5a868961336f565b905086612c7257935083925060009150819050612cbe565b6000868a60a00151612c84919061336f565b90506000878b60c00151612c98919061336f565b9050600081612ca7848661338e565b612cb1919061338e565b9397509295509093509150505b945094509450949050565b80471015612d195760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610af5565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612d66576040519150601f19603f3d011682016040523d82523d6000602084013e612d6b565b606091505b5050905080611a575760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610af5565b602b54612dfa9030906001600160a01b031684611e24565b602b546001600160a01b031663f305d719823085600080612e236000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ebf91906131a3565b5050505050565b3060009081526001602052604081208054849290612ee5908490613335565b90915550503060009081526006602052604090205460ff1615610eca573060009081526002602052604081208054839290612f21908490613335565b90915550505050565b81600954612f38919061338e565b600955600a54612f49908290613335565b600a555050565b80356116e781613453565b803580151581146116e757600080fd5b600060208284031215612f7d57600080fd5b8135610d4081613453565b600060208284031215612f9a57600080fd5b8151610d4081613453565b60008060408385031215612fb857600080fd5b8235612fc381613453565b91506020830135612fd381613453565b809150509250929050565b600080600060608486031215612ff357600080fd5b8335612ffe81613453565b9250602084013561300e81613453565b929592945050506040919091013590565b6000806040838503121561303257600080fd5b823561303d81613453565b915061304b60208401612f5b565b90509250929050565b6000806040838503121561306757600080fd5b823561307281613453565b946020939093013593505050565b6000602080838503121561309357600080fd5b823567ffffffffffffffff808211156130ab57600080fd5b818501915085601f8301126130bf57600080fd5b8135818111156130d1576130d161343d565b8060051b604051601f19603f830116810181811085821117156130f6576130f661343d565b604052828152858101935084860182860187018a101561311557600080fd5b600095505b8386101561313f5761312b81612f50565b85526001959095019493860193860161311a565b5098975050505050505050565b60006020828403121561315e57600080fd5b610d4082612f5b565b60006020828403121561317957600080fd5b5035919050565b6000806040838503121561319357600080fd5b8235915061304b60208401612f5b565b6000806000606084860312156131b857600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156131e757600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b8181101561323057858101830151858201604001528201613214565b81811115613242576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133145784516001600160a01b0316835293830193918301916001016132ef565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613348576133486133fb565b500190565b60008261336a57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613389576133896133fb565b500290565b6000828210156133a0576133a06133fb565b500390565b600181811c908216806133b957607f821691505b602082108114156133da57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156133f4576133f46133fb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611de657600080fdfea2646970667358221220c590b67485ab96586a435bd9e76d30b007b30b8a0f000aa6df70321ffc7f166864736f6c63430008070033

Deployed ByteCode Sourcemap

201:20895:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4030:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4919:158;;;;;;;;;;-1:-1:-1;4919:158:6;;;;;:::i;:::-;;:::i;:::-;;;6769:14:7;;6762:22;6744:41;;6732:2;6717:18;4919:158:6;6604:187:7;13511:111:6;;;;;;;;;;-1:-1:-1;13511:111:6;;;;;:::i;:::-;;:::i;:::-;;12151:453;;;;;;;;;;-1:-1:-1;12151:453:6;;;;;:::i;:::-;;:::i;4298:93::-;;;;;;;;;;-1:-1:-1;4377:7:6;;4298:93;;;15596:25:7;;;15584:2;15569:18;4298:93:6;15450:177:7;5084:440:6;;;;;;;;;;-1:-1:-1;5084:440:6;;;;;:::i;:::-;;:::i;13745:111::-;;;;;;;;;;-1:-1:-1;13745:111:6;;;;;:::i;:::-;;:::i;2477:80::-;;;;;;;;;;-1:-1:-1;2477:80:6;;;;-1:-1:-1;;;;;2477:80:6;;;;;;-1:-1:-1;;;;;5415:32:7;;;5397:51;;5385:2;5370:18;2477:80:6;5251:203:7;7188:244:6;;;;;;;;;;-1:-1:-1;7188:244:6;;;;;:::i;:::-;;:::i;4210:81::-;;;;;;;;;;-1:-1:-1;4275:9:6;;4210:81;;4275:9;;;;17299:36:7;;17287:2;17272:18;4210:81:6;17157:184:7;8238:468:6;;;;;;;;;;-1:-1:-1;8238:468:6;;;;;:::i;:::-;;:::i;5531:210::-;;;;;;;;;;-1:-1:-1;5531:210:6;;;;;:::i;:::-;;:::i;6384:340::-;;;;;;;;;;-1:-1:-1;6384:340:6;;;;;:::i;:::-;;:::i;20442:647::-;;;;;;;;;;-1:-1:-1;20442:647:6;;;;;:::i;:::-;;:::i;8716:109::-;;;;;;;;;;-1:-1:-1;8716:109:6;;;;;:::i;:::-;;:::i;6731:450::-;;;;;;;;;;-1:-1:-1;6731:450:6;;;;;:::i;:::-;;:::i;19819:157::-;;;;;;;;;;;;;:::i;7439:326::-;;;;;;;;;;-1:-1:-1;7439:326:6;;;;;:::i;:::-;;:::i;13866:121::-;;;;;;;;;;-1:-1:-1;13866:121:6;;;;;:::i;:::-;-1:-1:-1;;;;;13953:27:6;13930:4;13953:27;;;:18;:27;;;;;;;;;13866:121;20177:136;;;;;;;;;;-1:-1:-1;20177:136:6;;;;;:::i;:::-;;:::i;2161:90::-;;;;;;;;;;-1:-1:-1;2161:90:6;;;;-1:-1:-1;;;;;2161:90:6;;;11518:203;;;;;;;;;;-1:-1:-1;11518:203:6;;;;;:::i;:::-;;:::i;2900:44::-;;;;;;;;;;;;;;;;19648:161;;;;;;;;;;;;;:::i;20323:109::-;;;;;;;;;;-1:-1:-1;20323:109:6;;;;;:::i;:::-;-1:-1:-1;;;;;20405:20:6;20383:4;20405:20;;;:11;:20;;;;;;;;;20323:109;12614:505;;;;;;;;;;-1:-1:-1;12614:505:6;;;;;:::i;:::-;;:::i;2758:30::-;;;;;;;;;;-1:-1:-1;2758:30:6;;;;-1:-1:-1;;;2758:30:6;;;;;;4398:195;;;;;;;;;;-1:-1:-1;4398:195:6;;;;;:::i;:::-;;:::i;1019:92:5:-;;;;;;;;;;;;;:::i;2063::6:-;;;;;;;;;;-1:-1:-1;2063:92:6;;;;-1:-1:-1;;;;;2063:92:6;;;6160:118;;;;;;;;;;-1:-1:-1;6160:118:6;;;;;:::i;:::-;-1:-1:-1;;;;;6251:20:6;6228:4;6251:20;;;:11;:20;;;;;;;;;6160:118;7771:460;;;;;;;;;;-1:-1:-1;7771:460:6;;;;;:::i;:::-;;:::i;2854:40::-;;;;;;;;;;;;;;;;803:85:5;;;;;;;;;;-1:-1:-1;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;803:85;;11938:203:6;;;;;;;;;;-1:-1:-1;11938:203:6;;;;;:::i;:::-;;:::i;4118:85::-;;;;;;;;;;;;;:::i;11731:197::-;;;;;;;;;;-1:-1:-1;11731:197:6;;;;;:::i;:::-;;:::i;5748:405::-;;;;;;;;;;-1:-1:-1;5748:405:6;;;;;:::i;:::-;;:::i;4600:164::-;;;;;;;;;;-1:-1:-1;4600:164:6;;;;;:::i;:::-;;:::i;13243:114::-;;;;;;;;;;-1:-1:-1;13243:114:6;;;;;:::i;:::-;;:::i;6285:92::-;;;;;;;;;;-1:-1:-1;6360:10:6;;6285:92;;2695:26;;;;;;;;;;-1:-1:-1;2695:26:6;;;;-1:-1:-1;;;;;2695:26:6;;;2661:28;;;;;;;;;;-1:-1:-1;2661:28:6;;;;-1:-1:-1;;;;;2661:28:6;;;13129:104;;;;;;;;;;-1:-1:-1;13129:104:6;;;;;:::i;:::-;;:::i;4771:141::-;;;;;;;;;;-1:-1:-1;4771:141:6;;;;;:::i;:::-;-1:-1:-1;;;;;4878:18:6;;;4852:7;4878:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4771:141;13363:138;;;;;;;;;;-1:-1:-1;13363:138:6;;;;;:::i;:::-;;:::i;1501:229::-;;;;;;;;;;-1:-1:-1;1501:229:6;;;;;;;;;;;;;;;;;;;;;;;;;16904:25:7;;;16960:2;16945:18;;16938:34;;;;16988:18;;;16981:34;;;;17046:2;17031:18;;17024:34;17089:3;17074:19;;17067:35;17133:3;17118:19;;17111:35;16891:3;16876:19;1501:229:6;16617:535:7;1266:228:6;;;;;;;;;;-1:-1:-1;1266:228:6;;;;;;;;;;;;;;;;;;;;;8835:108;;;;;;;;;;-1:-1:-1;8835:108:6;;;;;:::i;:::-;;:::i;13632:103::-;;;;;;;;;;-1:-1:-1;13632:103:6;;;;;:::i;:::-;;:::i;1118:189:5:-;;;;;;;;;;-1:-1:-1;1118:189:5;;;;;:::i;:::-;;:::i;19986:100:6:-;;;;;;;;;;;;;:::i;4030:81::-;4067:13;4099:5;4092:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4030:81;:::o;4919:158::-;4994:4;5010:39;168:10:1;5033:7:6;5042:6;5010:8;:39::i;:::-;-1:-1:-1;5066:4:6;4919:158;;;;;:::o;13511:111::-;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;;;;;;;;;13601:14:6::1;:6:::0;13610:5:::1;13601:14;:::i;:::-;13583:15;:32:::0;-1:-1:-1;13511:111:6:o;12151:453::-;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;12279:7:6::1;:23:::0;;;12312:20;:35;;;12357:18;:31;;;12398:20;:35;;;12421:12;12461:23:::1;12378:10:::0;12335:12;12461:23:::1;:::i;:::-;:36;;;;:::i;:::-;12443:15:::0;:54;;;:7:::1;12531:14:::0;12515:30:::1;::::0;::::1;:::i;:::-;12549:5;12515:39;12507:90;;;::::0;-1:-1:-1;;;12507:90:6;;8227:2:7;12507:90:6::1;::::0;::::1;8209:21:7::0;8266:2;8246:18;;;8239:30;8305:34;8285:18;;;8278:62;-1:-1:-1;;;8356:18:7;;;8349:36;8402:19;;12507:90:6::1;8025:402:7::0;12507:90:6::1;12151:453:::0;;;;:::o;5084:440::-;5182:4;5198:36;5208:6;5216:9;5227:6;5198:9;:36::i;:::-;-1:-1:-1;;;;;5272:19:6;;5245:24;5272:19;;;:11;:19;;;;;;;;168:10:1;5272:33:6;;;;;;;;5323:26;;;;5315:79;;;;-1:-1:-1;;;5315:79:6;;12146:2:7;5315:79:6;;;12128:21:7;12185:2;12165:18;;;12158:30;12224:34;12204:18;;;12197:62;-1:-1:-1;;;12275:18:7;;;12268:38;12323:19;;5315:79:6;11944:404:7;5315:79:6;5428:57;5437:6;168:10:1;5478:6:6;5459:16;:25;5428:8;:57::i;:::-;-1:-1:-1;5513:4:6;;5084:440;-1:-1:-1;;;;5084:440:6:o;13745:111::-;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;13835:14:6::1;:6:::0;13844:5:::1;13835:14;:::i;:::-;13817:15;:32:::0;-1:-1:-1;13745:111:6:o;7188:244::-;7254:7;7292;;7281;:18;;7273:73;;;;-1:-1:-1;;;7273:73:6;;8992:2:7;7273:73:6;;;8974:21:7;9031:2;9011:18;;;9004:30;9070:34;9050:18;;;9043:62;-1:-1:-1;;;9121:18:7;;;9114:40;9171:19;;7273:73:6;8790:406:7;7273:73:6;7356:19;7379:10;:8;:10::i;:::-;7356:33;-1:-1:-1;7406:19:6;7356:33;7406:7;:19;:::i;:::-;7399:26;7188:244;-1:-1:-1;;;7188:244:6:o;8238:468::-;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;8319:20:6;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;8311:60;;;;-1:-1:-1::0;;;8311:60:6::1;;;;;;;:::i;:::-;8386:9;8381:319;8405:9;:16:::0;8401:20;::::1;8381:319;;;8462:7;-1:-1:-1::0;;;;;8446:23:6::1;:9;8456:1;8446:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;8446:12:6::1;:23;8442:248;;;8504:9;8514:16:::0;;:20:::1;::::0;8533:1:::1;::::0;8514:20:::1;:::i;:::-;8504:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;8489:9:::1;:12:::0;;-1:-1:-1;;;;;8504:31:6;;::::1;::::0;8499:1;;8489:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;8489:46:6::1;-1:-1:-1::0;;;;;8489:46:6;;::::1;;::::0;;8553:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;8591:11:::1;:20:::0;;;;:28;;-1:-1:-1;;8591:28:6::1;::::0;;8637:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;8637:15:6;;;;;-1:-1:-1;;;;;;8637:15:6::1;::::0;;;;;8381:319:::1;8238:468:::0;:::o;8442:248::-:1;8423:3:::0;::::1;::::0;::::1;:::i;:::-;;;;8381:319;;;;8238:468:::0;:::o;5531:210::-;168:10:1;5619:4:6;5667:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5667:34:6;;;;;;;;;;5619:4;;5635:78;;5658:7;;5667:45;;5702:10;;5667:45;:::i;:::-;5635:8;:78::i;6384:340::-;168:10:1;6435:14:6;6483:19;;;:11;:19;;;;;;;;6482:20;6474:77;;;;-1:-1:-1;;;6474:77:6;;14833:2:7;6474:77:6;;;14815:21:7;14872:2;14852:18;;;14845:30;14911:34;14891:18;;;14884:62;-1:-1:-1;;;14962:18:7;;;14955:42;15014:19;;6474:77:6;14631:408:7;6474:77:6;6561:28;6592:26;6603:7;6612:5;6592:10;:26::i;:::-;6647:9;;-1:-1:-1;;;;;6628:15:6;;6647:9;6628:15;;;:7;:15;;;;;:28;;6561:57;;-1:-1:-1;6647:9:6;;6628:28;;6647:9;;6628:28;:::i;:::-;;;;-1:-1:-1;;6677:9:6;;6666:7;:20;;6677:9;;6666:20;;6677:9;;6666:20;:::i;:::-;;;;;;;;6710:7;6696:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;6384:340:6:o;20442:647::-;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;20532:13:6::1;::::0;-1:-1:-1;;;;;20524:35:6;;::::1;20532:13:::0;::::1;20524:35;;20516:66;;;::::0;-1:-1:-1;;;20516:66:6;;14486:2:7;20516:66:6::1;::::0;::::1;14468:21:7::0;14525:2;14505:18;;;14498:30;-1:-1:-1;;;14544:18:7;;;14537:48;14602:18;;20516:66:6::1;14284:342:7::0;20516:66:6::1;20654:18;20683:9;20654:39;;20703:16;20731:10;-1:-1:-1::0;;;;;20731:18:6::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20722:38:6::1;;20769:4;20776:10;-1:-1:-1::0;;;;;20776:15:6::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20722:72;::::0;-1:-1:-1;;;;;;20722:72:6::1;::::0;;;;;;-1:-1:-1;;;;;5913:15:7;;;20722:72:6::1;::::0;::::1;5895:34:7::0;5965:15;;5945:18;;;5938:43;5830:18;;20722:72:6::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20703:91:::0;-1:-1:-1;;;;;;20848:22:6;::::1;20844:203;;20909:10;-1:-1:-1::0;;;;;20909:18:6::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20900:41:6::1;;20950:4;20957:10;-1:-1:-1::0;;;;;20957:15:6::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20900:75;::::0;-1:-1:-1;;;;;;20900:75:6::1;::::0;;;;;;-1:-1:-1;;;;;5913:15:7;;;20900:75:6::1;::::0;::::1;5895:34:7::0;5965:15;;5945:18;;;5938:43;5830:18;;20900:75:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20886:11;:89:::0;;-1:-1:-1;;;;;;20886:89:6::1;-1:-1:-1::0;;;;;20886:89:6;;;::::1;::::0;;;::::1;::::0;;20844:203:::1;;;21014:11;:22:::0;;-1:-1:-1;;;;;;21014:22:6::1;-1:-1:-1::0;;;;;21014:22:6;::::1;;::::0;;20844:203:::1;-1:-1:-1::0;21056:13:6::1;:26:::0;;-1:-1:-1;;;;;;21056:26:6::1;-1:-1:-1::0;;;;;21056:26:6;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;20442:647:6:o;8716:109::-;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;8784:27:6::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;8784:34:6::1;8814:4;8784:34;::::0;;8716:109::o;6731:450::-;6823:7;6861;;6850;:18;;6842:62;;;;-1:-1:-1;;;6842:62:6;;11786:2:7;6842:62:6;;;11768:21:7;11825:2;11805:18;;;11798:30;11864:33;11844:18;;;11837:61;11915:18;;6842:62:6;11584:355:7;6842:62:6;6919:17;6914:261;;6952:28;6983:26;6994:7;7003:5;6983:10;:26::i;:::-;7030:9;;-1:-1:-1;7023:16:6;;-1:-1:-1;7023:16:6;6914:261;7070:28;7101:25;7112:7;7121:4;7101:10;:25::i;:::-;7147:17;;;;-1:-1:-1;7140:24:6;;-1:-1:-1;7140:24:6;19819:157;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;3079:6:6::1;:13:::0;;-1:-1:-1;;;;3079:13:6::1;-1:-1:-1::0;;;3079:13:6::1;::::0;;;19905:24:::2;19923:4;19905:9;:24::i;:::-;19882:47;;19939:30;19956:12;19939:16;:30::i;:::-;-1:-1:-1::0;3113:6:6::1;:14:::0;;-1:-1:-1;;;;3113:14:6::1;::::0;;19819:157::o;7439:326::-;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;7521:20:6;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;7520:21;7512:61;;;;-1:-1:-1::0;;;7512:61:6::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7586:16:6;::::1;7605:1;7586:16:::0;;;:7:::1;:16;::::0;;;;;:20;7583:106:::1;;-1:-1:-1::0;;;;;7661:16:6;::::1;;::::0;;;:7:::1;:16;::::0;;;;;7641:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;7622:16:6;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;7583:106:::1;-1:-1:-1::0;;;;;7698:20:6::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;7698:27:6::1;7721:4;7698:27:::0;;::::1;::::0;;;7735:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;7735:23:6::1;::::0;;::::1;::::0;;7439:326::o;20177:136::-;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;20273:20:6;;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:33;;-1:-1:-1;;20273:33:6::1;::::0;::::1;;::::0;;;::::1;::::0;;20177:136::o;11518:203::-;11600:4;875:6:5;;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;-1:-1:-1;11615:15:6::1;:26:::0;;-1:-1:-1;;;;;;11615:26:6::1;-1:-1:-1::0;;;;;11615:26:6;::::1;::::0;;::::1;::::0;;;-1:-1:-1;11651:35:6;;;:18:::1;:35;::::0;;;;:42;;-1:-1:-1;;11651:42:6::1;-1:-1:-1::0;11651:42:6;;::::1;::::0;;;1004:1:5::1;11518:203:6::0;;;:::o;19648:161::-;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;19764:38:6::1;::::0;19743:10:::1;::::0;;;19780:21:::1;19764:38:::0;::::1;;;::::0;19710:22:::1;19764:38:::0;19710:22;19764:38;19780:21;19743:10;19764:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;12614:505:::0;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;12759:8:6::1;:28:::0;;;12797:21;:40;;;12847:19;:36;;;12893:21;:40;;;12917:16;12962:31:::1;12869:14:::0;12821:16;12962:31:::1;:::i;:::-;:48;;;;:::i;:::-;12943:16:::0;:67;;;:8:::1;13045:15:::0;13028:32:::1;::::0;::::1;:::i;4398:195::-:0;-1:-1:-1;;;;;4487:20:6;;4464:7;4487:20;;;:11;:20;;;;;;;;4483:49;;;-1:-1:-1;;;;;;4516:16:6;;;;;:7;:16;;;;;;;4398:195::o;4483:49::-;-1:-1:-1;;;;;4569:16:6;;;;;;:7;:16;;;;;;4549:37;;:19;:37::i;1019:92:5:-;849:7;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;1083:21:::1;1101:1;1083:9;:21::i;:::-;1019:92::o:0;7771:460:6:-;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;7871:15:6;;7854:14:::1;7896:329;7914:6;7912:1;:8;7896:329;;;7953:11;:24;7965:8;7974:1;7965:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;7953:24:6::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;7953:24:6;;::::1;;7952:25;7944:65;;;;-1:-1:-1::0;;;7944:65:6::1;;;;;;;:::i;:::-;8045:1;8022:7;:20;8030:8;8039:1;8030:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;8022:20:6::1;-1:-1:-1::0;;;;;8022:20:6::1;;;;;;;;;;;;;:24;8019:118;;;8085:41;8105:7;:20;8113:8;8122:1;8113:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;8105:20:6::1;-1:-1:-1::0;;;;;8105:20:6::1;;;;;;;;;;;;;8085:19;:41::i;:::-;8062:7;:20;8070:8;8079:1;8070:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;8062:20:6::1;-1:-1:-1::0;;;;;8062:20:6::1;;;;;;;;;;;;:64;;;;8019:118;8173:4;8146:11;:24;8158:8;8167:1;8158:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;8146:24:6::1;-1:-1:-1::0;;;;;8146:24:6::1;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;8187:9;8202:8;8211:1;8202:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;8187:27;;::::1;::::0;::::1;::::0;;-1:-1:-1;8187:27:6;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;8187:27:6::1;-1:-1:-1::0;;;;;8187:27:6;;::::1;::::0;;;::::1;::::0;;7921:3;::::1;::::0;::::1;:::i;:::-;;;;7896:329;;;;7844:387;7771:460:::0;:::o;11938:203::-;12020:4;875:6:5;;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;-1:-1:-1;12035:15:6::1;:26:::0;;-1:-1:-1;;;;;;12035:26:6::1;-1:-1:-1::0;;;;;12035:26:6;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;12071:35:6;;;:18:::1;:35;::::0;;;;:42;;-1:-1:-1;;12071:42:6::1;-1:-1:-1::0;12071:42:6;;::::1;::::0;;;-1:-1:-1;11938:203:6:o;4118:85::-;4157:13;4189:7;4182:14;;;;;:::i;11731:197::-;11811:4;875:6:5;;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;-1:-1:-1;11826:13:6::1;:24:::0;;-1:-1:-1;;;;;;11826:24:6::1;-1:-1:-1::0;;;;;11826:24:6;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;11860:33:6;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;11860:40:6::1;-1:-1:-1::0;11860:40:6;;::::1;::::0;;;-1:-1:-1;11731:197:6:o;5748:405::-;168:10:1;5841:4:6;5884:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5884:34:6;;;;;;;;;;5936:35;;;;5928:85;;;;-1:-1:-1;;;5928:85:6;;15246:2:7;5928:85:6;;;15228:21:7;15285:2;15265:18;;;15258:30;15324:34;15304:18;;;15297:62;-1:-1:-1;;;15375:18:7;;;15368:35;15420:19;;5928:85:6;15044:401:7;5928:85:6;6047:67;168:10:1;6070:7:6;6098:15;6079:16;:34;6047:8;:67::i;:::-;-1:-1:-1;6142:4:6;;5748:405;-1:-1:-1;;;5748:405:6:o;4600:164::-;4678:4;4694:42;168:10:1;4718:9:6;4729:6;4694:9;:42::i;13243:114::-;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;13319:16:6;:31;13243:114::o;13129:104::-;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;13200:15:6;:26;13129:104::o;13363:138::-;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;13429:11:6::1;:22:::0;;;::::1;;-1:-1:-1::0;;;13429:22:6::1;-1:-1:-1::0;;;;13429:22:6;;::::1;;::::0;;13466:28:::1;::::0;::::1;::::0;::::1;::::0;13443:8;6769:14:7;6762:22;6744:41;;6732:2;6717:18;;6604:187;13466:28:6::1;;;;;;;;13363:138:::0;:::o;8835:108::-;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;8901:27:6::1;8931:5;8901:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;8901:35:6::1;::::0;;8835:108::o;13632:103::-;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;13714:14:6::1;:6:::0;13723:5:::1;13714:14;:::i;:::-;13700:11;:28:::0;-1:-1:-1;13632:103:6:o;1118:189:5:-;849:7;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;1206:22:5;::::1;1198:73;;;::::0;-1:-1:-1;;;1198:73:5;;9403:2:7;1198:73:5::1;::::0;::::1;9385:21:7::0;9442:2;9422:18;;;9415:30;9481:34;9461:18;;;9454:62;-1:-1:-1;;;9532:18:7;;;9525:36;9578:19;;1198:73:5::1;9201:402:7::0;1198:73:5::1;1281:19;1291:8;1281:9;:19::i;:::-;1118:189:::0;:::o;19986:100:6:-;849:7:5;875:6;-1:-1:-1;;;;;875:6:5;168:10:1;934:23:5;926:68;;;;-1:-1:-1;;;926:68:5;;;;;;;:::i;:::-;20036:43:6::1;20054:24;20072:4;20054:9;:24::i;:::-;20036:17;:43::i;13994:331::-:0;-1:-1:-1;;;;;14086:19:6;;14078:68;;;;-1:-1:-1;;;14078:68:6;;14081:2:7;14078:68:6;;;14063:21:7;14120:2;14100:18;;;14093:30;14159:34;14139:18;;;14132:62;-1:-1:-1;;;14210:18:7;;;14203:34;14254:19;;14078:68:6;13879:400:7;14078:68:6;-1:-1:-1;;;;;14164:21:6;;14156:68;;;;-1:-1:-1;;;14156:68:6;;9810:2:7;14156:68:6;;;9792:21:7;9849:2;9829:18;;;9822:30;9888:34;9868:18;;;9861:62;-1:-1:-1;;;9939:18:7;;;9932:32;9981:19;;14156:68:6;9608:398:7;14156:68:6;-1:-1:-1;;;;;14235:18:6;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14286:32;;15596:25:7;;;14286:32:6;;15569:18:7;14286:32:6;;;;;;;13994:331;;;:::o;14331:2152::-;-1:-1:-1;;;;;14448:18:6;;14440:68;;;;-1:-1:-1;;;14440:68:6;;13326:2:7;14440:68:6;;;13308:21:7;13365:2;13345:18;;;13338:30;13404:34;13384:18;;;13377:62;-1:-1:-1;;;13455:18:7;;;13448:35;13500:19;;14440:68:6;13124:401:7;14440:68:6;-1:-1:-1;;;;;14526:16:6;;14518:64;;;;-1:-1:-1;;;14518:64:6;;7823:2:7;14518:64:6;;;7805:21:7;7862:2;7842:18;;;7835:30;7901:34;7881:18;;;7874:62;-1:-1:-1;;;7952:18:7;;;7945:33;7995:19;;14518:64:6;7621:399:7;14518:64:6;14609:1;14600:6;:10;14592:64;;;;-1:-1:-1;;;14592:64:6;;12916:2:7;14592:64:6;;;12898:21:7;12955:2;12935:18;;;12928:30;12994:34;12974:18;;;12967:62;-1:-1:-1;;;13045:18:7;;;13038:39;13094:19;;14592:64:6;12714:405:7;14592:64:6;-1:-1:-1;;;;;14675:17:6;;;;;;:11;:17;;;;;;;;14674:18;:38;;;;-1:-1:-1;;;;;;14697:15:6;;;;;;:11;:15;;;;;;;;14696:16;14674:38;14666:71;;;;-1:-1:-1;;;14666:71:6;;13732:2:7;14666:71:6;;;13714:21:7;13771:2;13751:18;;;13744:30;-1:-1:-1;;;13790:18:7;;;13783:50;13850:18;;14666:71:6;13530:344:7;14666:71:6;14774:13;;-1:-1:-1;;;;;14760:28:6;;;14774:13;;14760:28;;;;:49;;-1:-1:-1;14798:11:6;;-1:-1:-1;;;;;14792:17:6;;;14798:11;;14792:17;;14760:49;:78;;;;-1:-1:-1;;;;;;14814:24:6;;;;;;:18;:24;;;;;;;;14813:25;14760:78;:105;;;;-1:-1:-1;;;;;;14843:22:6;;;;;;:18;:22;;;;;;;;14842:23;14760:105;14756:200;;;14900:11;;14890:6;:21;;14882:63;;;;-1:-1:-1;;;14882:63:6;;8634:2:7;14882:63:6;;;8616:21:7;8673:2;8653:18;;;8646:30;8712:31;8692:18;;;8685:59;8761:18;;14882:63:6;8432:353:7;14882:63:6;849:7:5;875:6;-1:-1:-1;;;;;14978:13:6;;;875:6:5;;14978:13:6;;;;:48;;-1:-1:-1;;;;;;15007:19:6;;15021:4;15007:19;;14978:48;:81;;;;-1:-1:-1;15048:11:6;;-1:-1:-1;;;;;15042:17:6;;;15048:11;;15042:17;;14978:81;:118;;;;-1:-1:-1;15081:15:6;;-1:-1:-1;;;;;15075:21:6;;;15081:15;;15075:21;;14978:118;:153;;;;-1:-1:-1;15118:13:6;;-1:-1:-1;;;;;15112:19:6;;;15118:13;;15112:19;;14978:153;:187;;;;-1:-1:-1;15154:11:6;;-1:-1:-1;;;;;15148:17:6;;;15154:11;;15148:17;;14978:187;:232;;;;-1:-1:-1;15196:13:6;;-1:-1:-1;;;;;15182:28:6;;;15196:13;;15182:28;;14978:232;:270;;;;-1:-1:-1;15233:15:6;;-1:-1:-1;;;;;15227:21:6;;;15233:15;;15227:21;;14978:270;14974:465;;;15264:18;15285:13;15295:2;15285:9;:13::i;:::-;15345:15;;15264:34;;-1:-1:-1;15321:19:6;15334:6;15264:34;15321:19;:::i;:::-;15320:40;;15312:116;;;;-1:-1:-1;;;15312:116:6;;10213:2:7;15312:116:6;;;10195:21:7;10252:2;10232:18;;;10225:30;10291:34;10271:18;;;10264:62;10362:33;10342:18;;;10335:61;10413:19;;15312:116:6;10011:427:7;15312:116:6;15250:189;14974:465;15457:28;15488:24;15506:4;15488:9;:24::i;:::-;15582:15;;15457:55;;-1:-1:-1;15558:39:6;;;;;;;15624:42;;-1:-1:-1;15660:6:6;;-1:-1:-1;;;15660:6:6;;;;15659:7;15624:42;:77;;;;-1:-1:-1;15690:11:6;;-1:-1:-1;;;;;15682:19:6;;;15690:11;;15682:19;;15624:77;:104;;;;-1:-1:-1;15717:11:6;;-1:-1:-1;;;15717:11:6;;;;15624:104;15607:312;;;15758:45;;15596:25:7;;;15758:45:6;;15584:2:7;15569:18;15758:45:6;;;;;;;15840:15;;15817:38;;15869:39;15887:20;15869:17;:39::i;:::-;-1:-1:-1;;;;;16150:24:6;;15997:12;16150:24;;;:18;:24;;;;;;16012:4;;15997:12;16150:24;;;:50;;-1:-1:-1;;;;;;16178:22:6;;;;;;:18;:22;;;;;;;;16150:50;16147:195;;;16225:5;16215:15;;16147:195;;;16278:11;;-1:-1:-1;;;;;16272:17:6;;;16278:11;;16272:17;16269:63;;;-1:-1:-1;16313:4:6;16269:63;16431:45;16446:4;16451:2;16454:6;16461:7;16469:6;16431:14;:45::i;:::-;14430:2053;;;;14331:2152;;;:::o;10466:155::-;10507:7;10527:15;10544;10563:19;:17;:19::i;:::-;10526:56;;-1:-1:-1;10526:56:6;-1:-1:-1;10599:15:6;10526:56;;10599:15;:::i;:::-;10592:22;;;;10466:155;:::o;9190:338::-;9263:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9263:36:6;9323:29;9335:7;9344;9323:11;:29::i;:::-;9311:41;;9444:51;9456:9;9466:7;9475;9484:10;:8;:10::i;:::-;9444:11;:51::i;:::-;9425:15;;;9362:133;9409:14;;;9362:133;9382:25;;;9362:133;;;9190:338;;;;:::o;17340:661::-;17493:16;;;17507:1;17493:16;;;;;;;;17469:21;;17493:16;;;;;;;;;;-1:-1:-1;17493:16:6;17469:40;;17537:4;17519;17524:1;17519:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17519:23:6;;;:7;;;;;;;;;;:23;;;;17562:13;;:20;;;-1:-1:-1;;;17562:20:6;;;;:13;;;;;:18;;:20;;;;;17519:7;;17562:20;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17552:4;17557:1;17552:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17552:30:6;;;:7;;;;;;;;;;:30;;;;17629:13;;17614:4;4852:7;4878:18;;;:11;:18;;;;;;17629:13;;;;4878:27;;;;;;17647:11;-1:-1:-1;17593:150:6;;;17704:13;;17672:60;;17689:4;;-1:-1:-1;;;;;17704:13:6;-1:-1:-1;;17672:8:6;:60::i;:::-;17778:13;;:216;;-1:-1:-1;;;17778:216:6;;-1:-1:-1;;;;;17778:13:6;;;;:64;;:216;;17856:11;;17778:13;;17924:4;;17950;;17969:15;;17778:216;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17395:606;17340:661;:::o;1314:169:5:-;1369:16;1388:6;;-1:-1:-1;;;;;1404:17:5;;;-1:-1:-1;;;;;;1404:17:5;;;;;;1436:40;;1388:6;;;;;;;1436:40;;1369:16;1436:40;1359:124;1314:169;:::o;16493:840:6:-;3079:6;:13;;-1:-1:-1;;;;3079:13:6;-1:-1:-1;;;3079:13:6;;;16627:19;;16602:24;;3079:13;;16627:19;16595:31:::1;::::0;:6;:31:::1;:::i;:::-;:51;;;;:::i;:::-;16566:80:::0;-1:-1:-1;16718:21:6::1;16815:47;16841:20;16860:1;16566:80:::0;16841:20:::1;:::i;:::-;16832:29;::::0;:6;:29:::1;:::i;:::-;16815:16;:47::i;:::-;16944:23;16970:36;16992:14:::0;16970:21:::1;:36;:::i;:::-;17143:19:::0;;17120:22;;16944:62;;-1:-1:-1;17080:83:6::1;::::0;17104:38:::1;::::0;16944:62;17104:38:::1;:::i;:::-;:58;;;;:::i;:::-;17080:13;::::0;-1:-1:-1;;;;;17080:13:6::1;::::0;:23:::1;:83::i;:::-;17240:19:::0;;17215:24;;17173:87:::1;::::0;17240:19;17199:40:::1;::::0;:15;:40:::1;:::i;:::-;:60;;;;:::i;:::-;17173:15;::::0;-1:-1:-1;;;;;17173:15:6::1;::::0;:25:::1;:87::i;:::-;17270:56;17283:20;17302:1;17283:18:::0;:20:::1;:::i;:::-;17304:21;17270:12;:56::i;:::-;-1:-1:-1::0;;3113:6:6;:14;;-1:-1:-1;;;;3113:14:6;;;-1:-1:-1;;16493:840:6:o;18586:936::-;18708:7;18705:197;;;18733:6;18730:162;;;18785:8;18771:22;:11;:22;;;;;;;;;;;;;;;;;;;;;18730:162;;;18870:7;18856:21;:11;:21;;;;;;;;;;;;;;;;;;;;;18730:162;18920:28;18951:27;18962:6;18970:7;18951:10;:27::i;:::-;-1:-1:-1;;;;;18993:19:6;;;;;;:11;:19;;;;;;18920:58;;-1:-1:-1;18993:19:6;;18989:74;;;-1:-1:-1;;;;;19028:15:6;;;;;;:7;:15;;;;;:24;;19046:6;;19028:15;:24;;19046:6;;19028:24;:::i;:::-;;;;-1:-1:-1;;18989:74:6;-1:-1:-1;;;;;19077:22:6;;;;;;:11;:22;;;;;;;;19073:92;;;19137:17;;;;-1:-1:-1;;;;;19115:18:6;;;;;;:7;:18;;;;;:39;;:18;;;:39;;19137:17;;19115:39;:::i;:::-;;;;-1:-1:-1;;19073:92:6;19193:9;;-1:-1:-1;;;;;19174:15:6;;19193:9;19174:15;;;:7;:15;;;;;:28;;:15;;19193:9;19174:28;;19193:9;;19174:28;:::i;:::-;;;;-1:-1:-1;;19233:17:6;;;;;-1:-1:-1;;;;;19212:18:6;;;;;;:7;:18;;;;;;:38;;19233:17;;19212:18;;:38;;19233:17;;19212:38;:::i;:::-;;;;-1:-1:-1;;19269:186:6;;;;19308:30;19322:1;:7;;;19330:1;:7;;;19308:13;:30::i;:::-;19353:27;19365:1;:6;;;19373:1;:6;;;19353:11;:27::i;:::-;19425:4;-1:-1:-1;;;;;19400:40:6;19409:6;-1:-1:-1;;;;;19400:40:6;;19432:1;:7;;;19400:40;;;;15596:25:7;;15584:2;15569:18;;15450:177;19400:40:6;;;;;;;;19269:186;19486:9;-1:-1:-1;;;;;19469:46:6;19478:6;-1:-1:-1;;;;;19469:46:6;;19497:1;:17;;;19469:46;;;;15596:25:7;;15584:2;15569:18;;15450:177;19469:46:6;;;;;;;;18695:827;18586:936;;;;;:::o;10628:551::-;10724:7;;10759;;10793:9;:16;10678:7;;;;10724;;10678;10823:249;10847:6;10843:1;:10;10823:249;;;10902:7;10878;:21;10886:9;10896:1;10886:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;10886:12:6;10878:21;;;;;;;;;;;;;:31;;:66;;;10937:7;10913;:21;10921:9;10931:1;10921:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;10921:12:6;10913:21;;;;;;;;;;;;;:31;10878:66;10874:97;;;10954:7;;10963;;10946:25;;;;;;;;10628:551;;:::o;10874:97::-;10995:7;:21;11003:9;11013:1;11003:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;11003:12:6;10995:21;;;;;;;;;;;;;10985:31;;;;:::i;:::-;;;11040:7;:21;11048:9;11058:1;11048:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;11048:12:6;11040:21;;;;;;;;;;;;;11030:31;;;;:::i;:::-;;-1:-1:-1;10855:3:6;;;;:::i;:::-;;;;10823:249;;;;11103:7;;11095;;:15;;;;:::i;:::-;11085:7;:25;11081:56;;;11120:7;;11129;;11112:25;;;;;;;10628:551;;:::o;11081:56::-;-1:-1:-1;11155:7:6;;11164;;-1:-1:-1;10628:551:6;-1:-1:-1;10628:551:6:o;9535:421::-;9609:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9609:28:6;9653:7;9649:83;;9674:17;;;:27;;;9713:8;;9649:83;9778:11;:18;9758:19;;9797:7;;9778:18;9750:27;;:7;:27;:::i;:::-;:46;;;;:::i;:::-;:54;;;;:::i;:::-;9741:6;;;:63;9852:19;;9832;;9872:7;;9852:19;9824:27;;:7;:27;:::i;:::-;:47;;;;:::i;:::-;:55;;;;:::i;:::-;9814:7;;;:65;;;9917:6;;;;9909:14;;:7;:14;:::i;:::-;:22;;;;:::i;:::-;9889:17;;;:42;9535:421;;;;:::o;9963:496::-;10088:7;;;;;10152:19;10160:11;10152:7;:19;:::i;:::-;10134:37;;10185:7;10181:74;;10224:7;-1:-1:-1;10224:7:6;;-1:-1:-1;10240:1:6;;-1:-1:-1;10240:1:6;;-1:-1:-1;10216:28:6;;10181:74;10264:12;10286:11;10279:1;:6;;;:18;;;;:::i;:::-;10264:33;;10307:13;10331:11;10323:1;:7;;;:19;;;;:::i;:::-;10307:35;-1:-1:-1;10352:23:6;10307:35;10378:12;10386:4;10378:7;:12;:::i;:::-;:18;;;;:::i;:::-;10414:7;;-1:-1:-1;10352:44:6;;-1:-1:-1;10440:4:6;;-1:-1:-1;10446:5:6;-1:-1:-1;;9963:496:6;;;;;;;;;;:::o;80:314:0:-;194:6;169:21;:31;;161:73;;;;-1:-1:-1;;;161:73:0;;11428:2:7;161:73:0;;;11410:21:7;11467:2;11447:18;;;11440:30;11506:31;11486:18;;;11479:59;11555:18;;161:73:0;11226:353:7;161:73:0;246:12;264:9;-1:-1:-1;;;;;264:14:0;287:6;264:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;245:54;;;317:7;309:78;;;;-1:-1:-1;;;309:78:0;;11001:2:7;309:78:0;;;10983:21:7;11040:2;11020:18;;;11013:30;11079:34;11059:18;;;11052:62;11150:28;11130:18;;;11123:56;11196:19;;309:78:0;10799:422:7;18011:495:6;18189:13;;18157:60;;18174:4;;-1:-1:-1;;;;;18189:13:6;18205:11;18157:8;:60::i;:::-;18256:13;;-1:-1:-1;;;;;18256:13:6;:29;18293:9;18325:4;18344:11;18256:13;;18453:7;849::5;875:6;-1:-1:-1;;;;;875:6:5;;803:85;18453:7:6;18256:243;;;;;;-1:-1:-1;;;;;;18256:243:6;;;-1:-1:-1;;;;;6351:15:7;;;18256:243:6;;;6333:34:7;6383:18;;;6376:34;;;;6426:18;;;6419:34;;;;6469:18;;;6462:34;6533:15;;;6512:19;;;6505:44;18474:15:6;6565:19:7;;;6558:35;6267:19;;18256:243:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18011:495;;:::o;11189:192::-;11277:4;11261:22;;;;:7;:22;;;;;:30;;11286:5;;11261:22;:30;;11286:5;;11261:30;:::i;:::-;;;;-1:-1:-1;;11324:4:6;11304:26;;;;:11;:26;;;;;;;;11301:73;;;11360:4;11344:22;;;;:7;:22;;;;;:30;;11369:5;;11344:22;:30;;11369:5;;11344:30;:::i;:::-;;;;-1:-1:-1;;11189:192:6;;:::o;9044:139::-;9133:4;9125:7;;:12;;;;:::i;:::-;9111:7;:26;9161:10;;:15;;9172:4;;9161:15;:::i;:::-;9147:10;:29;-1:-1:-1;;9044:139:6:o;14:134:7:-;82:20;;111:31;82:20;111:31;:::i;153:160::-;218:20;;274:13;;267:21;257:32;;247:60;;303:1;300;293:12;318:247;377:6;430:2;418:9;409:7;405:23;401:32;398:52;;;446:1;443;436:12;398:52;485:9;472:23;504:31;529:5;504:31;:::i;570:251::-;640:6;693:2;681:9;672:7;668:23;664:32;661:52;;;709:1;706;699:12;661:52;741:9;735:16;760:31;785:5;760:31;:::i;1086:388::-;1154:6;1162;1215:2;1203:9;1194:7;1190:23;1186:32;1183:52;;;1231:1;1228;1221:12;1183:52;1270:9;1257:23;1289:31;1314:5;1289:31;:::i;:::-;1339:5;-1:-1:-1;1396:2:7;1381:18;;1368:32;1409:33;1368:32;1409:33;:::i;:::-;1461:7;1451:17;;;1086:388;;;;;:::o;1479:456::-;1556:6;1564;1572;1625:2;1613:9;1604:7;1600:23;1596:32;1593:52;;;1641:1;1638;1631:12;1593:52;1680:9;1667:23;1699:31;1724:5;1699:31;:::i;:::-;1749:5;-1:-1:-1;1806:2:7;1791:18;;1778:32;1819:33;1778:32;1819:33;:::i;:::-;1479:456;;1871:7;;-1:-1:-1;;;1925:2:7;1910:18;;;;1897:32;;1479:456::o;1940:315::-;2005:6;2013;2066:2;2054:9;2045:7;2041:23;2037:32;2034:52;;;2082:1;2079;2072:12;2034:52;2121:9;2108:23;2140:31;2165:5;2140:31;:::i;:::-;2190:5;-1:-1:-1;2214:35:7;2245:2;2230:18;;2214:35;:::i;:::-;2204:45;;1940:315;;;;;:::o;2260:::-;2328:6;2336;2389:2;2377:9;2368:7;2364:23;2360:32;2357:52;;;2405:1;2402;2395:12;2357:52;2444:9;2431:23;2463:31;2488:5;2463:31;:::i;:::-;2513:5;2565:2;2550:18;;;;2537:32;;-1:-1:-1;;;2260:315:7:o;2580:1132::-;2664:6;2695:2;2738;2726:9;2717:7;2713:23;2709:32;2706:52;;;2754:1;2751;2744:12;2706:52;2794:9;2781:23;2823:18;2864:2;2856:6;2853:14;2850:34;;;2880:1;2877;2870:12;2850:34;2918:6;2907:9;2903:22;2893:32;;2963:7;2956:4;2952:2;2948:13;2944:27;2934:55;;2985:1;2982;2975:12;2934:55;3021:2;3008:16;3043:2;3039;3036:10;3033:36;;;3049:18;;:::i;:::-;3095:2;3092:1;3088:10;3127:2;3121:9;3190:2;3186:7;3181:2;3177;3173:11;3169:25;3161:6;3157:38;3245:6;3233:10;3230:22;3225:2;3213:10;3210:18;3207:46;3204:72;;;3256:18;;:::i;:::-;3292:2;3285:22;3342:18;;;3376:15;;;;-1:-1:-1;3411:11:7;;;3441;;;3437:20;;3434:33;-1:-1:-1;3431:53:7;;;3480:1;3477;3470:12;3431:53;3502:1;3493:10;;3512:169;3526:2;3523:1;3520:9;3512:169;;;3583:23;3602:3;3583:23;:::i;:::-;3571:36;;3544:1;3537:9;;;;;3627:12;;;;3659;;3512:169;;;-1:-1:-1;3700:6:7;2580:1132;-1:-1:-1;;;;;;;;2580:1132:7:o;3717:180::-;3773:6;3826:2;3814:9;3805:7;3801:23;3797:32;3794:52;;;3842:1;3839;3832:12;3794:52;3865:26;3881:9;3865:26;:::i;3902:180::-;3961:6;4014:2;4002:9;3993:7;3989:23;3985:32;3982:52;;;4030:1;4027;4020:12;3982:52;-1:-1:-1;4053:23:7;;3902:180;-1:-1:-1;3902:180:7:o;4087:248::-;4152:6;4160;4213:2;4201:9;4192:7;4188:23;4184:32;4181:52;;;4229:1;4226;4219:12;4181:52;4265:9;4252:23;4242:33;;4294:35;4325:2;4314:9;4310:18;4294:35;:::i;4340:306::-;4428:6;4436;4444;4497:2;4485:9;4476:7;4472:23;4468:32;4465:52;;;4513:1;4510;4503:12;4465:52;4542:9;4536:16;4526:26;;4592:2;4581:9;4577:18;4571:25;4561:35;;4636:2;4625:9;4621:18;4615:25;4605:35;;4340:306;;;;;:::o;4651:385::-;4737:6;4745;4753;4761;4814:3;4802:9;4793:7;4789:23;4785:33;4782:53;;;4831:1;4828;4821:12;4782:53;-1:-1:-1;;4854:23:7;;;4924:2;4909:18;;4896:32;;-1:-1:-1;4975:2:7;4960:18;;4947:32;;5026:2;5011:18;4998:32;;-1:-1:-1;4651:385:7;-1:-1:-1;4651:385:7:o;7019:597::-;7131:4;7160:2;7189;7178:9;7171:21;7221:6;7215:13;7264:6;7259:2;7248:9;7244:18;7237:34;7289:1;7299:140;7313:6;7310:1;7307:13;7299:140;;;7408:14;;;7404:23;;7398:30;7374:17;;;7393:2;7370:26;7363:66;7328:10;;7299:140;;;7457:6;7454:1;7451:13;7448:91;;;7527:1;7522:2;7513:6;7502:9;7498:22;7494:31;7487:42;7448:91;-1:-1:-1;7600:2:7;7579:15;-1:-1:-1;;7575:29:7;7560:45;;;;7607:2;7556:54;;7019:597;-1:-1:-1;;;7019:597:7:o;10443:351::-;10645:2;10627:21;;;10684:2;10664:18;;;10657:30;10723:29;10718:2;10703:18;;10696:57;10785:2;10770:18;;10443:351::o;12353:356::-;12555:2;12537:21;;;12574:18;;;12567:30;12633:34;12628:2;12613:18;;12606:62;12700:2;12685:18;;12353:356::o;15632:980::-;15894:4;15942:3;15931:9;15927:19;15973:6;15962:9;15955:25;15999:2;16037:6;16032:2;16021:9;16017:18;16010:34;16080:3;16075:2;16064:9;16060:18;16053:31;16104:6;16139;16133:13;16170:6;16162;16155:22;16208:3;16197:9;16193:19;16186:26;;16247:2;16239:6;16235:15;16221:29;;16268:1;16278:195;16292:6;16289:1;16286:13;16278:195;;;16357:13;;-1:-1:-1;;;;;16353:39:7;16341:52;;16448:15;;;;16413:12;;;;16389:1;16307:9;16278:195;;;-1:-1:-1;;;;;;;16529:32:7;;;;16524:2;16509:18;;16502:60;-1:-1:-1;;;16593:3:7;16578:19;16571:35;16490:3;15632:980;-1:-1:-1;;;15632:980:7:o;17346:128::-;17386:3;17417:1;17413:6;17410:1;17407:13;17404:39;;;17423:18;;:::i;:::-;-1:-1:-1;17459:9:7;;17346:128::o;17479:217::-;17519:1;17545;17535:132;;17589:10;17584:3;17580:20;17577:1;17570:31;17624:4;17621:1;17614:15;17652:4;17649:1;17642:15;17535:132;-1:-1:-1;17681:9:7;;17479:217::o;17701:168::-;17741:7;17807:1;17803;17799:6;17795:14;17792:1;17789:21;17784:1;17777:9;17770:17;17766:45;17763:71;;;17814:18;;:::i;:::-;-1:-1:-1;17854:9:7;;17701:168::o;17874:125::-;17914:4;17942:1;17939;17936:8;17933:34;;;17947:18;;:::i;:::-;-1:-1:-1;17984:9:7;;17874:125::o;18004:380::-;18083:1;18079:12;;;;18126;;;18147:61;;18201:4;18193:6;18189:17;18179:27;;18147:61;18254:2;18246:6;18243:14;18223:18;18220:38;18217:161;;;18300:10;18295:3;18291:20;18288:1;18281:31;18335:4;18332:1;18325:15;18363:4;18360:1;18353:15;18217:161;;18004:380;;;:::o;18389:135::-;18428:3;-1:-1:-1;;18449:17:7;;18446:43;;;18469:18;;:::i;:::-;-1:-1:-1;18516:1:7;18505:13;;18389:135::o;18529:127::-;18590:10;18585:3;18581:20;18578:1;18571:31;18621:4;18618:1;18611:15;18645:4;18642:1;18635:15;18661:127;18722:10;18717:3;18713:20;18710:1;18703:31;18753:4;18750:1;18743:15;18777:4;18774:1;18767:15;18793:127;18854:10;18849:3;18845:20;18842:1;18835:31;18885:4;18882:1;18875:15;18909:4;18906:1;18899:15;18925:127;18986:10;18981:3;18977:20;18974:1;18967:31;19017:4;19014:1;19007:15;19041:4;19038:1;19031:15;19057:131;-1:-1:-1;;;;;19132:31:7;;19122:42;;19112:70;;19178:1;19175;19168:12

Swarm Source

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