ETH Price: $2,287.23 (+0.46%)

Token

Double Cheddar ($DCHEDDA)
 

Overview

Max Total Supply

100,000,000,000,000,000 $DCHEDDA

Holders

42

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
278,425,978,257,633.472851537 $DCHEDDA

Value
$0.00
0xa84ee1d4bd3cdfcf5f4af6e7773d8e1b7b834236
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DoubleCheddar

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-11
*/

// SPDX-License-Identifier: MIT

/*                          

Website: https://doublecheddar.xyz/
Telegram: https://twitter.com/doublecheddar 
Twitter: https://twitter.com/doublecheddar 

*/

pragma solidity ^0.8.4;

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

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

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

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

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

        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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


    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract DoubleCheddar is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address payable private devWallet = payable (0x8133dF0E3a5dB6F8e82974d3239eDA678607DD67); // Main tax wallet
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isSniper;

    uint256 public deadBlocks = 5;    
    uint256 public launchedAtBlock = 0;
    uint256 public launchedAtTime = 0;
    
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isMaxWalletExempt;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    struct StaticMaxTax {
        uint256 maxLiquidity;
        uint256 maxReflection;
        uint256 maxTreasury;
        uint256 maxMarketing;
        uint256 maxTeamfee;
    }
   
    address DEAD = 0x000000000000000000000000000000000000dEaD;

    uint8 private _decimals = 9;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1e17 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Double Cheddar";
    string private _symbol = "$DCHEDDA";
    
    uint256 public _maxWalletToken = _tTotal.div(2000).mul(10); //1% of available tokens (500T)

    bool public maxEthTradesEnabled = true;
    uint256 public maxEthSell_launch = 1 * 10**18; //Max sell is 1 ETH for 24 hours.
    uint256 public maxEthSell = 5 * 10**18; //Regular Max sell is 5 ETH.

    uint256 private swapThreshold = (_tTotal * 5) / 10000;
    uint256 private swapAmount = (_tTotal * 25) / 10000;

    uint256 public _buyLiquidityFee = 2; //2%     
    uint256 public _buyReflectionFee = 1; //1%
    uint256 public _buyTreasuryFee = 4; //4%
    uint256 public _buyMarketingFee = 4; //4%
    uint256 public _buyTeamFee = 2; //2%


    uint256 public _sellLiquidityFee = 2; //2%
    uint256 public _sellReflectionFee = 1; //1%
    uint256 public _sellTreasuryFee = 4; //4%
    uint256 public _sellMarketingFee = 4; //4%
    uint256 public _sellTeamFee = 2; //2%

    StaticMaxTax public staticTax = StaticMaxTax({
        maxLiquidity: 2, //2%
        maxReflection: 1, //1%
        maxTreasury: 4, //4%
        maxMarketing: 4, //4%
        maxTeamfee: 2 //2%
    });
    
    uint256 private liquidityFee = _buyLiquidityFee;
    uint256 private treasuryFee = _buyTreasuryFee;
    uint256 private marketingFee = _buyMarketingFee;
    uint256 private teamFee = _buyTeamFee;
    uint256 private reflectionFee=_buyReflectionFee;

    uint256 private totalFee = liquidityFee.add(treasuryFee).add(marketingFee).add(teamFee);
    uint256 private currenttotalFee = totalFee;
    
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwap;

    address[] path;
    
    bool public tradingOpen = false;
    bool public zeroBuyTaxmode = false;
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isMaxWalletExempt[owner()] = true;
        _isMaxWalletExempt[address(this)] = true;
        _isMaxWalletExempt[uniswapV2Pair] = true;
        _isMaxWalletExempt[DEAD] = true;

        path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), MAX);
        _approve(_msgSender(), address(uniswapV2Router), MAX);

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    
    function openTrading() external onlyOwner() {
        require(!tradingOpen);
        tradingOpen = true;
        excludeFromReward(address(this));
        excludeFromReward(uniswapV2Pair);

        if(tradingOpen && launchedAtBlock == 0){
            launchedAtBlock = block.number;
            launchedAtTime = block.timestamp;
        }
    }
 
    function setZeroBuyTaxmode(bool _status) external onlyOwner() {
       zeroBuyTaxmode = _status;
    }
    
    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            uniswapV2Pair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            uniswapV2Pair = get_pair;
        }
        uniswapV2Router = _newRouter;
    }

    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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

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

    function excludeFromReward(address account) public onlyOwner() {

        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    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 _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(!_isSniper[to], "You are on the sniper list!");
        require(!_isSniper[from], "You are on the sniper list!");
        if (from != owner() && to != owner()) require(tradingOpen, "Trading not yet enabled."); //trading not open yet
        
        bool takeFee = false;

        if (!(_isExcludedFromFee[from] || _isExcludedFromFee[to])) {
            takeFee = true;
        }

        currenttotalFee=totalFee;
        reflectionFee=_buyReflectionFee;

        //max wallet holding
        if(!_isMaxWalletExempt[to] && from != owner() && from == uniswapV2Pair){
            if(zeroBuyTaxmode){
                //adjust max amount according to 0% buy tax
                require(amount + balanceOf(to) <= _maxWalletToken , "Total holding is limited");
            }else{
                //adjust max amount according to tax
                uint256 baseactualfee = _buyReflectionFee.add(_buyLiquidityFee).add(_buyTreasuryFee).add(_buyMarketingFee).add(_buyTeamFee);
                uint256 maxpercent = 100;
                baseactualfee = maxpercent.sub(baseactualfee);
                require(amount.mul(baseactualfee).div(100) + balanceOf(to) <= _maxWalletToken , "Total holding is limited");
            }
        }
        
        if(tradingOpen && to == uniswapV2Pair) { //sell
            reflectionFee = _sellReflectionFee;

            if (maxEthTradesEnabled) {
                uint256 _ethBalance = uniswapV2Router.getAmountsOut(amount, path)[1];
                if(block.timestamp <= launchedAtTime + 24 hours) {
                    require(_ethBalance <= maxEthSell_launch); //max 1 ETH sell for 24 hours.
                }else{
                    require(_ethBalance <= maxEthSell); //max 5 ETH sell after 24 hours.
                }
            }

            //anti-dump structure for the first 24 hours.
            if(block.timestamp <= launchedAtTime + 2 hours) {
                currenttotalFee = 30; //30%
            }else if (block.timestamp <= launchedAtTime + 12 hours) {
                currenttotalFee = 25; //25%
            }else if (block.timestamp <= launchedAtTime + 24 hours) {
                currenttotalFee = 20; //20%
            }else{
                currenttotalFee = _sellLiquidityFee.add(_sellTreasuryFee).add(_sellMarketingFee).add(_sellTeamFee); //12%+1%reflection
            }
        }

        //antisniper - first 5 blocks
        if(launchedAtBlock > 0 && ((launchedAtBlock + deadBlocks) >= block.number)){
                _isSniper[to]=true;
        }

         //on buys only
        if(zeroBuyTaxmode){
             if(tradingOpen && from == uniswapV2Pair) {
                    currenttotalFee=0;
             }
        }

        //sell
        if (!inSwap && tradingOpen && to == uniswapV2Pair) {    
            uint256 contractTokenBalance = balanceOf(address(this));           
            if (contractTokenBalance >= swapThreshold) {
                if(contractTokenBalance >= swapAmount) { 
                    contractTokenBalance = swapAmount; 
                }
                swapTokens(contractTokenBalance);
            }      
        }
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {       
        uint256 amountToLiquify = contractTokenBalance.mul(liquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);       
        swapTokensForEth(amountToSwap);
        uint256 amountETH = address(this).balance;
        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));
        uint256 amountETHLiquidity = amountETH.mul(liquidityFee).div(totalETHFee).div(2);    
        uint256 totalTAXfee = treasuryFee.add(marketingFee).add(teamFee); 
        uint256 amountETHdev = amountETH.mul(totalTAXfee).div(totalETHFee);
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHdev,devWallet);
        }
        if (amountToLiquify > 0) {
                addLiquidity(amountToLiquify,amountETHLiquidity);
        }
    }
    
    function sendETHToFee(uint256 amount,address payable wallet) private {
        wallet.transfer(amount);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);      
        emit SwapTokensForETH(tokenAmount, path);
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this), tokenAmount, 0, 0, owner(), block.timestamp);
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {

        uint256 _previousReflectionFee=reflectionFee;
        uint256 _previousTotalFee=currenttotalFee;
        if(!takeFee){
            reflectionFee = 0;
            currenttotalFee = 0;
        }
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee){
            reflectionFee = _previousReflectionFee;
            currenttotalFee = _previousTotalFee;
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(reflectionFee).div(10**2);
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(currenttotalFee).div(10**2);
    }
    
    function excludeMultiple(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function excludeFromFee(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isExcludedFromFee[addresses[i]] = true;
        }
    }
     
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setWallets(address _devWallet) external onlyOwner() {
        devWallet = payable(_devWallet);
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }
    
    function manage_Snipers(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
                _isSniper[addresses[i]] = status;
        }
    }
         
    function withDrawLeftoverETH(address payable recipient) public onlyOwner {
        recipient.transfer(address(this).balance);
    }

    function withdrawStuckTokens(IERC20 token, address to) public onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        token.transfer(to, balance);
    }

    function setMaxWalletBase2000(uint256 maxWallet) external onlyOwner() {
        _maxWalletToken = _tTotal.div(2000).mul(maxWallet);
    }

    function setMaxWalletExempt(address _addr) external onlyOwner {
        _isMaxWalletExempt[_addr] = true;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setTaxesBuy(uint256 _reflectionFee, uint256 _liquidityFee, uint256 _treasuryFee, uint256 _marketingFee, uint256 _teamFee) external onlyOwner {
        require(_reflectionFee <= staticTax.maxReflection && 
        _liquidityFee <= staticTax.maxLiquidity && 
        _marketingFee <= staticTax.maxMarketing &&
        _teamFee <= staticTax.maxTeamfee);
        
        uint256 total_buy_fee = _reflectionFee.add(_liquidityFee).add(_treasuryFee).add(_marketingFee).add(_teamFee);
        require(total_buy_fee <= 13); //Max buy fee 13%

        _buyLiquidityFee = _liquidityFee;
        _buyReflectionFee = _reflectionFee;
        _buyTreasuryFee = _treasuryFee;
        _buyMarketingFee = _marketingFee;
        _buyTeamFee = _teamFee;       

        reflectionFee = _reflectionFee;
        liquidityFee = _liquidityFee;
        treasuryFee = _treasuryFee;
        marketingFee = _marketingFee;
        teamFee = _teamFee;
        totalFee = liquidityFee.add(treasuryFee).add(marketingFee).add(teamFee);
    }

    function setTaxesSell(uint256 _reflectionFee,uint256 _liquidityFee, uint256 _treasuryFee, uint256 _marketingFee, uint256 _teamFee) external onlyOwner {
        require(_reflectionFee <= staticTax.maxReflection && 
        _liquidityFee <= staticTax.maxLiquidity && 
        _marketingFee <= staticTax.maxMarketing &&
        _teamFee <= staticTax.maxTeamfee);
        
        uint256 total_sell_fee = _reflectionFee.add(_liquidityFee).add(_treasuryFee).add(_marketingFee).add(_teamFee);
        require(total_sell_fee <= 13); //Max sell fee 13%

        _sellLiquidityFee = _liquidityFee;
        _sellReflectionFee= _reflectionFee;
        _sellTreasuryFee = _treasuryFee;
        _sellMarketingFee = _marketingFee;
        _sellTeamFee = _teamFee;      
    }

    function setEthLimits(uint256 sellVal) external onlyOwner {
        require(sellVal >= 5 * 10**18);
        maxEthSell = sellVal * 10**18;      
    }

    function setEthLimitsEnabled(bool maxEthTrades) external onlyOwner {
        maxEthTradesEnabled = maxEthTrades;
    }    

    receive() external payable {}
}

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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address[]","name":"addresses","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":"account","type":"address"}],"name":"excludeMultiple","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":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_Snipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxEthSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxEthSell_launch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxEthTradesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","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":[{"internalType":"uint256","name":"sellVal","type":"uint256"}],"name":"setEthLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"maxEthTrades","type":"bool"}],"name":"setEthLimitsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWalletBase2000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setZeroBuyTaxmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticTax","outputs":[{"internalType":"uint256","name":"maxLiquidity","type":"uint256"},{"internalType":"uint256","name":"maxReflection","type":"uint256"},{"internalType":"uint256","name":"maxTreasury","type":"uint256"},{"internalType":"uint256","name":"maxMarketing","type":"uint256"},{"internalType":"uint256","name":"maxTeamfee","type":"uint256"}],"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":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withDrawLeftoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroBuyTaxmode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b031916738133df0e3a5db6f8e82974d3239eda678607dd67179055600560085560006009819055600a908155600f80547409000000000000000000000000000000000000dead6001600160a81b031990911617908190556200007d91600160a01b90910460ff169062000bf3565b620000919067016345785d8a000062000cb2565b6010819055620000a49060001962000d2b565b620000b29060001962000cd4565b60115560408051808201909152600e8082526d2237bab136329021b432b23230b960911b6020909201918252620000ec91601391620009fb565b5060408051808201909152600880825267244443484544444160c01b60209092019182526200011e91601491620009fb565b5062000157600a620001436107d06010546200075660201b62001da71790919060201c565b620007a960201b62001de91790919060201c565b6015556016805460ff19166001179055670de0b6b3a7640000601755674563918244f40000601855601054612710906200019390600562000cb2565b6200019f919062000b93565b6019556127106010546019620001b6919062000cb2565b620001c2919062000b93565b601a556002601b8190556001601c8190556004601d819055601e819055601f839055602083815560218390556022829055602382905560248490556040805160a0810182528581528083018590529081018390526060810183905260800184905260258490556026839055602782905560288290556029849055602a849055602b829055602c829055602d849055602e929092556200028b929162000277919082908490839062001e6862000834821b17901c565b6200083460201b62001e681790919060201c565b602f8190556030556034805461ffff19169055348015620002ab57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506011543360009081526004602081815260409283902093909355815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d93849363c45a0155938181019391829003018186803b1580156200034d57600080fd5b505afa15801562000362573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000388919062000af9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003d157600080fd5b505afa158015620003e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040c919062000af9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200045557600080fd5b505af11580156200046a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000490919062000af9565b603280546001600160a01b03199081166001600160a01b0393841617909155603180549091169183169190911790556001600b6000620004d86000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600b909252812080549092166001908117909255600c90620005316000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600c909352818320805485166001908117909155603254821684528284208054861682179055600f549091168352912080549092161790556002604051908082528060200260200182016040528015620005c6578160200160208202803683370190505b508051620005dd9160339160209091019062000a8a565b503060336000815481106200060257634e487b7160e01b600052603260045260246000fd5b60009182526020918290200180546001600160a01b0319166001600160a01b03938416179055603154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156200066357600080fd5b505afa15801562000678573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200069e919062000af9565b6033600181548110620006c157634e487b7160e01b600052603260045260246000fd5b600091825260209091200180546001600160a01b0319166001600160a01b03928316179055603154620006fa9130911660001962000897565b62000714336031546001600160a01b031660001962000897565b60105460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35062000d6e565b6000620007a083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620009bf60201b60201c565b90505b92915050565b600082620007ba57506000620007a3565b6000620007c8838562000cb2565b905082620007d7858362000b93565b14620007a05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b60008062000843838562000b78565b905083811015620007a05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200082b565b6001600160a01b038316620008fb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016200082b565b6001600160a01b0382166200095e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200082b565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008183620009e35760405162461bcd60e51b81526004016200082b919062000b22565b506000620009f2848662000b93565b95945050505050565b82805462000a099062000cee565b90600052602060002090601f01602090048101928262000a2d576000855562000a78565b82601f1062000a4857805160ff191683800117855562000a78565b8280016001018555821562000a78579182015b8281111562000a7857825182559160200191906001019062000a5b565b5062000a8692915062000ae2565b5090565b82805482825590600052602060002090810192821562000a78579160200282015b8281111562000a7857825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000aab565b5b8082111562000a86576000815560010162000ae3565b60006020828403121562000b0b578081fd5b81516001600160a01b0381168114620007a0578182fd5b6000602080835283518082850152825b8181101562000b505785810183015185820160400152820162000b32565b8181111562000b625783604083870101525b50601f01601f1916929092016040019392505050565b6000821982111562000b8e5762000b8e62000d42565b500190565b60008262000ba55762000ba562000d58565b500490565b600181815b8085111562000beb57816000190482111562000bcf5762000bcf62000d42565b8085161562000bdd57918102915b93841c939080029062000baf565b509250929050565b6000620007a060ff84168360008262000c0f57506001620007a3565b8162000c1e57506000620007a3565b816001811462000c37576002811462000c425762000c62565b6001915050620007a3565b60ff84111562000c565762000c5662000d42565b50506001821b620007a3565b5060208310610133831016604e8410600b841016171562000c87575081810a620007a3565b62000c93838362000baa565b806000190482111562000caa5762000caa62000d42565b029392505050565b600081600019048311821515161562000ccf5762000ccf62000d42565b500290565b60008282101562000ce95762000ce962000d42565b500390565b600181811c9082168062000d0357607f821691505b6020821081141562000d2557634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000d3d5762000d3d62000d58565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61382e8062000d7e6000396000f3fe60806040526004361061039b5760003560e01c80637598f8bc116101dc578063c860795211610102578063eafb5a3c116100a0578063fabb0b4f1161006f578063fabb0b4f14610aa3578063fb78680d14610ab9578063fe71c03f14610ad9578063ffb54a9914610af957600080fd5b8063eafb5a3c14610a23578063eb50e70e14610a43578063f259c57b14610a63578063f2fde38b14610a8357600080fd5b8063d628df9c116100dc578063d628df9c14610991578063dc44b6a0146109a7578063dd62ed3e146109bd578063ea2f0b3714610a0357600080fd5b8063c860795214610950578063c9567bf914610966578063cab034711461097b57600080fd5b80639baf6a3b1161017a578063a9059cbb11610149578063a9059cbb146108ea578063c011f2031461090a578063c469b6dd14610924578063c5d241891461093a57600080fd5b80639baf6a3b1461087e578063a03b3b4d14610894578063a3b84b6b146108aa578063a457c2d7146108ca57600080fd5b806388f82020116101b657806388f82020146107fc5780638da5cb5b146108355780638de890bd1461085357806395d89b411461086957600080fd5b80637598f8bc146107ba57806378109e54146107d057806388790a68146107e657600080fd5b8063401aa5c0116102c15780635d54c0af1161025f578063715018a61161022e578063715018a61461074f57806371b9189c14610764578063743942b6146107845780637580a014146107a457600080fd5b80635d54c0af146106cf5780636695fffe146106ef578063684c81991461070f57806370a082311461072f57600080fd5b80634b01547f1161029b5780634b01547f1461062057806352390c02146106405780635c4174c4146106605780635c6d4835146106af57600080fd5b8063401aa5c0146105ca5780634549b039146105e057806349bd5a5e1461060057600080fd5b806324fcf8cf116103395780632dd5efe7116103085780632dd5efe71461053e578063313ce5671461055e5780633685d4191461058a57806339509351146105aa57600080fd5b806324fcf8cf146104c757806325b86edf146104dd5780632691bc80146104ff5780632d8381191461051e57600080fd5b806313114a9d1161037557806313114a9d1461043b5780631694505e1461045a57806318160ddd1461049257806323b872dd146104a757600080fd5b806306fdde03146103a7578063095ea7b3146103d25780630f3a325f1461040257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610b13565b6040516103c991906135b0565b60405180910390f35b3480156103de57600080fd5b506103f26103ed3660046132b4565b610ba5565b60405190151581526020016103c9565b34801561040e57600080fd5b506103f261041d366004613204565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561044757600080fd5b506012545b6040519081526020016103c9565b34801561046657600080fd5b5060315461047a906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b34801561049e57600080fd5b5060105461044c565b3480156104b357600080fd5b506103f26104c2366004613274565b610bbc565b3480156104d357600080fd5b5061044c60225481565b3480156104e957600080fd5b506104fd6104f836600461346c565b610c25565b005b34801561050b57600080fd5b506034546103f290610100900460ff1681565b34801561052a57600080fd5b5061044c61053936600461347e565b610d5e565b34801561054a57600080fd5b506104fd610559366004613204565b610de2565b34801561056a57600080fd5b50600f54600160a01b900460ff1660405160ff90911681526020016103c9565b34801561059657600080fd5b506104fd6105a5366004613204565b610e30565b3480156105b657600080fd5b506103f26105c53660046132b4565b61101f565b3480156105d657600080fd5b5061044c601c5481565b3480156105ec57600080fd5b5061044c6105fb3660046134ae565b611055565b34801561060c57600080fd5b5060325461047a906001600160a01b031681565b34801561062c57600080fd5b506104fd61063b366004613434565b6110e2565b34801561064c57600080fd5b506104fd61065b366004613204565b611126565b34801561066c57600080fd5b50602554602654602754602854602954610687949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103c9565b3480156106bb57600080fd5b506104fd6106ca366004613530565b611210565b3480156106db57600080fd5b506104fd6106ea36600461331f565b6112b8565b3480156106fb57600080fd5b506104fd61070a36600461347e565b61135f565b34801561071b57600080fd5b506104fd61072a366004613434565b6113b0565b34801561073b57600080fd5b5061044c61074a366004613204565b6113ed565b34801561075b57600080fd5b506104fd61144c565b34801561077057600080fd5b506104fd61077f3660046132df565b6114c0565b34801561079057600080fd5b506104fd61079f366004613204565b61156d565b3480156107b057600080fd5b5061044c60175481565b3480156107c657600080fd5b5061044c60215481565b3480156107dc57600080fd5b5061044c60155481565b3480156107f257600080fd5b5061044c60205481565b34801561080857600080fd5b506103f2610817366004613204565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561084157600080fd5b506000546001600160a01b031661047a565b34801561085f57600080fd5b5061044c60095481565b34801561087557600080fd5b506103bc6115cc565b34801561088a57600080fd5b5061044c60185481565b3480156108a057600080fd5b5061044c600a5481565b3480156108b657600080fd5b506104fd6108c5366004613530565b6115db565b3480156108d657600080fd5b506103f26108e53660046132b4565b6116af565b3480156108f657600080fd5b506103f26109053660046132b4565b6116fe565b34801561091657600080fd5b506016546103f29060ff1681565b34801561093057600080fd5b5061044c601f5481565b34801561094657600080fd5b5061044c601e5481565b34801561095c57600080fd5b5061044c60235481565b34801561097257600080fd5b506104fd61170b565b34801561098757600080fd5b5061044c60245481565b34801561099d57600080fd5b5061044c601d5481565b3480156109b357600080fd5b5061044c601b5481565b3480156109c957600080fd5b5061044c6109d836600461323c565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610a0f57600080fd5b506104fd610a1e366004613204565b611792565b348015610a2f57600080fd5b506104fd610a3e366004613204565b6117dd565b348015610a4f57600080fd5b506104fd610a5e366004613204565b611b63565b348015610a6f57600080fd5b506104fd610a7e366004613204565b611baf565b348015610a8f57600080fd5b506104fd610a9e366004613204565b611bfd565b348015610aaf57600080fd5b5061044c60085481565b348015610ac557600080fd5b506104fd610ad43660046134ff565b611ce7565b348015610ae557600080fd5b506104fd610af436600461347e565b611d50565b348015610b0557600080fd5b506034546103f29060ff1681565b606060138054610b2290613703565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4e90613703565b8015610b9b5780601f10610b7057610100808354040283529160200191610b9b565b820191906000526020600020905b815481529060010190602001808311610b7e57829003601f168201915b5050505050905090565b6000610bb2338484611ec7565b5060015b92915050565b6000610bc9848484611feb565b610c1b8433610c16856040518060600160405280602881526020016137ac602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906126d7565b611ec7565b5060019392505050565b6000546001600160a01b03163314610c585760405162461bcd60e51b8152600401610c4f90613603565b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c9a57600080fd5b505afa158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190613496565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610d2057600080fd5b505af1158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d589190613450565b50505050565b6000601154821115610dc55760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c4f565b6000610dcf612711565b9050610ddb8382611da7565b9392505050565b6000546001600160a01b03163314610e0c5760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610e5a5760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b0381166000908152600d602052604090205460ff16610ec25760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c4f565b60005b600e5481101561101b57816001600160a01b0316600e8281548110610efa57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561100957600e8054610f25906001906136ec565b81548110610f4357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600e80546001600160a01b039092169183908110610f7d57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600d90925220805460ff19169055600e805480610fe357634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110138161373e565b915050610ec5565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610bb2918590610c169086611e68565b60006010548311156110a95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c4f565b816110c85760006110b984612734565b50939550610bb6945050505050565b60006110d384612734565b50929550610bb6945050505050565b6000546001600160a01b0316331461110c5760405162461bcd60e51b8152600401610c4f90613603565b603480549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146111505760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b038116600090815260046020526040902054156111aa576001600160a01b03811660009081526004602052604090205461119090610d5e565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600d60205260408120805460ff19166001908117909155600e805491820181559091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461123a5760405162461bcd60e51b8152600401610c4f90613603565b602654851180159061124e57506025548411155b801561125c57506028548211155b801561126a57506029548111155b61127357600080fd5b600061128d82611287858188818c8c611e68565b90611e68565b9050600d81111561129d57600080fd5b50602093909355602193909355602255602391909155602455565b6000546001600160a01b031633146112e25760405162461bcd60e51b8152600401610c4f90613603565b60005b82811015610d5857816007600086868581811061131257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113279190613204565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556113588161373e565b90506112e5565b6000546001600160a01b031633146113895760405162461bcd60e51b8152600401610c4f90613603565b6113aa816113a46107d0601054611da790919063ffffffff16565b90611de9565b60155550565b6000546001600160a01b031633146113da5760405162461bcd60e51b8152600401610c4f90613603565b6016805460ff1916911515919091179055565b6001600160a01b0381166000908152600d602052604081205460ff161561142a57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610bb690610d5e565b6000546001600160a01b031633146114765760405162461bcd60e51b8152600401610c4f90613603565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146114ea5760405162461bcd60e51b8152600401610c4f90613603565b60005b81811015611568576001600b600085858581811061151b57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115309190613204565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556115618161373e565b90506114ed565b505050565b6000546001600160a01b031633146115975760405162461bcd60e51b8152600401610c4f90613603565b6040516001600160a01b038216904780156108fc02916000818181858888f1935050505015801561101b573d6000803e3d6000fd5b606060148054610b2290613703565b6000546001600160a01b031633146116055760405162461bcd60e51b8152600401610c4f90613603565b602654851180159061161957506025548411155b801561162757506028548211155b801561163557506029548111155b61163e57600080fd5b600061165282611287858188818c8c611e68565b9050600d81111561166257600080fd5b601b859055601c869055601d849055601e839055601f829055602e869055602a859055602b849055602c839055602d8290556116a48261128785818989611e68565b602f55505050505050565b6000610bb23384610c16856040518060600160405280602581526020016137d4602591393360009081526006602090815260408083206001600160a01b038d16845290915290205491906126d7565b6000610bb2338484611feb565b6000546001600160a01b031633146117355760405162461bcd60e51b8152600401610c4f90613603565b60345460ff161561174557600080fd5b6034805460ff1916600117905561175b30611126565b603254611770906001600160a01b0316611126565b60345460ff1680156117825750600954155b15611790574360095542600a555b565b6000546001600160a01b031633146117bc5760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146118075760405162461bcd60e51b8152600401610c4f90613603565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561184757600080fd5b505afa15801561185b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187f9190613220565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156118c757600080fd5b505afa1580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff9190613220565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561194557600080fd5b505afa158015611959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197d9190613220565b90506001600160a01b038116611b2357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156119c657600080fd5b505afa1580156119da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fe9190613220565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a4657600080fd5b505afa158015611a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7e9190613220565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611ac657600080fd5b505af1158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe9190613220565b603280546001600160a01b0319166001600160a01b0392909216919091179055611b3f565b603280546001600160a01b0319166001600160a01b0383161790555b50603180546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611b8d5760405162461bcd60e51b8152600401610c4f90613603565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611bd95760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b03163314611c275760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b038116611c8c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c4f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d115760405162461bcd60e51b8152600401610c4f90613603565b8284601054611d2091906136cd565b611d2a91906136ad565b6019556010548190611d3d9084906136cd565b611d4791906136ad565b601a5550505050565b6000546001600160a01b03163314611d7a5760405162461bcd60e51b8152600401610c4f90613603565b674563918244f40000811015611d8f57600080fd5b611da181670de0b6b3a76400006136cd565b60185550565b6000610ddb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612783565b600082611df857506000610bb6565b6000611e0483856136cd565b905082611e1185836136ad565b14610ddb5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c4f565b600080611e758385613695565b905083811015610ddb5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c4f565b6001600160a01b038316611f295760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c4f565b6001600160a01b038216611f8a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c4f565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661204f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c4f565b6001600160a01b0382166120b15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c4f565b600081116121135760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c4f565b6001600160a01b03821660009081526007602052604090205460ff161561217c5760405162461bcd60e51b815260206004820152601b60248201527f596f7520617265206f6e2074686520736e69706572206c6973742100000000006044820152606401610c4f565b6001600160a01b03831660009081526007602052604090205460ff16156121e55760405162461bcd60e51b815260206004820152601b60248201527f596f7520617265206f6e2074686520736e69706572206c6973742100000000006044820152606401610c4f565b6000546001600160a01b0384811691161480159061221157506000546001600160a01b03838116911614155b156122685760345460ff166122685760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610c4f565b6001600160a01b0383166000908152600b602052604081205460ff16806122a757506001600160a01b0383166000908152600b602052604090205460ff165b6122af575060015b602f54603055601c54602e556001600160a01b0383166000908152600c602052604090205460ff161580156122f257506000546001600160a01b03858116911614155b801561230b57506032546001600160a01b038581169116145b1561243657603454610100900460ff16156123845760155461232c846113ed565b6123369084613695565b111561237f5760405162461bcd60e51b8152602060048201526018602482015277151bdd185b081a1bdb191a5b99c81a5cc81b1a5b5a5d195960421b6044820152606401610c4f565b612436565b60006123af601f54611287601e54611287601d54611287601b54601c54611e6890919063ffffffff16565b905060646123bd81836127b1565b91506015546123cb866113ed565b6123e060646123da8887611de9565b90611da7565b6123ea9190613695565b11156124335760405162461bcd60e51b8152602060048201526018602482015277151bdd185b081a1bdb191a5b99c81a5cc81b1a5b5a5d195960421b6044820152606401610c4f565b50505b60345460ff16801561245557506032546001600160a01b038481169116145b156125de57602154602e5560165460ff16156125595760315460405163d06ca61f60e01b81526000916001600160a01b03169063d06ca61f9061249f908690603390600401613638565b60006040518083038186803b1580156124b757600080fd5b505afa1580156124cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f39190810190613374565b60018151811061251357634e487b7160e01b600052603260045260246000fd5b60200260200101519050600a546201518061252e9190613695565b42116125485760175481111561254357600080fd5b612557565b60185481111561255757600080fd5b505b600a5461256890611c20613695565b421161257857601e6030556125de565b600a546125879061a8c0613695565b42116125975760196030556125de565b600a546125a79062015180613695565b42116125b75760146030556125de565b6125da602454611287602354611287602254602054611e6890919063ffffffff16565b6030555b60006009541180156125ff5750436008546009546125fc9190613695565b10155b15612628576001600160a01b0383166000908152600760205260409020805460ff191660011790555b603454610100900460ff16156126625760345460ff16801561265757506032546001600160a01b038581169116145b156126625760006030555b603254600160a01b900460ff1615801561267e575060345460ff165b801561269757506032546001600160a01b038481169116145b156126cb5760006126a7306113ed565b905060195481106126c957601a5481106126c05750601a545b6126c9816127f3565b505b610d58848484846128f9565b600081848411156126fb5760405162461bcd60e51b8152600401610c4f91906135b0565b50600061270884866136ec565b95945050505050565b600080600061271e612a29565b909250905061272d8282611da7565b9250505090565b600080600080600080600080600061274b8a612be3565b92509250925060008060006127698d8686612764612711565b612c25565b919f909e50909c50959a5093985091965092945050505050565b600081836127a45760405162461bcd60e51b8152600401610c4f91906135b0565b50600061270884866136ad565b6000610ddb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126d7565b6032805460ff60a01b1916600160a01b179055602f54602a54600091612823916002916123da9182908790611de9565b9050600061283183836127b1565b905061283c81612c75565b602a54479060009061285c90612853906002611da7565b602f54906127b1565b9050600061287e60026123da846123da602a5488611de990919063ffffffff16565b9050600061289f602d54611287602c54602b54611e6890919063ffffffff16565b905060006128b1846123da8785611de9565b90504780156128d1576003546128d19083906001600160a01b0316612d36565b87156128e1576128e18885612d6c565b50506032805460ff60a01b1916905550505050505050565b602e546030548261290f576000602e8190556030555b6001600160a01b0386166000908152600d602052604090205460ff16801561295057506001600160a01b0385166000908152600d602052604090205460ff16155b1561296557612960868686612e50565b612a11565b6001600160a01b0386166000908152600d602052604090205460ff161580156129a657506001600160a01b0385166000908152600d602052604090205460ff165b156129b657612960868686612f76565b6001600160a01b0386166000908152600d602052604090205460ff1680156129f657506001600160a01b0385166000908152600d602052604090205460ff165b15612a065761296086868661301f565b612a11868686613092565b82612a2157602e82905560308190555b505050505050565b6011546010546000918291825b600e54811015612bb3578260046000600e8481548110612a6657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612adf57508160056000600e8481548110612ab857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612af557601154601054945094505050509091565b612b4960046000600e8481548110612b1d57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906127b1565b9250612b9f60056000600e8481548110612b7357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906127b1565b915080612bab8161373e565b915050612a36565b50601054601154612bc391611da7565b821015612bda576011546010549350935050509091565b90939092509050565b600080600080612bf2856130d6565b90506000612bff866130f2565b90506000612c1782612c1189866127b1565b906127b1565b979296509094509092505050565b6000808080612c348886611de9565b90506000612c428887611de9565b90506000612c508888611de9565b90506000612c6282612c1186866127b1565b939b939a50919850919650505050505050565b603154612c8d9030906001600160a01b031683611ec7565b60315460405163791ac94760e01b81526001600160a01b039091169063791ac94790612cc790849060009060339030904290600401613659565b600060405180830381600087803b158015612ce157600080fd5b505af1158015612cf5573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7816033604051612d2b929190613638565b60405180910390a150565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611568573d6000803e3d6000fd5b603154612d849030906001600160a01b031684611ec7565b6031546001600160a01b031663f305d719823085600080612dad6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612e1057600080fd5b505af1158015612e24573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e4991906134d2565b5050505050565b600080600080600080612e6287612734565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612e9490886127b1565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612ec390876127b1565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612ef29086611e68565b6001600160a01b038916600090815260046020526040902055612f148161310e565b612f1e8483613196565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612f6391815260200190565b60405180910390a3505050505050505050565b600080600080600080612f8887612734565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612fba90876127b1565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054612ff09084611e68565b6001600160a01b038916600090815260056020908152604080832093909355600490522054612ef29086611e68565b60008060008060008061303187612734565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061306390886127b1565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612fba90876127b1565b6000806000806000806130a487612734565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612ec390876127b1565b6000610bb660646123da602e5485611de990919063ffffffff16565b6000610bb660646123da60305485611de990919063ffffffff16565b6000613118612711565b905060006131268383611de9565b306000908152600460205260409020549091506131439082611e68565b30600090815260046020908152604080832093909355600d9052205460ff161561156857306000908152600560205260409020546131819084611e68565b30600090815260056020526040902055505050565b6011546131a390836127b1565b6011556012546131b39082611e68565b6012555050565b60008083601f8401126131cb578182fd5b50813567ffffffffffffffff8111156131e2578182fd5b6020830191508360208260051b85010111156131fd57600080fd5b9250929050565b600060208284031215613215578081fd5b8135610ddb81613785565b600060208284031215613231578081fd5b8151610ddb81613785565b6000806040838503121561324e578081fd5b823561325981613785565b9150602083013561326981613785565b809150509250929050565b600080600060608486031215613288578081fd5b833561329381613785565b925060208401356132a381613785565b929592945050506040919091013590565b600080604083850312156132c6578182fd5b82356132d181613785565b946020939093013593505050565b600080602083850312156132f1578182fd5b823567ffffffffffffffff811115613307578283fd5b613313858286016131ba565b90969095509350505050565b600080600060408486031215613333578283fd5b833567ffffffffffffffff811115613349578384fd5b613355868287016131ba565b90945092505060208401356133698161379d565b809150509250925092565b60006020808385031215613386578182fd5b825167ffffffffffffffff8082111561339d578384fd5b818501915085601f8301126133b0578384fd5b8151818111156133c2576133c261376f565b8060051b604051601f19603f830116810181811085821117156133e7576133e761376f565b604052828152858101935084860182860187018a1015613405578788fd5b8795505b83861015613427578051855260019590950194938601938601613409565b5098975050505050505050565b600060208284031215613445578081fd5b8135610ddb8161379d565b600060208284031215613461578081fd5b8151610ddb8161379d565b6000806040838503121561324e578182fd5b60006020828403121561348f578081fd5b5035919050565b6000602082840312156134a7578081fd5b5051919050565b600080604083850312156134c0578182fd5b8235915060208301356132698161379d565b6000806000606084860312156134e6578081fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613514578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a08688031215613547578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000815480845260208085019450838352808320835b838110156135a55781546001600160a01b031687529582019560019182019101613580565b509495945050505050565b6000602080835283518082850152825b818110156135dc578581018301518582016040015282016135c0565b818111156135ed5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000613651604083018461356a565b949350505050565b85815284602082015260a06040820152600061367860a083018661356a565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156136a8576136a8613759565b500190565b6000826136c857634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156136e7576136e7613759565b500290565b6000828210156136fe576136fe613759565b500390565b600181811c9082168061371757607f821691505b6020821081141561373857634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561375257613752613759565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461379a57600080fd5b50565b801515811461379a57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206209c6c1eaea627b9c1403a1067aa075a88e3a0a950cfe5db9091ea06e74f96464736f6c63430008040033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80637598f8bc116101dc578063c860795211610102578063eafb5a3c116100a0578063fabb0b4f1161006f578063fabb0b4f14610aa3578063fb78680d14610ab9578063fe71c03f14610ad9578063ffb54a9914610af957600080fd5b8063eafb5a3c14610a23578063eb50e70e14610a43578063f259c57b14610a63578063f2fde38b14610a8357600080fd5b8063d628df9c116100dc578063d628df9c14610991578063dc44b6a0146109a7578063dd62ed3e146109bd578063ea2f0b3714610a0357600080fd5b8063c860795214610950578063c9567bf914610966578063cab034711461097b57600080fd5b80639baf6a3b1161017a578063a9059cbb11610149578063a9059cbb146108ea578063c011f2031461090a578063c469b6dd14610924578063c5d241891461093a57600080fd5b80639baf6a3b1461087e578063a03b3b4d14610894578063a3b84b6b146108aa578063a457c2d7146108ca57600080fd5b806388f82020116101b657806388f82020146107fc5780638da5cb5b146108355780638de890bd1461085357806395d89b411461086957600080fd5b80637598f8bc146107ba57806378109e54146107d057806388790a68146107e657600080fd5b8063401aa5c0116102c15780635d54c0af1161025f578063715018a61161022e578063715018a61461074f57806371b9189c14610764578063743942b6146107845780637580a014146107a457600080fd5b80635d54c0af146106cf5780636695fffe146106ef578063684c81991461070f57806370a082311461072f57600080fd5b80634b01547f1161029b5780634b01547f1461062057806352390c02146106405780635c4174c4146106605780635c6d4835146106af57600080fd5b8063401aa5c0146105ca5780634549b039146105e057806349bd5a5e1461060057600080fd5b806324fcf8cf116103395780632dd5efe7116103085780632dd5efe71461053e578063313ce5671461055e5780633685d4191461058a57806339509351146105aa57600080fd5b806324fcf8cf146104c757806325b86edf146104dd5780632691bc80146104ff5780632d8381191461051e57600080fd5b806313114a9d1161037557806313114a9d1461043b5780631694505e1461045a57806318160ddd1461049257806323b872dd146104a757600080fd5b806306fdde03146103a7578063095ea7b3146103d25780630f3a325f1461040257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610b13565b6040516103c991906135b0565b60405180910390f35b3480156103de57600080fd5b506103f26103ed3660046132b4565b610ba5565b60405190151581526020016103c9565b34801561040e57600080fd5b506103f261041d366004613204565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561044757600080fd5b506012545b6040519081526020016103c9565b34801561046657600080fd5b5060315461047a906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b34801561049e57600080fd5b5060105461044c565b3480156104b357600080fd5b506103f26104c2366004613274565b610bbc565b3480156104d357600080fd5b5061044c60225481565b3480156104e957600080fd5b506104fd6104f836600461346c565b610c25565b005b34801561050b57600080fd5b506034546103f290610100900460ff1681565b34801561052a57600080fd5b5061044c61053936600461347e565b610d5e565b34801561054a57600080fd5b506104fd610559366004613204565b610de2565b34801561056a57600080fd5b50600f54600160a01b900460ff1660405160ff90911681526020016103c9565b34801561059657600080fd5b506104fd6105a5366004613204565b610e30565b3480156105b657600080fd5b506103f26105c53660046132b4565b61101f565b3480156105d657600080fd5b5061044c601c5481565b3480156105ec57600080fd5b5061044c6105fb3660046134ae565b611055565b34801561060c57600080fd5b5060325461047a906001600160a01b031681565b34801561062c57600080fd5b506104fd61063b366004613434565b6110e2565b34801561064c57600080fd5b506104fd61065b366004613204565b611126565b34801561066c57600080fd5b50602554602654602754602854602954610687949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103c9565b3480156106bb57600080fd5b506104fd6106ca366004613530565b611210565b3480156106db57600080fd5b506104fd6106ea36600461331f565b6112b8565b3480156106fb57600080fd5b506104fd61070a36600461347e565b61135f565b34801561071b57600080fd5b506104fd61072a366004613434565b6113b0565b34801561073b57600080fd5b5061044c61074a366004613204565b6113ed565b34801561075b57600080fd5b506104fd61144c565b34801561077057600080fd5b506104fd61077f3660046132df565b6114c0565b34801561079057600080fd5b506104fd61079f366004613204565b61156d565b3480156107b057600080fd5b5061044c60175481565b3480156107c657600080fd5b5061044c60215481565b3480156107dc57600080fd5b5061044c60155481565b3480156107f257600080fd5b5061044c60205481565b34801561080857600080fd5b506103f2610817366004613204565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561084157600080fd5b506000546001600160a01b031661047a565b34801561085f57600080fd5b5061044c60095481565b34801561087557600080fd5b506103bc6115cc565b34801561088a57600080fd5b5061044c60185481565b3480156108a057600080fd5b5061044c600a5481565b3480156108b657600080fd5b506104fd6108c5366004613530565b6115db565b3480156108d657600080fd5b506103f26108e53660046132b4565b6116af565b3480156108f657600080fd5b506103f26109053660046132b4565b6116fe565b34801561091657600080fd5b506016546103f29060ff1681565b34801561093057600080fd5b5061044c601f5481565b34801561094657600080fd5b5061044c601e5481565b34801561095c57600080fd5b5061044c60235481565b34801561097257600080fd5b506104fd61170b565b34801561098757600080fd5b5061044c60245481565b34801561099d57600080fd5b5061044c601d5481565b3480156109b357600080fd5b5061044c601b5481565b3480156109c957600080fd5b5061044c6109d836600461323c565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610a0f57600080fd5b506104fd610a1e366004613204565b611792565b348015610a2f57600080fd5b506104fd610a3e366004613204565b6117dd565b348015610a4f57600080fd5b506104fd610a5e366004613204565b611b63565b348015610a6f57600080fd5b506104fd610a7e366004613204565b611baf565b348015610a8f57600080fd5b506104fd610a9e366004613204565b611bfd565b348015610aaf57600080fd5b5061044c60085481565b348015610ac557600080fd5b506104fd610ad43660046134ff565b611ce7565b348015610ae557600080fd5b506104fd610af436600461347e565b611d50565b348015610b0557600080fd5b506034546103f29060ff1681565b606060138054610b2290613703565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4e90613703565b8015610b9b5780601f10610b7057610100808354040283529160200191610b9b565b820191906000526020600020905b815481529060010190602001808311610b7e57829003601f168201915b5050505050905090565b6000610bb2338484611ec7565b5060015b92915050565b6000610bc9848484611feb565b610c1b8433610c16856040518060600160405280602881526020016137ac602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906126d7565b611ec7565b5060019392505050565b6000546001600160a01b03163314610c585760405162461bcd60e51b8152600401610c4f90613603565b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c9a57600080fd5b505afa158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190613496565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610d2057600080fd5b505af1158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d589190613450565b50505050565b6000601154821115610dc55760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c4f565b6000610dcf612711565b9050610ddb8382611da7565b9392505050565b6000546001600160a01b03163314610e0c5760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610e5a5760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b0381166000908152600d602052604090205460ff16610ec25760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c4f565b60005b600e5481101561101b57816001600160a01b0316600e8281548110610efa57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561100957600e8054610f25906001906136ec565b81548110610f4357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600e80546001600160a01b039092169183908110610f7d57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600d90925220805460ff19169055600e805480610fe357634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110138161373e565b915050610ec5565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610bb2918590610c169086611e68565b60006010548311156110a95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c4f565b816110c85760006110b984612734565b50939550610bb6945050505050565b60006110d384612734565b50929550610bb6945050505050565b6000546001600160a01b0316331461110c5760405162461bcd60e51b8152600401610c4f90613603565b603480549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146111505760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b038116600090815260046020526040902054156111aa576001600160a01b03811660009081526004602052604090205461119090610d5e565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600d60205260408120805460ff19166001908117909155600e805491820181559091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461123a5760405162461bcd60e51b8152600401610c4f90613603565b602654851180159061124e57506025548411155b801561125c57506028548211155b801561126a57506029548111155b61127357600080fd5b600061128d82611287858188818c8c611e68565b90611e68565b9050600d81111561129d57600080fd5b50602093909355602193909355602255602391909155602455565b6000546001600160a01b031633146112e25760405162461bcd60e51b8152600401610c4f90613603565b60005b82811015610d5857816007600086868581811061131257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113279190613204565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556113588161373e565b90506112e5565b6000546001600160a01b031633146113895760405162461bcd60e51b8152600401610c4f90613603565b6113aa816113a46107d0601054611da790919063ffffffff16565b90611de9565b60155550565b6000546001600160a01b031633146113da5760405162461bcd60e51b8152600401610c4f90613603565b6016805460ff1916911515919091179055565b6001600160a01b0381166000908152600d602052604081205460ff161561142a57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610bb690610d5e565b6000546001600160a01b031633146114765760405162461bcd60e51b8152600401610c4f90613603565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146114ea5760405162461bcd60e51b8152600401610c4f90613603565b60005b81811015611568576001600b600085858581811061151b57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115309190613204565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556115618161373e565b90506114ed565b505050565b6000546001600160a01b031633146115975760405162461bcd60e51b8152600401610c4f90613603565b6040516001600160a01b038216904780156108fc02916000818181858888f1935050505015801561101b573d6000803e3d6000fd5b606060148054610b2290613703565b6000546001600160a01b031633146116055760405162461bcd60e51b8152600401610c4f90613603565b602654851180159061161957506025548411155b801561162757506028548211155b801561163557506029548111155b61163e57600080fd5b600061165282611287858188818c8c611e68565b9050600d81111561166257600080fd5b601b859055601c869055601d849055601e839055601f829055602e869055602a859055602b849055602c839055602d8290556116a48261128785818989611e68565b602f55505050505050565b6000610bb23384610c16856040518060600160405280602581526020016137d4602591393360009081526006602090815260408083206001600160a01b038d16845290915290205491906126d7565b6000610bb2338484611feb565b6000546001600160a01b031633146117355760405162461bcd60e51b8152600401610c4f90613603565b60345460ff161561174557600080fd5b6034805460ff1916600117905561175b30611126565b603254611770906001600160a01b0316611126565b60345460ff1680156117825750600954155b15611790574360095542600a555b565b6000546001600160a01b031633146117bc5760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146118075760405162461bcd60e51b8152600401610c4f90613603565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561184757600080fd5b505afa15801561185b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187f9190613220565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156118c757600080fd5b505afa1580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff9190613220565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561194557600080fd5b505afa158015611959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197d9190613220565b90506001600160a01b038116611b2357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156119c657600080fd5b505afa1580156119da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fe9190613220565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a4657600080fd5b505afa158015611a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7e9190613220565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611ac657600080fd5b505af1158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe9190613220565b603280546001600160a01b0319166001600160a01b0392909216919091179055611b3f565b603280546001600160a01b0319166001600160a01b0383161790555b50603180546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611b8d5760405162461bcd60e51b8152600401610c4f90613603565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611bd95760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b03163314611c275760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b038116611c8c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c4f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d115760405162461bcd60e51b8152600401610c4f90613603565b8284601054611d2091906136cd565b611d2a91906136ad565b6019556010548190611d3d9084906136cd565b611d4791906136ad565b601a5550505050565b6000546001600160a01b03163314611d7a5760405162461bcd60e51b8152600401610c4f90613603565b674563918244f40000811015611d8f57600080fd5b611da181670de0b6b3a76400006136cd565b60185550565b6000610ddb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612783565b600082611df857506000610bb6565b6000611e0483856136cd565b905082611e1185836136ad565b14610ddb5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c4f565b600080611e758385613695565b905083811015610ddb5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c4f565b6001600160a01b038316611f295760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c4f565b6001600160a01b038216611f8a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c4f565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661204f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c4f565b6001600160a01b0382166120b15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c4f565b600081116121135760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c4f565b6001600160a01b03821660009081526007602052604090205460ff161561217c5760405162461bcd60e51b815260206004820152601b60248201527f596f7520617265206f6e2074686520736e69706572206c6973742100000000006044820152606401610c4f565b6001600160a01b03831660009081526007602052604090205460ff16156121e55760405162461bcd60e51b815260206004820152601b60248201527f596f7520617265206f6e2074686520736e69706572206c6973742100000000006044820152606401610c4f565b6000546001600160a01b0384811691161480159061221157506000546001600160a01b03838116911614155b156122685760345460ff166122685760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610c4f565b6001600160a01b0383166000908152600b602052604081205460ff16806122a757506001600160a01b0383166000908152600b602052604090205460ff165b6122af575060015b602f54603055601c54602e556001600160a01b0383166000908152600c602052604090205460ff161580156122f257506000546001600160a01b03858116911614155b801561230b57506032546001600160a01b038581169116145b1561243657603454610100900460ff16156123845760155461232c846113ed565b6123369084613695565b111561237f5760405162461bcd60e51b8152602060048201526018602482015277151bdd185b081a1bdb191a5b99c81a5cc81b1a5b5a5d195960421b6044820152606401610c4f565b612436565b60006123af601f54611287601e54611287601d54611287601b54601c54611e6890919063ffffffff16565b905060646123bd81836127b1565b91506015546123cb866113ed565b6123e060646123da8887611de9565b90611da7565b6123ea9190613695565b11156124335760405162461bcd60e51b8152602060048201526018602482015277151bdd185b081a1bdb191a5b99c81a5cc81b1a5b5a5d195960421b6044820152606401610c4f565b50505b60345460ff16801561245557506032546001600160a01b038481169116145b156125de57602154602e5560165460ff16156125595760315460405163d06ca61f60e01b81526000916001600160a01b03169063d06ca61f9061249f908690603390600401613638565b60006040518083038186803b1580156124b757600080fd5b505afa1580156124cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f39190810190613374565b60018151811061251357634e487b7160e01b600052603260045260246000fd5b60200260200101519050600a546201518061252e9190613695565b42116125485760175481111561254357600080fd5b612557565b60185481111561255757600080fd5b505b600a5461256890611c20613695565b421161257857601e6030556125de565b600a546125879061a8c0613695565b42116125975760196030556125de565b600a546125a79062015180613695565b42116125b75760146030556125de565b6125da602454611287602354611287602254602054611e6890919063ffffffff16565b6030555b60006009541180156125ff5750436008546009546125fc9190613695565b10155b15612628576001600160a01b0383166000908152600760205260409020805460ff191660011790555b603454610100900460ff16156126625760345460ff16801561265757506032546001600160a01b038581169116145b156126625760006030555b603254600160a01b900460ff1615801561267e575060345460ff165b801561269757506032546001600160a01b038481169116145b156126cb5760006126a7306113ed565b905060195481106126c957601a5481106126c05750601a545b6126c9816127f3565b505b610d58848484846128f9565b600081848411156126fb5760405162461bcd60e51b8152600401610c4f91906135b0565b50600061270884866136ec565b95945050505050565b600080600061271e612a29565b909250905061272d8282611da7565b9250505090565b600080600080600080600080600061274b8a612be3565b92509250925060008060006127698d8686612764612711565b612c25565b919f909e50909c50959a5093985091965092945050505050565b600081836127a45760405162461bcd60e51b8152600401610c4f91906135b0565b50600061270884866136ad565b6000610ddb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126d7565b6032805460ff60a01b1916600160a01b179055602f54602a54600091612823916002916123da9182908790611de9565b9050600061283183836127b1565b905061283c81612c75565b602a54479060009061285c90612853906002611da7565b602f54906127b1565b9050600061287e60026123da846123da602a5488611de990919063ffffffff16565b9050600061289f602d54611287602c54602b54611e6890919063ffffffff16565b905060006128b1846123da8785611de9565b90504780156128d1576003546128d19083906001600160a01b0316612d36565b87156128e1576128e18885612d6c565b50506032805460ff60a01b1916905550505050505050565b602e546030548261290f576000602e8190556030555b6001600160a01b0386166000908152600d602052604090205460ff16801561295057506001600160a01b0385166000908152600d602052604090205460ff16155b1561296557612960868686612e50565b612a11565b6001600160a01b0386166000908152600d602052604090205460ff161580156129a657506001600160a01b0385166000908152600d602052604090205460ff165b156129b657612960868686612f76565b6001600160a01b0386166000908152600d602052604090205460ff1680156129f657506001600160a01b0385166000908152600d602052604090205460ff165b15612a065761296086868661301f565b612a11868686613092565b82612a2157602e82905560308190555b505050505050565b6011546010546000918291825b600e54811015612bb3578260046000600e8481548110612a6657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612adf57508160056000600e8481548110612ab857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612af557601154601054945094505050509091565b612b4960046000600e8481548110612b1d57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906127b1565b9250612b9f60056000600e8481548110612b7357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906127b1565b915080612bab8161373e565b915050612a36565b50601054601154612bc391611da7565b821015612bda576011546010549350935050509091565b90939092509050565b600080600080612bf2856130d6565b90506000612bff866130f2565b90506000612c1782612c1189866127b1565b906127b1565b979296509094509092505050565b6000808080612c348886611de9565b90506000612c428887611de9565b90506000612c508888611de9565b90506000612c6282612c1186866127b1565b939b939a50919850919650505050505050565b603154612c8d9030906001600160a01b031683611ec7565b60315460405163791ac94760e01b81526001600160a01b039091169063791ac94790612cc790849060009060339030904290600401613659565b600060405180830381600087803b158015612ce157600080fd5b505af1158015612cf5573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7816033604051612d2b929190613638565b60405180910390a150565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611568573d6000803e3d6000fd5b603154612d849030906001600160a01b031684611ec7565b6031546001600160a01b031663f305d719823085600080612dad6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612e1057600080fd5b505af1158015612e24573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e4991906134d2565b5050505050565b600080600080600080612e6287612734565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612e9490886127b1565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612ec390876127b1565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612ef29086611e68565b6001600160a01b038916600090815260046020526040902055612f148161310e565b612f1e8483613196565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612f6391815260200190565b60405180910390a3505050505050505050565b600080600080600080612f8887612734565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612fba90876127b1565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054612ff09084611e68565b6001600160a01b038916600090815260056020908152604080832093909355600490522054612ef29086611e68565b60008060008060008061303187612734565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061306390886127b1565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612fba90876127b1565b6000806000806000806130a487612734565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612ec390876127b1565b6000610bb660646123da602e5485611de990919063ffffffff16565b6000610bb660646123da60305485611de990919063ffffffff16565b6000613118612711565b905060006131268383611de9565b306000908152600460205260409020549091506131439082611e68565b30600090815260046020908152604080832093909355600d9052205460ff161561156857306000908152600560205260409020546131819084611e68565b30600090815260056020526040902055505050565b6011546131a390836127b1565b6011556012546131b39082611e68565b6012555050565b60008083601f8401126131cb578182fd5b50813567ffffffffffffffff8111156131e2578182fd5b6020830191508360208260051b85010111156131fd57600080fd5b9250929050565b600060208284031215613215578081fd5b8135610ddb81613785565b600060208284031215613231578081fd5b8151610ddb81613785565b6000806040838503121561324e578081fd5b823561325981613785565b9150602083013561326981613785565b809150509250929050565b600080600060608486031215613288578081fd5b833561329381613785565b925060208401356132a381613785565b929592945050506040919091013590565b600080604083850312156132c6578182fd5b82356132d181613785565b946020939093013593505050565b600080602083850312156132f1578182fd5b823567ffffffffffffffff811115613307578283fd5b613313858286016131ba565b90969095509350505050565b600080600060408486031215613333578283fd5b833567ffffffffffffffff811115613349578384fd5b613355868287016131ba565b90945092505060208401356133698161379d565b809150509250925092565b60006020808385031215613386578182fd5b825167ffffffffffffffff8082111561339d578384fd5b818501915085601f8301126133b0578384fd5b8151818111156133c2576133c261376f565b8060051b604051601f19603f830116810181811085821117156133e7576133e761376f565b604052828152858101935084860182860187018a1015613405578788fd5b8795505b83861015613427578051855260019590950194938601938601613409565b5098975050505050505050565b600060208284031215613445578081fd5b8135610ddb8161379d565b600060208284031215613461578081fd5b8151610ddb8161379d565b6000806040838503121561324e578182fd5b60006020828403121561348f578081fd5b5035919050565b6000602082840312156134a7578081fd5b5051919050565b600080604083850312156134c0578182fd5b8235915060208301356132698161379d565b6000806000606084860312156134e6578081fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613514578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a08688031215613547578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000815480845260208085019450838352808320835b838110156135a55781546001600160a01b031687529582019560019182019101613580565b509495945050505050565b6000602080835283518082850152825b818110156135dc578581018301518582016040015282016135c0565b818111156135ed5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000613651604083018461356a565b949350505050565b85815284602082015260a06040820152600061367860a083018661356a565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156136a8576136a8613759565b500190565b6000826136c857634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156136e7576136e7613759565b500290565b6000828210156136fe576136fe613759565b500390565b600181811c9082168061371757607f821691505b6020821081141561373857634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561375257613752613759565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461379a57600080fd5b50565b801515811461379a57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206209c6c1eaea627b9c1403a1067aa075a88e3a0a950cfe5db9091ea06e74f96464736f6c63430008040033

Deployed Bytecode Sourcemap

14047:24775:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19435:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20347:161;;;;;;;;;;-1:-1:-1;20347:161:0;;;;;:::i;:::-;;:::i;:::-;;;9554:14:1;;9547:22;9529:41;;9517:2;9502:18;20347:161:0;9484:92:1;35432:106:0;;;;;;;;;;-1:-1:-1;35432:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;35512:18:0;35488:4;35512:18;;;:9;:18;;;;;;;;;35432:106;21468:87;;;;;;;;;;-1:-1:-1;21537:10:0;;21468:87;;;16313:25:1;;;16301:2;16286:18;21468:87:0;16268:76:1;16964:41:0;;;;;;;;;;-1:-1:-1;16964:41:0;;;;-1:-1:-1;;;;;16964:41:0;;;;;;-1:-1:-1;;;;;8145:32:1;;;8127:51;;8115:2;8100:18;16964:41:0;8082:102:1;19712:95:0;;;;;;;;;;-1:-1:-1;19792:7:0;;19712:95;;20516:313;;;;;;;;;;-1:-1:-1;20516:313:0;;;;;:::i;:::-;;:::i;16196:35::-;;;;;;;;;;;;;;;;35916:177;;;;;;;;;;-1:-1:-1;35916:177:0;;;;;:::i;:::-;;:::i;:::-;;17138:34;;;;;;;;;;-1:-1:-1;17138:34:0;;;;;;;;;;;22011:253;;;;;;;;;;-1:-1:-1;22011:253:0;;;;;:::i;:::-;;:::i;36248:113::-;;;;;;;;;;-1:-1:-1;36248:113:0;;;;;:::i;:::-;;:::i;19621:83::-;;;;;;;;;;-1:-1:-1;19687:9:0;;-1:-1:-1;;;19687:9:0;;;;19621:83;;17923:4:1;17911:17;;;17893:36;;17881:2;17866:18;19621:83:0;17848:87:1;22543:479:0;;;;;;;;;;-1:-1:-1;22543:479:0;;;;;:::i;:::-;;:::i;20837:218::-;;;;;;;;;;-1:-1:-1;20837:218:0;;;;;:::i;:::-;;:::i;15912:36::-;;;;;;;;;;;;;;;;21567:436;;;;;;;;;;-1:-1:-1;21567:436:0;;;;;:::i;:::-;;:::i;17012:28::-;;;;;;;;;;-1:-1:-1;17012:28:0;;;;-1:-1:-1;;;;;17012:28:0;;;18788:104;;;;;;;;;;-1:-1:-1;18788:104:0;;;;;:::i;:::-;;:::i;22272:263::-;;;;;;;;;;-1:-1:-1;22272:263:0;;;;;:::i;:::-;;:::i;16336:206::-;;;;;;;;;;-1:-1:-1;16336:206:0;;;;;;;;;;;;;;;;;;;;;;17542:25:1;;;17598:2;17583:18;;17576:34;;;;17626:18;;;17619:34;;;;17684:2;17669:18;;17662:34;17727:3;17712:19;;17705:35;17529:3;17514:19;16336:206:0;17496:250:1;37713:776:0;;;;;;;;;;-1:-1:-1;37713:776:0;;;;;:::i;:::-;;:::i;35550:208::-;;;;;;;;;;-1:-1:-1;35550:208:0;;;;;:::i;:::-;;:::i;36101:139::-;;;;;;;;;;-1:-1:-1;36101:139:0;;;;;:::i;:::-;;:::i;38658:120::-;;;;;;;;;;-1:-1:-1;38658:120:0;;;;;:::i;:::-;;:::i;19815:198::-;;;;;;;;;;-1:-1:-1;19815:198:0;;;;;:::i;:::-;;:::i;5808:148::-;;;;;;;;;;;;;:::i;34842:198::-;;;;;;;;;;-1:-1:-1;34842:198:0;;;;;:::i;:::-;;:::i;35775:133::-;;;;;;;;;;-1:-1:-1;35775:133:0;;;;;:::i;:::-;;:::i;15578:45::-;;;;;;;;;;;;;;;;16147:37;;;;;;;;;;;;;;;;15434:58;;;;;;;;;;;;;;;;16099:36;;;;;;;;;;;;;;;;21340:120;;;;;;;;;;-1:-1:-1;21340:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21432:20:0;21408:4;21432:20;;;:11;:20;;;;;;;;;21340:120;5583:79;;;;;;;;;;-1:-1:-1;5621:7:0;5648:6;-1:-1:-1;;;;;5648:6:0;5583:79;;14556:34;;;;;;;;;;;;;;;;19526:87;;;;;;;;;;;;;:::i;15664:38::-;;;;;;;;;;;;;;;;14597:33;;;;;;;;;;;;;;;;36666:1039;;;;;;;;;;-1:-1:-1;36666:1039:0;;;;;:::i;:::-;;:::i;21063:269::-;;;;;;;;;;-1:-1:-1;21063:269:0;;;;;:::i;:::-;;:::i;20021:167::-;;;;;;;;;;-1:-1:-1;20021:167:0;;;;;:::i;:::-;;:::i;15533:38::-;;;;;;;;;;-1:-1:-1;15533:38:0;;;;;;;;16053:30;;;;;;;;;;;;;;;;16006:35;;;;;;;;;;;;;;;;16243:36;;;;;;;;;;;;;;;;18425:354;;;;;;;;;;;;;:::i;16291:31::-;;;;;;;;;;;;;;;;15960:34;;;;;;;;;;;;;;;;15860:35;;;;;;;;;;;;;;;;20196:143;;;;;;;;;;-1:-1:-1;20196:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20304:18:0;;;20277:7;20304:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20196:143;35053:110;;;;;;;;;;-1:-1:-1;35053:110:0;;;;;:::i;:::-;;:::i;18904:523::-;;;;;;;;;;-1:-1:-1;18904:523:0;;;;;:::i;:::-;;:::i;35175:111::-;;;;;;;;;;-1:-1:-1;35175:111:0;;;;;:::i;:::-;;:::i;34722:112::-;;;;;;;;;;-1:-1:-1;34722:112:0;;;;;:::i;:::-;;:::i;5964:244::-;;;;;;;;;;-1:-1:-1;5964:244:0;;;;;:::i;:::-;;:::i;14516:29::-;;;;;;;;;;;;;;;;36369:289;;;;;;;;;;-1:-1:-1;36369:289:0;;;;;:::i;:::-;;:::i;38497:153::-;;;;;;;;;;-1:-1:-1;38497:153:0;;;;;:::i;:::-;;:::i;17100:31::-;;;;;;;;;;-1:-1:-1;17100:31:0;;;;;;;;19435:83;19472:13;19505:5;19498:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19435:83;:::o;20347:161::-;20422:4;20439:39;359:10;20462:7;20471:6;20439:8;:39::i;:::-;-1:-1:-1;20496:4:0;20347:161;;;;;:::o;20516:313::-;20614:4;20631:36;20641:6;20649:9;20660:6;20631:9;:36::i;:::-;20678:121;20687:6;359:10;20709:89;20747:6;20709:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20709:19:0;;;;;;:11;:19;;;;;;;;359:10;20709:33;;;;;;;;;;:37;:89::i;:::-;20678:8;:121::i;:::-;-1:-1:-1;20817:4:0;20516:313;;;;;:::o;35916:177::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;;;;;;;;;36017:30:::1;::::0;-1:-1:-1;;;36017:30:0;;36041:4:::1;36017:30;::::0;::::1;8127:51:1::0;35999:15:0::1;::::0;-1:-1:-1;;;;;36017:15:0;::::1;::::0;::::1;::::0;8100:18:1;;36017:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36058:27;::::0;-1:-1:-1;;;36058:27:0;;-1:-1:-1;;;;;8690:32:1;;;36058:27:0::1;::::0;::::1;8672:51:1::0;8739:18;;;8732:34;;;35999:48:0;;-1:-1:-1;36058:14:0;;::::1;::::0;::::1;::::0;8645:18:1;;36058:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5787:1;35916:177:::0;;:::o;22011:253::-;22077:7;22116;;22105;:18;;22097:73;;;;-1:-1:-1;;;22097:73:0;;11030:2:1;22097:73:0;;;11012:21:1;11069:2;11049:18;;;11042:30;11108:34;11088:18;;;11081:62;-1:-1:-1;;;11159:18:1;;;11152:40;11209:19;;22097:73:0;11002:232:1;22097:73:0;22181:19;22204:10;:8;:10::i;:::-;22181:33;-1:-1:-1;22232:24:0;:7;22181:33;22232:11;:24::i;:::-;22225:31;22011:253;-1:-1:-1;;;22011:253:0:o;36248:113::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36321:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;36321:32:0::1;36349:4;36321:32;::::0;;36248:113::o;22543:479::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22625:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22617:60;;;::::0;-1:-1:-1;;;22617:60:0;;12607:2:1;22617:60:0::1;::::0;::::1;12589:21:1::0;12646:2;12626:18;;;12619:30;12685:29;12665:18;;;12658:57;12732:18;;22617:60:0::1;12579:177:1::0;22617:60:0::1;22693:9;22688:327;22712:9;:16:::0;22708:20;::::1;22688:327;;;22770:7;-1:-1:-1::0;;;;;22754:23:0::1;:9;22764:1;22754:12;;;;;;-1:-1:-1::0;;;22754:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22754:12:0::1;:23;22750:254;;;22813:9;22823:16:::0;;:20:::1;::::0;22842:1:::1;::::0;22823:20:::1;:::i;:::-;22813:31;;;;;;-1:-1:-1::0;;;22813:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;22798:9:::1;:12:::0;;-1:-1:-1;;;;;22813:31:0;;::::1;::::0;22808:1;;22798:12;::::1;;;-1:-1:-1::0;;;22798:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22798:46:0::1;-1:-1:-1::0;;;;;22798:46:0;;::::1;;::::0;;22863:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22902:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22902:28:0::1;::::0;;22949:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;22949:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22949:15:0;;;;;-1:-1:-1;;;;;;22949:15:0::1;::::0;;;;;22688:327:::1;22543:479:::0;:::o;22750:254::-:1;22730:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22688:327;;;;22543:479:::0;:::o;20837:218::-;359:10;20925:4;20974:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20974:34:0;;;;;;;;;;20925:4;;20942:83;;20965:7;;20974:50;;21013:10;20974:38;:50::i;21567:436::-;21657:7;21696;;21685;:18;;21677:62;;;;-1:-1:-1;;;21677:62:0;;13319:2:1;21677:62:0;;;13301:21:1;13358:2;13338:18;;;13331:30;13397:33;13377:18;;;13370:61;13448:18;;21677:62:0;13291:181:1;21677:62:0;21755:17;21750:246;;21790:15;21814:19;21825:7;21814:10;:19::i;:::-;-1:-1:-1;21789:44:0;;-1:-1:-1;21848:14:0;;-1:-1:-1;;;;;21848:14:0;21750:246;21897:23;21928:19;21939:7;21928:10;:19::i;:::-;-1:-1:-1;21895:52:0;;-1:-1:-1;21962:22:0;;-1:-1:-1;;;;;21962:22:0;18788:104;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;18860:14:::1;:24:::0;;;::::1;;;;-1:-1:-1::0;;18860:24:0;;::::1;::::0;;;::::1;::::0;;18788:104::o;22272:263::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22351:16:0;::::1;22370:1;22351:16:::0;;;:7:::1;:16;::::0;;;;;:20;22348:108:::1;;-1:-1:-1::0;;;;;22427:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22407:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22388:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22348:108:::1;-1:-1:-1::0;;;;;22466:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22466:27:0::1;22489:4;22466:27:::0;;::::1;::::0;;;22504:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22504:23:0::1;::::0;;::::1;::::0;;22272:263::o;37713:776::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;37900:23;;37882:41;::::1;::::0;::::1;::::0;:94:::1;;-1:-1:-1::0;37954:9:0::1;:22:::0;37937:39;::::1;;37882:94;:147;;;;-1:-1:-1::0;38007:22:0;;37990:39;::::1;;37882:147;:192;;;;-1:-1:-1::0;38054:20:0;;38042:32;::::1;;37882:192;37874:201;;;::::0;::::1;;38096:22;38121:84;38196:8:::0;38121:70:::1;38177:13:::0;38121:70;38159:12;38121:70;:14;38140:13;38121:18:::1;:33::i;:::-;:37:::0;::::1;:51::i;:84::-;38096:109;;38242:2;38224:14;:20;;38216:29;;;::::0;::::1;;-1:-1:-1::0;38277:17:0::1;:33:::0;;;;38321:18:::1;:34:::0;;;;38366:16:::1;:31:::0;38408:17:::1;:33:::0;;;;38452:12:::1;:23:::0;37713:776::o;35550:208::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;35650:9:::1;35645:106;35661:20:::0;;::::1;35645:106;;;35733:6;35707:9;:23;35717:9;;35727:1;35717:12;;;;;-1:-1:-1::0;;;35717:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35707:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35707:23:0;:32;;-1:-1:-1;;35707:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35683:3:::1;::::0;::::1;:::i;:::-;;;35645:106;;36101:139:::0;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;36200:32:::1;36222:9;36200:17;36212:4;36200:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:32::i;:::-;36182:15;:50:::0;-1:-1:-1;36101:139:0:o;38658:120::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;38736:19:::1;:34:::0;;-1:-1:-1;;38736:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38658:120::o;19815:198::-;-1:-1:-1;;;;;19905:20:0;;19881:7;19905:20;;;:11;:20;;;;;;;;19901:49;;;-1:-1:-1;;;;;;19934:16:0;;;;;:7;:16;;;;;;;19815:198::o;19901:49::-;-1:-1:-1;;;;;19988:16:0;;;;;;:7;:16;;;;;;19968:37;;:19;:37::i;5808:148::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;5915:1:::1;5899:6:::0;;5878:40:::1;::::0;-1:-1:-1;;;;;5899:6:0;;::::1;::::0;5878:40:::1;::::0;5915:1;;5878:40:::1;5946:1;5929:19:::0;;-1:-1:-1;;;;;;5929:19:0::1;::::0;;5808:148::o;34842:198::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;34929:9:::1;34924:109;34940:20:::0;;::::1;34924:109;;;35017:4;34982:18;:32;35001:9;;35011:1;35001:12;;;;;-1:-1:-1::0;;;35001:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34982:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34982:32:0;:39;;-1:-1:-1;;34982:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34962:3:::1;::::0;::::1;:::i;:::-;;;34924:109;;;;34842:198:::0;;:::o;35775:133::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;35859:41:::1;::::0;-1:-1:-1;;;;;35859:18:0;::::1;::::0;35878:21:::1;35859:41:::0;::::1;;;::::0;::::1;::::0;;;35878:21;35859:18;:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;19526:87:::0;19565:13;19598:7;19591:14;;;;;:::i;36666:1039::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;36853:23;;36835:41;::::1;::::0;::::1;::::0;:94:::1;;-1:-1:-1::0;36907:9:0::1;:22:::0;36890:39;::::1;;36835:94;:147;;;;-1:-1:-1::0;36960:22:0;;36943:39;::::1;;36835:147;:192;;;;-1:-1:-1::0;37007:20:0;;36995:32;::::1;;36835:192;36827:201;;;::::0;::::1;;37049:21;37073:84;37148:8:::0;37073:70:::1;37129:13:::0;37073:70;37111:12;37073:70;:14;37092:13;37073:18:::1;:33::i;:84::-;37049:108;;37193:2;37176:13;:19;;37168:28;;;::::0;::::1;;37227:16;:32:::0;;;37270:17:::1;:34:::0;;;37315:15:::1;:30:::0;;;37356:16:::1;:32:::0;;;37399:11:::1;:22:::0;;;37441:13:::1;:30:::0;;;37482:12:::1;:28:::0;;;37521:11:::1;:26:::0;;;37558:12:::1;:28:::0;;;37597:7:::1;:18:::0;;;37637:60:::1;37413:8:::0;37637:47:::1;37375:13:::0;37637:47;37246:13;37333:12;37637:16:::1;:29::i;:60::-;37626:8;:71:::0;-1:-1:-1;;;;;;36666:1039:0:o;21063:269::-;21156:4;21173:129;359:10;21196:7;21205:96;21244:15;21205:96;;;;;;;;;;;;;;;;;359:10;21205:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21205:34:0;;;;;;;;;;;;:38;:96::i;20021:167::-;20099:4;20116:42;359:10;20140:9;20151:6;20116:9;:42::i;18425:354::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;18489:11:::1;::::0;::::1;;18488:12;18480:21;;;::::0;::::1;;18512:11;:18:::0;;-1:-1:-1;;18512:18:0::1;18526:4;18512:18;::::0;;18541:32:::1;18567:4;18541:17;:32::i;:::-;18602:13;::::0;18584:32:::1;::::0;-1:-1:-1;;;;;18602:13:0::1;18584:17;:32::i;:::-;18632:11;::::0;::::1;;:35:::0;::::1;;;-1:-1:-1::0;18647:15:0::1;::::0;:20;18632:35:::1;18629:143;;;18701:12;18683:15;:30:::0;18745:15:::1;18728:14;:32:::0;18629:143:::1;18425:354::o:0;35053:110::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35120:27:0::1;35150:5;35120:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35120:35:0::1;::::0;;35053:110::o;18904:523::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;18977:29:::1;19028:9;18977:61;;19049:16;19086:10;-1:-1:-1::0;;;;;19086:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19068:47:0::1;;19124:4;19131:10;-1:-1:-1::0;;;;;19131:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19068:81;::::0;-1:-1:-1;;;;;;19068:81:0::1;::::0;;;;;;-1:-1:-1;;;;;8419:15:1;;;19068:81:0::1;::::0;::::1;8401:34:1::0;8471:15;;8451:18;;;8444:43;8336:18;;19068:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19049:100:::0;-1:-1:-1;;;;;;19164:22:0;::::1;19160:221;;19237:10;-1:-1:-1::0;;;;;19237:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19219:50:0::1;;19278:4;19285:10;-1:-1:-1::0;;;;;19285:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19219:84;::::0;-1:-1:-1;;;;;;19219:84:0::1;::::0;;;;;;-1:-1:-1;;;;;8419:15:1;;;19219:84:0::1;::::0;::::1;8401:34:1::0;8471:15;;8451:18;;;8444:43;8336:18;;19219:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19203:13;:100:::0;;-1:-1:-1;;;;;;19203:100:0::1;-1:-1:-1::0;;;;;19203:100:0;;;::::1;::::0;;;::::1;::::0;;19160:221:::1;;;19345:13;:24:::0;;-1:-1:-1;;;;;;19345:24:0::1;-1:-1:-1::0;;;;;19345:24:0;::::1;;::::0;;19160:221:::1;-1:-1:-1::0;19391:15:0::1;:28:::0;;-1:-1:-1;;;;;;19391:28:0::1;-1:-1:-1::0;;;;;19391:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;18904:523:0:o;35175:111::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;35247:9:::1;:31:::0;;-1:-1:-1;;;;;;35247:31:0::1;-1:-1:-1::0;;;;;35247:31:0;;;::::1;::::0;;;::::1;::::0;;35175:111::o;34722:112::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34792:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34792:34:0::1;34822:4;34792:34;::::0;;34722:112::o;5964:244::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6053:22:0;::::1;6045:73;;;::::0;-1:-1:-1;;;6045:73:0;;11441:2:1;6045:73:0::1;::::0;::::1;11423:21:1::0;11480:2;11460:18;;;11453:30;11519:34;11499:18;;;11492:62;-1:-1:-1;;;11570:18:1;;;11563:36;11616:19;;6045:73:0::1;11413:228:1::0;6045:73:0::1;6155:6;::::0;;6134:38:::1;::::0;-1:-1:-1;;;;;6134:38:0;;::::1;::::0;6155:6;::::1;::::0;6134:38:::1;::::0;::::1;6183:6;:17:::0;;-1:-1:-1;;;;;;6183:17:0::1;-1:-1:-1::0;;;;;6183:17:0;;;::::1;::::0;;;::::1;::::0;;5964:244::o;36369:289::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;36569:16:::1;36549;36539:7;;:26;;;;:::i;:::-;36538:47;;;;:::i;:::-;36522:13;:63:::0;36610:7:::1;::::0;36637:13;;36610:23:::1;::::0;36620:13;;36610:23:::1;:::i;:::-;36609:41;;;;:::i;:::-;36596:10;:54:::0;-1:-1:-1;;;;36369:289:0:o;38497:153::-;5717:6;;-1:-1:-1;;;;;5717:6:0;359:10;5717:22;5709:67;;;;-1:-1:-1;;;5709:67:0;;;;;;;:::i;:::-;38585:10:::1;38574:7;:21;;38566:30;;;::::0;::::1;;38620:16;:7:::0;38630:6:::1;38620:16;:::i;:::-;38607:10;:29:::0;-1:-1:-1;38497:153:0:o;2122:132::-;2180:7;2207:39;2211:1;2214;2207:39;;;;;;;;;;;;;;;;;:3;:39::i;1862:250::-;1920:7;1944:6;1940:47;;-1:-1:-1;1974:1:0;1967:8;;1940:47;1999:9;2011:5;2015:1;2011;:5;:::i;:::-;1999:17;-1:-1:-1;2044:1:0;2035:5;2039:1;1999:17;2035:5;:::i;:::-;:10;2027:56;;;;-1:-1:-1;;;2027:56:0;;13679:2:1;2027:56:0;;;13661:21:1;13718:2;13698:18;;;13691:30;13757:34;13737:18;;;13730:62;-1:-1:-1;;;13808:18:1;;;13801:31;13849:19;;2027:56:0;13651:223:1;1329:181:0;1387:7;;1419:5;1423:1;1419;:5;:::i;:::-;1407:17;;1448:1;1443;:6;;1435:46;;;;-1:-1:-1;;;1435:46:0;;12251:2:1;1435:46:0;;;12233:21:1;12290:2;12270:18;;;12263:30;12329:29;12309:18;;;12302:57;12376:18;;1435:46:0;12223:177:1;23030:337:0;-1:-1:-1;;;;;23123:19:0;;23115:68;;;;-1:-1:-1;;;23115:68:0;;15258:2:1;23115:68:0;;;15240:21:1;15297:2;15277:18;;;15270:30;15336:34;15316:18;;;15309:62;-1:-1:-1;;;15387:18:1;;;15380:34;15431:19;;23115:68:0;15230:226:1;23115:68:0;-1:-1:-1;;;;;23202:21:0;;23194:68;;;;-1:-1:-1;;;23194:68:0;;11848:2:1;23194:68:0;;;11830:21:1;11887:2;11867:18;;;11860:30;11926:34;11906:18;;;11899:62;-1:-1:-1;;;11977:18:1;;;11970:32;12019:19;;23194:68:0;11820:224:1;23194:68:0;-1:-1:-1;;;;;23275:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23327:32;;16313:25:1;;;23327:32:0;;16286:18:1;23327:32:0;;;;;;;23030:337;;;:::o;23375:3589::-;-1:-1:-1;;;;;23497:18:0;;23489:68;;;;-1:-1:-1;;;23489:68:0;;14852:2:1;23489:68:0;;;14834:21:1;14891:2;14871:18;;;14864:30;14930:34;14910:18;;;14903:62;-1:-1:-1;;;14981:18:1;;;14974:35;15026:19;;23489:68:0;14824:227:1;23489:68:0;-1:-1:-1;;;;;23576:16:0;;23568:64;;;;-1:-1:-1;;;23568:64:0;;10626:2:1;23568:64:0;;;10608:21:1;10665:2;10645:18;;;10638:30;10704:34;10684:18;;;10677:62;-1:-1:-1;;;10755:18:1;;;10748:33;10798:19;;23568:64:0;10598:225:1;23568:64:0;23660:1;23651:6;:10;23643:64;;;;-1:-1:-1;;;23643:64:0;;14442:2:1;23643:64:0;;;14424:21:1;14481:2;14461:18;;;14454:30;14520:34;14500:18;;;14493:62;-1:-1:-1;;;14571:18:1;;;14564:39;14620:19;;23643:64:0;14414:231:1;23643:64:0;-1:-1:-1;;;;;23727:13:0;;;;;;:9;:13;;;;;;;;23726:14;23718:54;;;;-1:-1:-1;;;23718:54:0;;12963:2:1;23718:54:0;;;12945:21:1;13002:2;12982:18;;;12975:30;13041:29;13021:18;;;13014:57;13088:18;;23718:54:0;12935:177:1;23718:54:0;-1:-1:-1;;;;;23792:15:0;;;;;;:9;:15;;;;;;;;23791:16;23783:56;;;;-1:-1:-1;;;23783:56:0;;12963:2:1;23783:56:0;;;12945:21:1;13002:2;12982:18;;;12975:30;13041:29;13021:18;;;13014:57;13088:18;;23783:56:0;12935:177:1;23783:56:0;5621:7;5648:6;-1:-1:-1;;;;;23854:15:0;;;5648:6;;23854:15;;;;:32;;-1:-1:-1;5621:7:0;5648:6;-1:-1:-1;;;;;23873:13:0;;;5648:6;;23873:13;;23854:32;23850:86;;;23896:11;;;;23888:48;;;;-1:-1:-1;;;23888:48:0;;15663:2:1;23888:48:0;;;15645:21:1;15702:2;15682:18;;;15675:30;15741:26;15721:18;;;15714:54;15785:18;;23888:48:0;15635:174:1;23888:48:0;-1:-1:-1;;;;;24019:24:0;;23980:12;24019:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;24047:22:0;;;;;;:18;:22;;;;;;;;24019:50;24013:100;;-1:-1:-1;24097:4:0;24013:100;24141:8;;24125:15;:24;24174:17;;24160:13;:31;-1:-1:-1;;;;;24238:22:0;;-1:-1:-1;24238:22:0;;;:18;:22;;;;;;;;24237:23;:42;;;;-1:-1:-1;5621:7:0;5648:6;-1:-1:-1;;;;;24264:15:0;;;5648:6;;24264:15;;24237:42;:67;;;;-1:-1:-1;24291:13:0;;-1:-1:-1;;;;;24283:21:0;;;24291:13;;24283:21;24237:67;24234:739;;;24323:14;;;;;;;24320:642;;;24452:15;;24435:13;24445:2;24435:9;:13::i;:::-;24426:22;;:6;:22;:::i;:::-;:41;;24418:79;;;;-1:-1:-1;;;24418:79:0;;16016:2:1;24418:79:0;;;15998:21:1;16055:2;16035:18;;;16028:30;-1:-1:-1;;;16074:18:1;;;16067:54;16138:18;;24418:79:0;15988:174:1;24418:79:0;24320:642;;;24590:21;24614:99;24701:11;;24614:82;24679:16;;24614:60;24658:15;;24614:39;24636:16;;24614:17;;:21;;:39;;;;:::i;:99::-;24590:123;-1:-1:-1;24753:3:0;24791:29;24753:3;24590:123;24791:14;:29::i;:::-;24775:45;;24901:15;;24884:13;24894:2;24884:9;:13::i;:::-;24847:34;24877:3;24847:25;:6;24858:13;24847:10;:25::i;:::-;:29;;:34::i;:::-;:50;;;;:::i;:::-;:69;;24839:107;;;;-1:-1:-1;;;24839:107:0;;16016:2:1;24839:107:0;;;15998:21:1;16055:2;16035:18;;;16028:30;-1:-1:-1;;;16074:18:1;;;16067:54;16138:18;;24839:107:0;15988:174:1;24839:107:0;24320:642;;;24996:11;;;;:34;;;;-1:-1:-1;25017:13:0;;-1:-1:-1;;;;;25011:19:0;;;25017:13;;25011:19;24996:34;24993:1119;;;25070:18;;25054:13;:34;25109:19;;;;25105:424;;;25171:15;;:43;;-1:-1:-1;;;25171:43:0;;25149:19;;-1:-1:-1;;;;;25171:15:0;;:29;;:43;;25201:6;;25209:4;;25171:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25171:43:0;;;;;;;;;;;;:::i;:::-;25215:1;25171:46;;;;;;-1:-1:-1;;;25171:46:0;;;;;;;;;;;;;;;25149:68;;25258:14;;25275:8;25258:25;;;;:::i;:::-;25239:15;:44;25236:278;;25331:17;;25316:11;:32;;25308:41;;;;;;25236:278;;;25450:10;;25435:11;:25;;25427:34;;;;;;25105:424;;25626:14;;:24;;25643:7;25626:24;:::i;:::-;25607:15;:43;25604:497;;25689:2;25671:15;:20;25604:497;;;25741:14;;:25;;25758:8;25741:25;:::i;:::-;25722:15;:44;25718:383;;25805:2;25787:15;:20;25718:383;;;25857:14;;:25;;25874:8;25857:25;:::i;:::-;25838:15;:44;25834:267;;25921:2;25903:15;:20;25834:267;;;25986:80;26053:12;;25986:62;26030:17;;25986:39;26008:16;;25986:17;;:21;;:39;;;;:::i;:80::-;25968:15;:98;25834:267;26184:1;26166:15;;:19;:71;;;;;26224:12;26209:10;;26191:15;;:28;;;;:::i;:::-;26190:46;;26166:71;26163:124;;;-1:-1:-1;;;;;26257:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;26257:18:0;26271:4;26257:18;;;26163:124;26327:14;;;;;;;26324:143;;;26361:11;;;;:36;;;;-1:-1:-1;26384:13:0;;-1:-1:-1;;;;;26376:21:0;;;26384:13;;26376:21;26361:36;26358:98;;;26438:1;26422:15;:17;26358:98;26500:6;;-1:-1:-1;;;26500:6:0;;;;26499:7;:22;;;;-1:-1:-1;26510:11:0;;;;26499:22;:45;;;;-1:-1:-1;26531:13:0;;-1:-1:-1;;;;;26525:19:0;;;26531:13;;26525:19;26499:45;26495:413;;;26565:28;26596:24;26614:4;26596:9;:24::i;:::-;26565:55;;26674:13;;26650:20;:37;26646:245;;26735:10;;26711:20;:34;26708:117;;-1:-1:-1;26794:10:0;;26708:117;26843:32;26854:20;26843:10;:32::i;:::-;26495:413;;26918:38;26933:4;26938:2;26941:6;26948:7;26918:14;:38::i;1662:192::-;1748:7;1784:12;1776:6;;;;1768:29;;;;-1:-1:-1;;;1768:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1808:9:0;1820:5;1824:1;1820;:5;:::i;:::-;1808:17;1662:192;-1:-1:-1;;;;;1662:192:0:o;33307:163::-;33348:7;33369:15;33386;33405:19;:17;:19::i;:::-;33368:56;;-1:-1:-1;33368:56:0;-1:-1:-1;33442:20:0;33368:56;;33442:11;:20::i;:::-;33435:27;;;;33307:163;:::o;32105:419::-;32164:7;32173;32182;32191;32200;32209;32230:23;32255:12;32269:18;32291:20;32303:7;32291:11;:20::i;:::-;32229:82;;;;;;32323:15;32340:23;32365:12;32381:50;32393:7;32402:4;32408:10;32420;:8;:10::i;:::-;32381:11;:50::i;:::-;32322:109;;;;-1:-1:-1;32322:109:0;;-1:-1:-1;32482:15:0;;-1:-1:-1;32499:4:0;;-1:-1:-1;32505:10:0;;-1:-1:-1;32105:419:0;;-1:-1:-1;;;;;32105:419:0:o;2262:278::-;2348:7;2383:12;2376:5;2368:28;;;;-1:-1:-1;;;2368:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2407:9:0;2419:5;2423:1;2419;:5;:::i;1518:136::-;1576:7;1603:43;1607:1;1610;1603:43;;;;;;;;;;;;;;;;;:3;:43::i;26972:945::-;17405:6;:13;;-1:-1:-1;;;;17405:13:0;-1:-1:-1;;;17405:13:0;;;27129:8:::1;::::0;27111:12:::1;::::0;17405:13;;27086:59:::1;::::0;27143:1:::1;::::0;27086:52:::1;::::0;;;:20;;:24:::1;:38::i;:59::-;27060:85:::0;-1:-1:-1;27156:20:0::1;27179:41;:20:::0;27060:85;27179:24:::1;:41::i;:::-;27156:64;;27238:30;27255:12;27238:16;:30::i;:::-;27366:12;::::0;27299:21:::1;::::0;27279:17:::1;::::0;27353:33:::1;::::0;27366:19:::1;::::0;27383:1:::1;27366:16;:19::i;:::-;27353:8;::::0;;:12:::1;:33::i;:::-;27331:55;;27397:26;27426:51;27475:1;27426:44;27458:11;27426:27;27440:12;;27426:9;:13;;:27;;;;:::i;:51::-;27397:80;;27492:19;27514:42;27548:7;;27514:29;27530:12;;27514:11;;:15;;:29;;;;:::i;:42::-;27492:64:::0;-1:-1:-1;27568:20:0::1;27591:43;27622:11:::0;27591:26:::1;:9:::0;27492:64;27591:13:::1;:26::i;:43::-;27568:66:::0;-1:-1:-1;27674:21:0::1;27709:22:::0;;27706:90:::1;;27774:9;::::0;27748:36:::1;::::0;27761:12;;-1:-1:-1;;;;;27774:9:0::1;27748:12;:36::i;:::-;27810:19:::0;;27806:104:::1;;27850:48;27863:15;27879:18;27850:12;:48::i;:::-;-1:-1:-1::0;;17441:6:0;:14;;-1:-1:-1;;;;17441:14:0;;;-1:-1:-1;;;;;;;26972:945:0:o;28667:947::-;28807:13;;28857:15;;28887:7;28883:90;;28926:1;28910:13;:17;;;28942:15;:19;28883:90;-1:-1:-1;;;;;28997:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;29021:22:0;;;;;;:11;:22;;;;;;;;29020:23;28997:46;28993:467;;;29060:48;29082:6;29090:9;29101:6;29060:21;:48::i;:::-;28993:467;;;-1:-1:-1;;;;;29131:19:0;;;;;;:11;:19;;;;;;;;29130:20;:46;;;;-1:-1:-1;;;;;;29154:22:0;;;;;;:11;:22;;;;;;;;29130:46;29126:334;;;29193:46;29213:6;29221:9;29232:6;29193:19;:46::i;29126:334::-;-1:-1:-1;;;;;29261:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;29284:22:0;;;;;;:11;:22;;;;;;;;29261:45;29257:203;;;29323:48;29345:6;29353:9;29364:6;29323:21;:48::i;29257:203::-;29404:44;29422:6;29430:9;29441:6;29404:17;:44::i;:::-;29484:7;29480:127;;29507:13;:38;;;29560:15;:35;;;29480:127;28667:947;;;;;;:::o;33478:561::-;33575:7;;33611;;33528;;;;;33635:289;33659:9;:16;33655:20;;33635:289;;;33725:7;33701;:21;33709:9;33719:1;33709:12;;;;;;-1:-1:-1;;;33709:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33709:12:0;33701:21;;;;;;;;;;;;;:31;;:66;;;33760:7;33736;:21;33744:9;33754:1;33744:12;;;;;;-1:-1:-1;;;33744:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33744:12:0;33736:21;;;;;;;;;;;;;:31;33701:66;33697:97;;;33777:7;;33786;;33769:25;;;;;;;33478:561;;:::o;33697:97::-;33819:34;33831:7;:21;33839:9;33849:1;33839:12;;;;;;-1:-1:-1;;;33839:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33839:12:0;33831:21;;;;;;;;;;;;;33819:7;;:11;:34::i;:::-;33809:44;;33878:34;33890:7;:21;33898:9;33908:1;33898:12;;;;;;-1:-1:-1;;;33898:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33898:12:0;33890:21;;;;;;;;;;;;;33878:7;;:11;:34::i;:::-;33868:44;-1:-1:-1;33677:3:0;;;;:::i;:::-;;;;33635:289;;;-1:-1:-1;33960:7:0;;33948;;:20;;:11;:20::i;:::-;33938:7;:30;33934:61;;;33978:7;;33987;;33970:25;;;;;;33478:561;;:::o;33934:61::-;34014:7;;34023;;-1:-1:-1;33478:561:0;-1:-1:-1;33478:561:0:o;32532:330::-;32592:7;32601;32610;32630:12;32645:24;32661:7;32645:15;:24::i;:::-;32630:39;;32680:18;32701:30;32723:7;32701:21;:30::i;:::-;32680:51;-1:-1:-1;32742:23:0;32768:33;32680:51;32768:17;:7;32780:4;32768:11;:17::i;:::-;:21;;:33::i;:::-;32742:59;32837:4;;-1:-1:-1;32843:10:0;;-1:-1:-1;32532:330:0;;-1:-1:-1;;;32532:330:0:o;32870:429::-;32985:7;;;;33041:24;:7;33053:11;33041;:24::i;:::-;33023:42;-1:-1:-1;33076:12:0;33091:21;:4;33100:11;33091:8;:21::i;:::-;33076:36;-1:-1:-1;33123:18:0;33144:27;:10;33159:11;33144:14;:27::i;:::-;33123:48;-1:-1:-1;33182:23:0;33208:33;33123:48;33208:17;:7;33220:4;33208:11;:17::i;:33::-;33260:7;;;;-1:-1:-1;33286:4:0;;-1:-1:-1;32870:429:0;;-1:-1:-1;;;;;;;32870:429:0:o;28052:324::-;28150:15;;28118:62;;28135:4;;-1:-1:-1;;;;;28150:15:0;28168:11;28118:8;:62::i;:::-;28191:15;;:120;;-1:-1:-1;;;28191:120:0;;-1:-1:-1;;;;;28191:15:0;;;;:66;;:120;;28258:11;;28191:15;;28274:4;;28288;;28295:15;;28191:120;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28333:35;28350:11;28363:4;28333:35;;;;;;;:::i;:::-;;;;;;;;28052:324;:::o;27929:111::-;28009:23;;-1:-1:-1;;;;;28009:15:0;;;:23;;;;;28025:6;;28009:23;;;;28025:6;28009:15;:23;;;;;;;;;;;;;;;;;;;28388:271;28501:15;;28469:62;;28486:4;;-1:-1:-1;;;;;28501:15:0;28519:11;28469:8;:62::i;:::-;28542:15;;-1:-1:-1;;;;;28542:15:0;:31;28581:9;28600:4;28607:11;28542:15;;28626:7;5621;5648:6;-1:-1:-1;;;;;5648:6:0;;5583:79;28626:7;28542:109;;;;;;-1:-1:-1;;;;;;28542:109:0;;;-1:-1:-1;;;;;9136:15:1;;;28542:109:0;;;9118:34:1;9168:18;;;9161:34;;;;9211:18;;;9204:34;;;;9254:18;;;9247:34;9318:15;;;9297:19;;;9290:44;28635:15:0;9350:19:1;;;9343:35;9052:19;;28542:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28388:271;;:::o;30726:566::-;30829:15;30846:23;30871:12;30885:23;30910:12;30924:18;30946:19;30957:7;30946:10;:19::i;:::-;-1:-1:-1;;;;;30994:15:0;;;;;;:7;:15;;;;;;30828:137;;-1:-1:-1;30828:137:0;;-1:-1:-1;30828:137:0;;-1:-1:-1;30828:137:0;-1:-1:-1;30828:137:0;-1:-1:-1;30828:137:0;-1:-1:-1;30994:28:0;;31014:7;30994:19;:28::i;:::-;-1:-1:-1;;;;;30976:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31051:7;:15;;;;:28;;31071:7;31051:19;:28::i;:::-;-1:-1:-1;;;;;31033:15:0;;;;;;;:7;:15;;;;;;:46;;;;31111:18;;;;;;;:39;;31134:15;31111:22;:39::i;:::-;-1:-1:-1;;;;;31090:18:0;;;;;;:7;:18;;;;;:60;31164:26;31179:10;31164:14;:26::i;:::-;31201:23;31213:4;31219;31201:11;:23::i;:::-;31257:9;-1:-1:-1;;;;;31240:44:0;31249:6;-1:-1:-1;;;;;31240:44:0;;31268:15;31240:44;;;;16313:25:1;;16301:2;16286:18;;16268:76;31240:44:0;;;;;;;;30726:566;;;;;;;;;:::o;30132:586::-;30233:15;30250:23;30275:12;30289:23;30314:12;30328:18;30350:19;30361:7;30350:10;:19::i;:::-;-1:-1:-1;;;;;30398:15:0;;;;;;:7;:15;;;;;;30232:137;;-1:-1:-1;30232:137:0;;-1:-1:-1;30232:137:0;;-1:-1:-1;30232:137:0;-1:-1:-1;30232:137:0;-1:-1:-1;30232:137:0;-1:-1:-1;30398:28:0;;30232:137;30398:19;:28::i;:::-;-1:-1:-1;;;;;30380:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30458:18;;;;;:7;:18;;;;;:39;;30481:15;30458:22;:39::i;:::-;-1:-1:-1;;;;;30437:18:0;;;;;;:7;:18;;;;;;;;:60;;;;30529:7;:18;;;;:39;;30552:15;30529:22;:39::i;31300:642::-;31403:15;31420:23;31445:12;31459:23;31484:12;31498:18;31520:19;31531:7;31520:10;:19::i;:::-;-1:-1:-1;;;;;31568:15:0;;;;;;:7;:15;;;;;;31402:137;;-1:-1:-1;31402:137:0;;-1:-1:-1;31402:137:0;;-1:-1:-1;31402:137:0;-1:-1:-1;31402:137:0;-1:-1:-1;31402:137:0;-1:-1:-1;31568:28:0;;31588:7;31568:19;:28::i;:::-;-1:-1:-1;;;;;31550:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31625:7;:15;;;;:28;;31645:7;31625:19;:28::i;29622:502::-;29721:15;29738:23;29763:12;29777:23;29802:12;29816:18;29838:19;29849:7;29838:10;:19::i;:::-;-1:-1:-1;;;;;29886:15:0;;;;;;:7;:15;;;;;;29720:137;;-1:-1:-1;29720:137:0;;-1:-1:-1;29720:137:0;;-1:-1:-1;29720:137:0;-1:-1:-1;29720:137:0;-1:-1:-1;29720:137:0;-1:-1:-1;29886:28:0;;29720:137;29886:19;:28::i;34418:136::-;34482:7;34509:37;34540:5;34509:26;34521:13;;34509:7;:11;;:26;;;;:::i;34566:144::-;34636:7;34663:39;34696:5;34663:28;34675:15;;34663:7;:11;;:28;;;;:::i;34051:355::-;34114:19;34137:10;:8;:10::i;:::-;34114:33;-1:-1:-1;34158:18:0;34179:27;:10;34114:33;34179:14;:27::i;:::-;34258:4;34242:22;;;;:7;:22;;;;;;34158:48;;-1:-1:-1;34242:38:0;;34158:48;34242:26;:38::i;:::-;34233:4;34217:22;;;;:7;:22;;;;;;;;:63;;;;34294:11;:26;;;;;;34291:107;;;34376:4;34360:22;;;;:7;:22;;;;;;:38;;34387:10;34360:26;:38::i;:::-;34351:4;34335:22;;;;:7;:22;;;;;:63;34051:355;;;:::o;31950:147::-;32028:7;;:17;;32040:4;32028:11;:17::i;:::-;32018:7;:27;32069:10;;:20;;32084:4;32069:14;:20::i;:::-;32056:10;:33;-1:-1:-1;;31950:147:0:o;14:395:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:2;;166:8;156;149:26;108:2;-1:-1:-1;196:20:1;;239:18;228:30;;225:2;;;278:8;268;261:26;225:2;322:4;314:6;310:17;298:29;;382:3;375:4;365:6;362:1;358:14;350:6;346:27;342:38;339:47;336:2;;;399:1;396;389:12;336:2;98:311;;;;;:::o;414:257::-;473:6;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;591:9;578:23;610:31;635:5;610:31;:::i;676:261::-;746:6;799:2;787:9;778:7;774:23;770:32;767:2;;;820:6;812;805:22;767:2;857:9;851:16;876:31;901:5;876:31;:::i;1212:398::-;1280:6;1288;1341:2;1329:9;1320:7;1316:23;1312:32;1309:2;;;1362:6;1354;1347:22;1309:2;1406:9;1393:23;1425:31;1450:5;1425:31;:::i;:::-;1475:5;-1:-1:-1;1532:2:1;1517:18;;1504:32;1545:33;1504:32;1545:33;:::i;:::-;1597:7;1587:17;;;1299:311;;;;;:::o;1615:466::-;1692:6;1700;1708;1761:2;1749:9;1740:7;1736:23;1732:32;1729:2;;;1782:6;1774;1767:22;1729:2;1826:9;1813:23;1845:31;1870:5;1845:31;:::i;:::-;1895:5;-1:-1:-1;1952:2:1;1937:18;;1924:32;1965:33;1924:32;1965:33;:::i;:::-;1719:362;;2017:7;;-1:-1:-1;;;2071:2:1;2056:18;;;;2043:32;;1719:362::o;2086:325::-;2154:6;2162;2215:2;2203:9;2194:7;2190:23;2186:32;2183:2;;;2236:6;2228;2221:22;2183:2;2280:9;2267:23;2299:31;2324:5;2299:31;:::i;:::-;2349:5;2401:2;2386:18;;;;2373:32;;-1:-1:-1;;;2173:238:1:o;2416:457::-;2502:6;2510;2563:2;2551:9;2542:7;2538:23;2534:32;2531:2;;;2584:6;2576;2569:22;2531:2;2629:9;2616:23;2662:18;2654:6;2651:30;2648:2;;;2699:6;2691;2684:22;2648:2;2743:70;2805:7;2796:6;2785:9;2781:22;2743:70;:::i;:::-;2832:8;;2717:96;;-1:-1:-1;2521:352:1;-1:-1:-1;;;;2521:352:1:o;2878:586::-;2970:6;2978;2986;3039:2;3027:9;3018:7;3014:23;3010:32;3007:2;;;3060:6;3052;3045:22;3007:2;3105:9;3092:23;3138:18;3130:6;3127:30;3124:2;;;3175:6;3167;3160:22;3124:2;3219:70;3281:7;3272:6;3261:9;3257:22;3219:70;:::i;:::-;3308:8;;-1:-1:-1;3193:96:1;-1:-1:-1;;3393:2:1;3378:18;;3365:32;3406:28;3365:32;3406:28;:::i;:::-;3453:5;3443:15;;;2997:467;;;;;:::o;3469:1161::-;3564:6;3595:2;3638;3626:9;3617:7;3613:23;3609:32;3606:2;;;3659:6;3651;3644:22;3606:2;3697:9;3691:16;3726:18;3767:2;3759:6;3756:14;3753:2;;;3788:6;3780;3773:22;3753:2;3831:6;3820:9;3816:22;3806:32;;3876:7;3869:4;3865:2;3861:13;3857:27;3847:2;;3903:6;3895;3888:22;3847:2;3937;3931:9;3959:2;3955;3952:10;3949:2;;;3965:18;;:::i;:::-;4011:2;4008:1;4004:10;4043:2;4037:9;4106:2;4102:7;4097:2;4093;4089:11;4085:25;4077:6;4073:38;4161:6;4149:10;4146:22;4141:2;4129:10;4126:18;4123:46;4120:2;;;4172:18;;:::i;:::-;4208:2;4201:22;4258:18;;;4292:15;;;;-1:-1:-1;4327:11:1;;;4357;;;4353:20;;4350:33;-1:-1:-1;4347:2:1;;;4401:6;4393;4386:22;4347:2;4428:6;4419:15;;4443:156;4457:2;4454:1;4451:9;4443:156;;;4514:10;;4502:23;;4475:1;4468:9;;;;;4545:12;;;;4577;;4443:156;;;-1:-1:-1;4618:6:1;3575:1055;-1:-1:-1;;;;;;;;3575:1055:1:o;4635:251::-;4691:6;4744:2;4732:9;4723:7;4719:23;4715:32;4712:2;;;4765:6;4757;4750:22;4712:2;4809:9;4796:23;4828:28;4850:5;4828:28;:::i;4891:255::-;4958:6;5011:2;4999:9;4990:7;4986:23;4982:32;4979:2;;;5032:6;5024;5017:22;4979:2;5069:9;5063:16;5088:28;5110:5;5088:28;:::i;5151:411::-;5232:6;5240;5293:2;5281:9;5272:7;5268:23;5264:32;5261:2;;;5314:6;5306;5299:22;5567:190;5626:6;5679:2;5667:9;5658:7;5654:23;5650:32;5647:2;;;5700:6;5692;5685:22;5647:2;-1:-1:-1;5728:23:1;;5637:120;-1:-1:-1;5637:120:1:o;5762:194::-;5832:6;5885:2;5873:9;5864:7;5860:23;5856:32;5853:2;;;5906:6;5898;5891:22;5853:2;-1:-1:-1;5934:16:1;;5843:113;-1:-1:-1;5843:113:1:o;5961:319::-;6026:6;6034;6087:2;6075:9;6066:7;6062:23;6058:32;6055:2;;;6108:6;6100;6093:22;6055:2;6149:9;6136:23;6126:33;;6209:2;6198:9;6194:18;6181:32;6222:28;6244:5;6222:28;:::i;6285:316::-;6373:6;6381;6389;6442:2;6430:9;6421:7;6417:23;6413:32;6410:2;;;6463:6;6455;6448:22;6410:2;6497:9;6491:16;6481:26;;6547:2;6536:9;6532:18;6526:25;6516:35;;6591:2;6580:9;6576:18;6570:25;6560:35;;6400:201;;;;;:::o;6606:395::-;6692:6;6700;6708;6716;6769:3;6757:9;6748:7;6744:23;6740:33;6737:2;;;6791:6;6783;6776:22;6737:2;-1:-1:-1;;6819:23:1;;;6889:2;6874:18;;6861:32;;-1:-1:-1;6940:2:1;6925:18;;6912:32;;6991:2;6976:18;6963:32;;-1:-1:-1;6727:274:1;-1:-1:-1;6727:274:1:o;7006:464::-;7101:6;7109;7117;7125;7133;7186:3;7174:9;7165:7;7161:23;7157:33;7154:2;;;7208:6;7200;7193:22;7154:2;-1:-1:-1;;7236:23:1;;;7306:2;7291:18;;7278:32;;-1:-1:-1;7357:2:1;7342:18;;7329:32;;7408:2;7393:18;;7380:32;;-1:-1:-1;7459:3:1;7444:19;7431:33;;-1:-1:-1;7144:326:1;-1:-1:-1;7144:326:1:o;7475:501::-;7536:3;7574:5;7568:12;7601:6;7596:3;7589:19;7627:4;7656:2;7651:3;7647:12;7640:19;;7680:5;7675:3;7668:18;7724:2;7719:3;7709:18;7745:3;7757:194;7771:6;7768:1;7765:13;7757:194;;;7836:13;;-1:-1:-1;;;;;7832:39:1;7820:52;;7892:12;;;;7868:1;7927:14;;;;7786:9;7757:194;;;-1:-1:-1;7967:3:1;;7544:432;-1:-1:-1;;;;;7544:432:1:o;9816:603::-;9928:4;9957:2;9986;9975:9;9968:21;10018:6;10012:13;10061:6;10056:2;10045:9;10041:18;10034:34;10086:4;10099:140;10113:6;10110:1;10107:13;10099:140;;;10208:14;;;10204:23;;10198:30;10174:17;;;10193:2;10170:26;10163:66;10128:10;;10099:140;;;10257:6;10254:1;10251:13;10248:2;;;10327:4;10322:2;10313:6;10302:9;10298:22;10294:31;10287:45;10248:2;-1:-1:-1;10403:2:1;10382:15;-1:-1:-1;;10378:29:1;10363:45;;;;10410:2;10359:54;;9937:482;-1:-1:-1;;;9937:482:1:o;13879:356::-;14081:2;14063:21;;;14100:18;;;14093:30;14159:34;14154:2;14139:18;;14132:62;14226:2;14211:18;;14053:182::o;16349:337::-;16553:6;16542:9;16535:25;16596:2;16591;16580:9;16576:18;16569:30;16516:4;16616:64;16676:2;16665:9;16661:18;16653:6;16616:64;:::i;:::-;16608:72;16525:161;-1:-1:-1;;;;16525:161:1:o;16691:587::-;16987:6;16976:9;16969:25;17030:6;17025:2;17014:9;17010:18;17003:34;17073:3;17068:2;17057:9;17053:18;17046:31;16950:4;17094:65;17154:3;17143:9;17139:19;17131:6;17094:65;:::i;:::-;-1:-1:-1;;;;;17195:32:1;;;;17190:2;17175:18;;17168:60;-1:-1:-1;17259:3:1;17244:19;17237:35;17086:73;16959:319;-1:-1:-1;;;16959:319:1:o;17940:128::-;17980:3;18011:1;18007:6;18004:1;18001:13;17998:2;;;18017:18;;:::i;:::-;-1:-1:-1;18053:9:1;;17988:80::o;18073:217::-;18113:1;18139;18129:2;;-1:-1:-1;;;18164:31:1;;18218:4;18215:1;18208:15;18246:4;18171:1;18236:15;18129:2;-1:-1:-1;18275:9:1;;18119:171::o;18295:168::-;18335:7;18401:1;18397;18393:6;18389:14;18386:1;18383:21;18378:1;18371:9;18364:17;18360:45;18357:2;;;18408:18;;:::i;:::-;-1:-1:-1;18448:9:1;;18347:116::o;18468:125::-;18508:4;18536:1;18533;18530:8;18527:2;;;18541:18;;:::i;:::-;-1:-1:-1;18578:9:1;;18517:76::o;18598:380::-;18677:1;18673:12;;;;18720;;;18741:2;;18795:4;18787:6;18783:17;18773:27;;18741:2;18848;18840:6;18837:14;18817:18;18814:38;18811:2;;;18894:10;18889:3;18885:20;18882:1;18875:31;18929:4;18926:1;18919:15;18957:4;18954:1;18947:15;18811:2;;18653:325;;;:::o;18983:135::-;19022:3;-1:-1:-1;;19043:17:1;;19040:2;;;19063:18;;:::i;:::-;-1:-1:-1;19110:1:1;19099:13;;19030:88::o;19123:127::-;19184:10;19179:3;19175:20;19172:1;19165:31;19215:4;19212:1;19205:15;19239:4;19236:1;19229:15;19255:127;19316:10;19311:3;19307:20;19304:1;19297:31;19347:4;19344:1;19337:15;19371:4;19368:1;19361:15;19387:131;-1:-1:-1;;;;;19462:31:1;;19452:42;;19442:2;;19508:1;19505;19498:12;19442:2;19432:86;:::o;19523:118::-;19609:5;19602:13;19595:21;19588:5;19585:32;19575:2;;19631:1;19628;19621:12

Swarm Source

ipfs://6209c6c1eaea627b9c1403a1067aa075a88e3a0a950cfe5db9091ea06e74f964
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.