ETH Price: $2,491.72 (+3.10%)

Token

Frank and Beans (FrankBeans)
 

Overview

Max Total Supply

1,000,000,000 FrankBeans

Holders

60

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
14,466,959.030937775 FrankBeans

Value
$0.00
0xc144e0f6961ec09a482833e41d047b7991e5a4b0
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:
FrankandBeans

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-01-20
*/

/**
 *Submitted for verification at Etherscan.io on 2022-01-19
*/

// SPDX-License-Identifier: MIT
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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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;
    }
}

// pragma solidity >=0.5.0;

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


// pragma solidity >=0.5.0;

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

// pragma solidity >=0.6.2;

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



// pragma solidity >=0.6.2;

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 FrankandBeans is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable private marketingWallet = payable(0xb5A6C20731AD950C47d29a5BF11A315CBBDdCafc); // Marketing Wallet
    address payable private ecosystemWallet = payable(0xb5A6C20731AD950C47d29a5BF11A315CBBDdCafc); // Ecosystem Wallet
    address payable private devWallet = payable (0xb5A6C20731AD950C47d29a5BF11A315CBBDdCafc); // dev 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 = 2;
    uint256 public launchedAt = 0;
    

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isMaxWalletExempt;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isTrusted;
    address[] private _excluded;
   
    address DEAD = 0x000000000000000000000000000000000000dEaD;

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

    string private _name = "Frank and Beans";
    string private _symbol = "FrankBeans";
    

    uint256 public _maxWalletToken = _tTotal.div(100).mul(2);

    uint256 public _buyLiquidityFee = 20; //2%
    uint256 public _buyDevFee = 10;     //1% 
    uint256 public _buyMarketingFee = 50;   //5%
    uint256 public _buyReflectionFee = 0;

    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 100;  //10%
    uint256 public _sellDevFee = 20;   //10%
    uint256 public _sellReflectionFee = 0;
    
    uint256 private ecosystemFee = 30;   //3%
    uint256 private liquidityFee = _buyLiquidityFee;
    uint256 private marketingFee = _buyMarketingFee;
    uint256 private devFee = _buyDevFee;
    uint256 private reflectionFee=_buyReflectionFee;


    uint256 private totalFee =
        liquidityFee.add(marketingFee).add(devFee).add(ecosystemFee);
    uint256 private currenttotalFee = totalFee;
    
    uint256 public swapThreshold = _tTotal.div(10000).mul(5); //0.05%
   
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwap;
    
    bool public tradingOpen = false;
    bool public zeroBuyTaxmode = false;
    bool private antiBotmode = true;
    
    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;
        _isTrusted[owner()] = true;
        _isTrusted[uniswapV2Pair] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    
    function openTrading(bool _status,uint256 _deadBlocks) external onlyOwner() {
        tradingOpen = _status;
        excludeFromReward(address(this));
        excludeFromReward(uniswapV2Pair);
        if(tradingOpen && launchedAt == 0){
            launchedAt = block.number;
            deadBlocks = _deadBlocks;
        }
    }

    
    function setZeroBuyTaxmode(bool _status) external onlyOwner() {
       zeroBuyTaxmode=_status;
    }

    function setAntiBotmode(bool _status) external onlyOwner() {
       antiBotmode=_status;
    }
    
    function disableAntiBotmode() external onlyOwner() {
       antiBotmode=false;
       _maxWalletToken = _tTotal.div(1000).mul(2); //0.2% 
       swapTokenswithoutImpact(balanceOf(address(this)));
    }

    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 deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
  

    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[from], "You have no power here!");
        if (from!= owner() && to!= owner()) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading
        
         bool takeFee = false;
        //take fee only on swaps
        if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
            takeFee = true;
        }

        if(launchedAt>0 && (!_isMaxWalletExempt[to] && from!= owner()) && !((launchedAt + deadBlocks) > block.number)){
                require(amount+ balanceOf(to)<=_maxWalletToken,
                    "Total Holding is currently limited");
        }
        

        currenttotalFee=totalFee;
        reflectionFee=_buyReflectionFee;

        if(tradingOpen && to == uniswapV2Pair) { //sell
            currenttotalFee= _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee);
            reflectionFee=_sellReflectionFee;
        }
        
        //antibot - first 2 blocks
        if(launchedAt>0 && (launchedAt + deadBlocks) > block.number){
                _isSniper[to]=true;
        }
        
        //Punish high slippage bots for next - only bot txns go through here
        if(launchedAt>0 && from!= owner() && block.number >= (launchedAt + deadBlocks)  && antiBotmode){
                currenttotalFee=990;    //90%
        }

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

        //sell
        if (!inSwap && tradingOpen && to == uniswapV2Pair) {
      
            uint256 contractTokenBalance = balanceOf(address(this));
            
            if(contractTokenBalance>=swapThreshold){
                    contractTokenBalance = swapThreshold;
                    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 amountETHdev = amountETH.mul(devFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );
         uint256 amountETHEcosystem = amountETH.mul(ecosystemFee).div(
            totalETHFee
        );
        //Send to marketing wallet and dev wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHMarketing,marketingWallet);
            sendETHToFee(amountETHEcosystem,ecosystemWallet);
            sendETHToFee(amountETHdev,devWallet);
        }
        if (amountToLiquify > 0) {
                addLiquidity(amountToLiquify,amountETHLiquidity);
        }
    }
    
    function sendETHToFee(uint256 amount,address payable wallet) private {
        wallet.transfer(amount);
    }
    
    function swapTokenswithoutImpact(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 amountETHdev = amountETH.mul(devFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );

        uint256 amountETHEcosystem = amountETH.mul(ecosystemFee).div(	
            totalETHFee	
        );
         
        //Send to marketing wallet and dev wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHMarketing,marketingWallet);
            sendETHToFee(amountETHEcosystem,ecosystemWallet);
            sendETHToFee(amountETHdev,devWallet);
        }
        if (amountToLiquify > 0) {
                addLiquidity(amountToLiquify,amountETHLiquidity);
        }

        _transfer(uniswapV2Pair,DEAD,contractTokenBalance);
        IUniswapV2Pair(uniswapV2Pair).sync();
        
    }
    

   
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }
    

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            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**3
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(currenttotalFee).div(
            10**3
        );
    }
    
    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 _marketingWallet,address _devWallet) external onlyOwner() {
        marketingWallet = payable(_marketingWallet);
        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) {
            if(!_isTrusted[addresses[i]]){
                _isSniper[addresses[i]] = status;
            }
        }
    }
    
    function manage_trusted(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isTrusted[addresses[i]]=true;
        }
    }
        
    function withDrawLeftoverETH(address payable receipient) public onlyOwner {
        receipient.transfer(address(this).balance);
    }

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

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = _tTotal.div(1000).mul(maxWallPercent_base1000);
    }

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

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

    function distribute_airdrop(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {

        require(addresses.length < 2001,"GAS Error: max airdrop limit is 2000 addresses"); // to prevent overflow

        uint256 SCCC = tokens* 10**_decimals * addresses.length;

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _transfer(from,addresses[i],(tokens* 10**_decimals));
            }
    }

     function setTaxesBuy(uint256 _reflectionFee, uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee,uint256 _ecosystemFee) external onlyOwner {
       
        _buyLiquidityFee = _liquidityFee;
        _buyMarketingFee = _marketingFee;
        _buyDevFee = _devFee;
        _buyReflectionFee= _reflectionFee;

        reflectionFee= _reflectionFee;
        liquidityFee = _liquidityFee;
        devFee = _devFee;
        marketingFee = _marketingFee;
        ecosystemFee=_ecosystemFee;

        totalFee = liquidityFee.add(marketingFee).add(devFee).add(ecosystemFee);

    }

    function setTaxesSell(uint256 _reflectionFee,uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee) external onlyOwner {
        _sellLiquidityFee = _liquidityFee;
        _sellMarketingFee = _marketingFee;
        _sellDevFee = _devFee;
        _sellReflectionFee= _reflectionFee;
    }
    
    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":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","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":[{"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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAntiBotmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"distribute_airdrop","outputs":[],"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":"launchedAt","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":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"manage_trusted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"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":"bool","name":"_status","type":"bool"}],"name":"setAntiBotmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","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"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_ecosystemFee","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"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":"swapThreshold","outputs":[{"internalType":"uint256","name":"","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":"receipient","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"}]

6080604052600380546001600160a01b031990811673b5a6c20731ad950c47d29a5bf11a315cbbddcafc908117909255600480548216831790556005805490911690911790556002600a9081556000600b55601180547409000000000000000000000000000000000000dead6001600160a81b031990911617908190556200009391600160a01b90910460ff169062000912565b620000a390633b9aca00620009d1565b6012819055620000b69060001962000a4a565b620000c490600019620009f3565b60135560408051808201909152600f8082526e4672616e6b20616e64204265616e7360881b6020909201918252620000ff9160159162000772565b5060408051808201909152600a808252694672616e6b4265616e7360b01b6020909201918252620001339160169162000772565b506200016b6002620001576064601254620005f560201b62001ffb1790919060201c565b6200064860201b6200203d1790919060201c565b6017556014601855600a6019556032601a556000601b556000601c556064601d556014601e556000601f55601e602055601854602155601a54602255601954602355601b54602455620001f3602054620001df602354620001df602254602154620006d360201b620020bc1790919060201c565b620006d360201b620020bc1790919060201c565b60255560255460265562000220600562000157612710601254620005f560201b62001ffb1790919060201c565b6027556029805462ffffff60a81b1916600160b81b1790553480156200024557600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506013543360009081526006602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620002e957600080fd5b505afa158015620002fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000324919062000818565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036d57600080fd5b505afa15801562000382573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a8919062000818565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003f157600080fd5b505af115801562000406573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042c919062000818565b602980546001600160a01b03199081166001600160a01b0393841617909155602880549091169183169190911790556001600c6000620004746000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600c909252812080549092166001908117909255600d90620004cd6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d909352818320805485166001908117909155602954821684528284208054861682179055601154909116835290822080549093168117909255600f906200054f6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556029549091168152600f9092529020805490911660011790556200059e3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601254604051620005e691815260200190565b60405180910390a35062000a8d565b60006200063f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200073660201b60201c565b90505b92915050565b600082620006595750600062000642565b6000620006678385620009d1565b905082620006768583620008b2565b146200063f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b600080620006e2838562000897565b9050838110156200063f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006ca565b600081836200075a5760405162461bcd60e51b8152600401620006ca919062000841565b506000620007698486620008b2565b95945050505050565b828054620007809062000a0d565b90600052602060002090601f016020900481019282620007a45760008555620007ef565b82601f10620007bf57805160ff1916838001178555620007ef565b82800160010185558215620007ef579182015b82811115620007ef578251825591602001919060010190620007d2565b50620007fd92915062000801565b5090565b5b80821115620007fd576000815560010162000802565b6000602082840312156200082a578081fd5b81516001600160a01b03811681146200063f578182fd5b6000602080835283518082850152825b818110156200086f5785810183015185820160400152820162000851565b81811115620008815783604083870101525b50601f01601f1916929092016040019392505050565b60008219821115620008ad57620008ad62000a61565b500190565b600082620008c457620008c462000a77565b500490565b600181815b808511156200090a578160001904821115620008ee57620008ee62000a61565b80851615620008fc57918102915b93841c9390800290620008ce565b509250929050565b60006200063f60ff8416836000826200092e5750600162000642565b816200093d5750600062000642565b8160018114620009565760028114620009615762000981565b600191505062000642565b60ff84111562000975576200097562000a61565b50506001821b62000642565b5060208310610133831016604e8410600b8410161715620009a6575081810a62000642565b620009b28383620008c9565b8060001904821115620009c957620009c962000a61565b029392505050565b6000816000190483118215151615620009ee57620009ee62000a61565b500290565b60008282101562000a085762000a0862000a61565b500390565b600181811c9082168062000a2257607f821691505b6020821081141562000a4457634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000a5c5762000a5c62000a77565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b613c8f8062000a9d6000396000f3fe60806040526004361061037a5760003560e01c80636ce37fa0116101d1578063a457c2d711610102578063dc44b6a0116100a0578063f259c57b1161006f578063f259c57b14610a23578063f2fde38b14610a43578063fabb0b4f14610a63578063ffb54a9914610a7957600080fd5b8063dc44b6a014610987578063dd62ed3e1461099d578063ea2f0b37146109e3578063eafb5a3c14610a0357600080fd5b8063c5d24189116100dc578063c5d2418914610925578063c86079521461093b578063c9cf778914610951578063d3f6a1571461096757600080fd5b8063a457c2d7146108cf578063a9059cbb146108ef578063bf56b3711461090f57600080fd5b806384530c461161016f5780638da5cb5b116101495780638da5cb5b1461085c5780638f4590d21461087a57806395d89b411461089a578063a3b84b6b146108af57600080fd5b806384530c46146107ed57806388790a681461080d57806388f820201461082357600080fd5b806371b9189c116101ab57806371b9189c14610781578063743942b6146107a15780637598f8bc146107c157806378109e54146107d757600080fd5b80636ce37fa01461072c57806370a082311461074c578063715018a61461076c57600080fd5b80632dd5efe7116102ab578063401aa5c0116102495780634b01547f116102235780634b01547f146106b657806352390c02146106d65780635d54c0af146106f6578063620158521461071657600080fd5b8063401aa5c0146106605780634549b0391461067657806349bd5a5e1461069657600080fd5b806337533c911161028557806337533c91146105eb57806339509351146106005780633bd5d173146106205780633ddf65ab1461064057600080fd5b80632dd5efe71461057f578063313ce5671461059f5780633685d419146105cb57600080fd5b806318160ddd1161031857806325b86edf116102f257806325b86edf146104fe5780632691bc801461051e5780632d4103d61461053f5780632d8381191461055f57600080fd5b806318160ddd146104a957806323ab8a93146104be57806323b872dd146104de57600080fd5b8063095ea7b311610354578063095ea7b3146103f35780630f3a325f1461042357806313114a9d1461045c5780631694505e1461047157600080fd5b80630445b6671461038657806306fdde03146103af57806309302dc6146103d157600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60275481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506103c4610a9a565b6040516103a69190613939565b3480156103dd57600080fd5b506103f16103ec3660046137e9565b610b2c565b005b3480156103ff57600080fd5b5061041361040e3660046136c2565b610b86565b60405190151581526020016103a6565b34801561042f57600080fd5b5061041361043e3660046135b8565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561046857600080fd5b5060145461039c565b34801561047d57600080fd5b50602854610491906001600160a01b031681565b6040516001600160a01b0390911681526020016103a6565b3480156104b557600080fd5b5060125461039c565b3480156104ca57600080fd5b506103f16104d9366004613668565b610b9d565b3480156104ea57600080fd5b506104136104f9366004613628565b610d3f565b34801561050a57600080fd5b506103f16105193660046137d7565b610da8565b34801561052a57600080fd5b5060295461041390600160b01b900460ff1681565b34801561054b57600080fd5b506103f161055a3660046137ba565b610ed8565b34801561056b57600080fd5b5061039c61057a3660046137e9565b610f63565b34801561058b57600080fd5b506103f161059a3660046135b8565b610fe7565b3480156105ab57600080fd5b50601154600160a01b900460ff1660405160ff90911681526020016103a6565b3480156105d757600080fd5b506103f16105e63660046135b8565b611035565b3480156105f757600080fd5b506103f1611220565b34801561060c57600080fd5b5061041361061b3660046136c2565b611283565b34801561062c57600080fd5b506103f161063b3660046137e9565b6112b9565b34801561064c57600080fd5b506103f161065b366004613782565b6113a3565b34801561066c57600080fd5b5061039c601b5481565b34801561068257600080fd5b5061039c610691366004613819565b6113eb565b3480156106a257600080fd5b50602954610491906001600160a01b031681565b3480156106c257600080fd5b506103f16106d1366004613782565b611478565b3480156106e257600080fd5b506103f16106f13660046135b8565b6114c0565b34801561070257600080fd5b506103f161071136600461372d565b6115aa565b34801561072257600080fd5b5061039c60195481565b34801561073857600080fd5b506103f161074736600461388b565b6116ac565b34801561075857600080fd5b5061039c6107673660046135b8565b6116e7565b34801561077857600080fd5b506103f1611746565b34801561078d57600080fd5b506103f161079c3660046136ed565b6117ba565b3480156107ad57600080fd5b506103f16107bc3660046135b8565b611867565b3480156107cd57600080fd5b5061039c601f5481565b3480156107e357600080fd5b5061039c60175481565b3480156107f957600080fd5b506103f16108083660046136ed565b6118c6565b34801561081957600080fd5b5061039c601c5481565b34801561082f57600080fd5b5061041361083e3660046135b8565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561086857600080fd5b506000546001600160a01b0316610491565b34801561088657600080fd5b506103f161089536600461383d565b61196e565b3480156108a657600080fd5b506103c46119b8565b3480156108bb57600080fd5b506103f16108ca3660046138bc565b6119c7565b3480156108db57600080fd5b506104136108ea3660046136c2565b611a3e565b3480156108fb57600080fd5b5061041361090a3660046136c2565b611a8d565b34801561091b57600080fd5b5061039c600b5481565b34801561093157600080fd5b5061039c601a5481565b34801561094757600080fd5b5061039c601d5481565b34801561095d57600080fd5b5061039c601e5481565b34801561097357600080fd5b506103f16109823660046135f0565b611a9a565b34801561099357600080fd5b5061039c60185481565b3480156109a957600080fd5b5061039c6109b83660046135f0565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109ef57600080fd5b506103f16109fe3660046135b8565b611af2565b348015610a0f57600080fd5b506103f1610a1e3660046135b8565b611b3d565b348015610a2f57600080fd5b506103f1610a3e3660046135b8565b611ec3565b348015610a4f57600080fd5b506103f1610a5e3660046135b8565b611f11565b348015610a6f57600080fd5b5061039c600a5481565b348015610a8557600080fd5b5060295461041390600160a81b900460ff1681565b606060158054610aa990613b7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad590613b7a565b8015610b225780601f10610af757610100808354040283529160200191610b22565b820191906000526020600020905b815481529060010190602001808311610b0557829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b5f5760405162461bcd60e51b8152600401610b569061398c565b60405180910390fd5b610b8081610b7a6103e8601254611ffb90919063ffffffff16565b9061203d565b60175550565b6000610b9333848461211b565b5060015b92915050565b6000546001600160a01b03163314610bc75760405162461bcd60e51b8152600401610b569061398c565b6107d18210610c2f5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b56565b6011546000908390610c4c90600160a01b900460ff16600a613a99565b610c569084613b44565b610c609190613b44565b905080610c6c866116e7565b1015610cba5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b56565b60005b83811015610d3757610d2586868684818110610ce957634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610cfe91906135b8565b601154610d1690600160a01b900460ff16600a613a99565b610d209087613b44565b61223f565b80610d2f81613bb5565b915050610cbd565b505050505050565b6000610d4c84848461223f565b610d9e8433610d9985604051806060016040528060288152602001613c0d602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612762565b61211b565b5060019392505050565b6000546001600160a01b03163314610dd25760405162461bcd60e51b8152600401610b569061398c565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610e1457600080fd5b505afa158015610e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4c9190613801565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610e9a57600080fd5b505af1158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed2919061379e565b50505050565b6000546001600160a01b03163314610f025760405162461bcd60e51b8152600401610b569061398c565b6029805460ff60a81b1916600160a81b84151502179055610f22306114c0565b602954610f37906001600160a01b03166114c0565b602954600160a81b900460ff168015610f505750600b54155b15610f5f5743600b55600a8190555b5050565b6000601354821115610fca5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b56565b6000610fd461279c565b9050610fe08382611ffb565b9392505050565b6000546001600160a01b031633146110115760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b0316331461105f5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b0381166000908152600e602052604090205460ff166110c75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b56565b60005b601054811015610f5f57816001600160a01b0316601082815481106110ff57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561120e576010805461112a90600190613b63565b8154811061114857634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601080546001600160a01b03909216918390811061118257634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff1916905560108054806111e857634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061121881613bb5565b9150506110ca565b6000546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610b569061398c565b6029805460ff60b81b1916905560125461126d90600290610b7a906103e8611ffb565b60175561128161127c306116e7565b6127bf565b565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b93918590610d9990866120bc565b336000818152600e602052604090205460ff161561132e5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b56565b6000611339836129a3565b505050506001600160a01b038416600090815260066020526040902054919250611365919050826129f2565b6001600160a01b03831660009081526006602052604090205560135461138b90826129f2565b60135560145461139b90846120bc565b601455505050565b6000546001600160a01b031633146113cd5760405162461bcd60e51b8152600401610b569061398c565b60298054911515600160b81b0260ff60b81b19909216919091179055565b600060125483111561143f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b56565b8161145e57600061144f846129a3565b50939550610b97945050505050565b6000611469846129a3565b50929550610b97945050505050565b6000546001600160a01b031633146114a25760405162461bcd60e51b8152600401610b569061398c565b60298054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146114ea5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b03811660009081526006602052604090205415611544576001600160a01b03811660009081526006602052604090205461152a90610f63565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319169091179055565b6000546001600160a01b031633146115d45760405162461bcd60e51b8152600401610b569061398c565b60005b82811015610ed257600f600085858481811061160357634e487b7160e01b600052603260045260246000fd5b905060200201602081019061161891906135b8565b6001600160a01b0316815260208101919091526040016000205460ff1661169c57816009600086868581811061165e57634e487b7160e01b600052603260045260246000fd5b905060200201602081019061167391906135b8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b6116a581613bb5565b90506115d7565b6000546001600160a01b031633146116d65760405162461bcd60e51b8152600401610b569061398c565b601c92909255601d55601e55601f55565b6001600160a01b0381166000908152600e602052604081205460ff161561172457506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610b9790610f63565b6000546001600160a01b031633146117705760405162461bcd60e51b8152600401610b569061398c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117e45760405162461bcd60e51b8152600401610b569061398c565b60005b81811015611862576001600c600085858581811061181557634e487b7160e01b600052603260045260246000fd5b905060200201602081019061182a91906135b8565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561185b81613bb5565b90506117e7565b505050565b6000546001600160a01b031633146118915760405162461bcd60e51b8152600401610b569061398c565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610f5f573d6000803e3d6000fd5b6000546001600160a01b031633146118f05760405162461bcd60e51b8152600401610b569061398c565b60005b81811015611862576001600f600085858581811061192157634e487b7160e01b600052603260045260246000fd5b905060200201602081019061193691906135b8565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561196781613bb5565b90506118f3565b6000546001600160a01b031633146119985760405162461bcd60e51b8152600401610b569061398c565b80826012546119a79190613b44565b6119b19190613a36565b6027555050565b606060168054610aa990613b7a565b6000546001600160a01b031633146119f15760405162461bcd60e51b8152600401610b569061398c565b6018849055601a8390556019829055601b85905560248590556021849055602382905560228390556020819055611a3481611a2e848188886120bc565b906120bc565b6025555050505050565b6000610b933384610d9985604051806060016040528060258152602001613c35602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612762565b6000610b9333848461223f565b6000546001600160a01b03163314611ac45760405162461bcd60e51b8152600401610b569061398c565b600380546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6000546001600160a01b03163314611b1c5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611b675760405162461bcd60e51b8152600401610b569061398c565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611ba757600080fd5b505afa158015611bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdf91906135d4565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c2757600080fd5b505afa158015611c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5f91906135d4565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611ca557600080fd5b505afa158015611cb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdd91906135d4565b90506001600160a01b038116611e8357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2657600080fd5b505afa158015611d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5e91906135d4565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611da657600080fd5b505afa158015611dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dde91906135d4565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611e2657600080fd5b505af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e91906135d4565b602980546001600160a01b0319166001600160a01b0392909216919091179055611e9f565b602980546001600160a01b0319166001600160a01b0383161790555b50602880546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611eed5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314611f3b5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b038116611fa05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b56565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610fe083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a34565b60008261204c57506000610b97565b60006120588385613b44565b9050826120658583613a36565b14610fe05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b56565b6000806120c98385613a1e565b905083811015610fe05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b56565b6001600160a01b03831661217d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b56565b6001600160a01b0382166121de5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b56565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b56565b6001600160a01b0382166123055760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b56565b600081116123675760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b56565b6001600160a01b03831660009081526009602052604090205460ff16156123d05760405162461bcd60e51b815260206004820152601760248201527f596f752068617665206e6f20706f7765722068657265210000000000000000006044820152606401610b56565b6000546001600160a01b038481169116148015906123fc57506000546001600160a01b03838116911614155b1561245a57602954600160a81b900460ff1661245a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b56565b6029546000906001600160a01b038581169116148061248657506029546001600160a01b038481169116145b80156124ce57506001600160a01b0384166000908152600c602052604090205460ff16806124cc57506001600160a01b0383166000908152600c602052604090205460ff165b155b156124d7575060015b6000600b5411801561251b57506001600160a01b0383166000908152600d602052604090205460ff1615801561251b57506000546001600160a01b03858116911614155b8015612536575043600a54600b546125339190613a1e565b11155b156125aa57601754612547846116e7565b6125519084613a1e565b11156125aa5760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b56565b602554602655601b54602455602954600160a81b900460ff1680156125dc57506029546001600160a01b038481169116145b15612608576125fe601e54611a2e601d54601c546120bc90919063ffffffff16565b602655601f546024555b6000600b54118015612628575043600a54600b546126269190613a1e565b115b15612651576001600160a01b0383166000908152600960205260409020805460ff191660011790555b6000600b5411801561267157506000546001600160a01b03858116911614155b801561268c5750600a54600b546126889190613a1e565b4310155b80156126a15750602954600160b81b900460ff165b156126ad576103de6026555b602954600160b01b900460ff16156126f057602954600160a81b900460ff1680156126e557506029546001600160a01b038581169116145b156126f05760006026555b602954600160a01b900460ff161580156127135750602954600160a81b900460ff165b801561272c57506029546001600160a01b038481169116145b1561275657600061273c306116e7565b90506027548110612754575060275461275481612a62565b505b610ed284848484612bb2565b600081848411156127865760405162461bcd60e51b8152600401610b569190613939565b5060006127938486613b63565b95945050505050565b60008060006127a9612cde565b90925090506127b88282611ffb565b9250505090565b6029805460ff60a01b1916600160a01b1790556025546021546000916127f5916002916127ef918290879061203d565b90611ffb565b9050600061280383836129f2565b905061280e81612e98565b602154479060009061282e90612825906002611ffb565b602554906129f2565b9050600061285060026127ef846127ef6021548861203d90919063ffffffff16565b9050600061286d836127ef6023548761203d90919063ffffffff16565b9050600061288a846127ef6022548861203d90919063ffffffff16565b905060006128a7856127ef6020548961203d90919063ffffffff16565b90504780156128f5576003546128c79084906001600160a01b0316613056565b6004546128de9083906001600160a01b0316613056565b6005546128f59085906001600160a01b0316613056565b881561290557612905898661308c565b602954601154612922916001600160a01b0390811691168c61223f565b602960009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561297257600080fd5b505af1158015612986573d6000803e3d6000fd5b50506029805460ff60a01b19169055505050505050505050505050565b60008060008060008060008060006129ba8a613170565b92509250925060008060006129d88d86866129d361279c565b6131b2565b919f909e50909c50959a5093985091965092945050505050565b6000610fe083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612762565b60008183612a555760405162461bcd60e51b8152600401610b569190613939565b5060006127938486613a36565b6029805460ff60a01b1916600160a01b179055602554602154600091612a92916002916127ef918290879061203d565b90506000612aa083836129f2565b9050612aab81612e98565b6021544790600090612ac290612825906002611ffb565b90506000612ae460026127ef846127ef6021548861203d90919063ffffffff16565b90506000612b01836127ef6023548761203d90919063ffffffff16565b90506000612b1e846127ef6022548861203d90919063ffffffff16565b90506000612b3b856127ef6020548961203d90919063ffffffff16565b9050478015612b8957600354612b5b9084906001600160a01b0316613056565b600454612b729083906001600160a01b0316613056565b600554612b899085906001600160a01b0316613056565b8815612b9957612b99898661308c565b50506029805460ff60a01b191690555050505050505050565b60245460265482612bc857600060248190556026555b6001600160a01b0386166000908152600e602052604090205460ff168015612c0957506001600160a01b0385166000908152600e602052604090205460ff16155b15612c1e57612c19868686613202565b612cca565b6001600160a01b0386166000908152600e602052604090205460ff16158015612c5f57506001600160a01b0385166000908152600e602052604090205460ff165b15612c6f57612c19868686613328565b6001600160a01b0386166000908152600e602052604090205460ff168015612caf57506001600160a01b0385166000908152600e602052604090205460ff165b15612cbf57612c198686866133d1565b612cca868686613444565b82610d375760249190915560265550505050565b6013546012546000918291825b601054811015612e6857826006600060108481548110612d1b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d945750816007600060108481548110612d6d57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612daa57601354601254945094505050509091565b612dfe6006600060108481548110612dd257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906129f2565b9250612e546007600060108481548110612e2857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906129f2565b915080612e6081613bb5565b915050612ceb565b50601254601354612e7891611ffb565b821015612e8f576013546012549350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612edb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612f2f57600080fd5b505afa158015612f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6791906135d4565b81600181518110612f8857634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602854612fae913091168461211b565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac94790612fe79085906000908690309042906004016139e2565b600060405180830381600087803b15801561300157600080fd5b505af1158015613015573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161304a9291906139c1565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611862573d6000803e3d6000fd5b6028546130a49030906001600160a01b03168461211b565b6028546001600160a01b031663f305d7198230856000806130cd6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561313057600080fd5b505af1158015613144573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613169919061385e565b5050505050565b60008060008061317f85613488565b9050600061318c866134a5565b905060006131a48261319e89866129f2565b906129f2565b979296509094509092505050565b60008080806131c1888661203d565b905060006131cf888761203d565b905060006131dd888861203d565b905060006131ef8261319e86866129f2565b939b939a50919850919650505050505050565b600080600080600080613214876129a3565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061324690886129f2565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461327590876129f2565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546132a490866120bc565b6001600160a01b0389166000908152600660205260409020556132c6816134c2565b6132d0848361354a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161331591815260200190565b60405180910390a3505050505050505050565b60008060008060008061333a876129a3565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061336c90876129f2565b6001600160a01b03808b16600090815260066020908152604080832094909455918b168152600790915220546133a290846120bc565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546132a490866120bc565b6000806000806000806133e3876129a3565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061341590886129f2565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461336c90876129f2565b600080600080600080613456876129a3565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061327590876129f2565b6000610b976103e86127ef6024548561203d90919063ffffffff16565b6000610b976103e86127ef6026548561203d90919063ffffffff16565b60006134cc61279c565b905060006134da838361203d565b306000908152600660205260409020549091506134f790826120bc565b30600090815260066020908152604080832093909355600e9052205460ff1615611862573060009081526007602052604090205461353590846120bc565b30600090815260076020526040902055505050565b60135461355790836129f2565b60135560145461356790826120bc565b6014555050565b60008083601f84011261357f578182fd5b50813567ffffffffffffffff811115613596578182fd5b6020830191508360208260051b85010111156135b157600080fd5b9250929050565b6000602082840312156135c9578081fd5b8135610fe081613be6565b6000602082840312156135e5578081fd5b8151610fe081613be6565b60008060408385031215613602578081fd5b823561360d81613be6565b9150602083013561361d81613be6565b809150509250929050565b60008060006060848603121561363c578081fd5b833561364781613be6565b9250602084013561365781613be6565b929592945050506040919091013590565b6000806000806060858703121561367d578081fd5b843561368881613be6565b9350602085013567ffffffffffffffff8111156136a3578182fd5b6136af8782880161356e565b9598909750949560400135949350505050565b600080604083850312156136d4578182fd5b82356136df81613be6565b946020939093013593505050565b600080602083850312156136ff578182fd5b823567ffffffffffffffff811115613715578283fd5b6137218582860161356e565b90969095509350505050565b600080600060408486031215613741578283fd5b833567ffffffffffffffff811115613757578384fd5b6137638682870161356e565b909450925050602084013561377781613bfe565b809150509250925092565b600060208284031215613793578081fd5b8135610fe081613bfe565b6000602082840312156137af578081fd5b8151610fe081613bfe565b600080604083850312156137cc578182fd5b82356136df81613bfe565b60008060408385031215613602578182fd5b6000602082840312156137fa578081fd5b5035919050565b600060208284031215613812578081fd5b5051919050565b6000806040838503121561382b578182fd5b82359150602083013561361d81613bfe565b6000806040838503121561384f578182fd5b50508035926020909101359150565b600080600060608486031215613872578081fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156138a0578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156138d3578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000815180845260208085019450808401835b8381101561392e5781516001600160a01b031687529582019590820190600101613909565b509495945050505050565b6000602080835283518082850152825b8181101561396557858101830151858201604001528201613949565b818111156139765783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006139da60408301846138f6565b949350505050565b85815284602082015260a060408201526000613a0160a08301866138f6565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613a3157613a31613bd0565b500190565b600082613a5157634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115613a91578160001904821115613a7757613a77613bd0565b80851615613a8457918102915b93841c9390800290613a5b565b509250929050565b6000610fe060ff841683600082613ab257506001610b97565b81613abf57506000610b97565b8160018114613ad55760028114613adf57613afb565b6001915050610b97565b60ff841115613af057613af0613bd0565b50506001821b610b97565b5060208310610133831016604e8410600b8410161715613b1e575081810a610b97565b613b288383613a56565b8060001904821115613b3c57613b3c613bd0565b029392505050565b6000816000190483118215151615613b5e57613b5e613bd0565b500290565b600082821015613b7557613b75613bd0565b500390565b600181811c90821680613b8e57607f821691505b60208210811415613baf57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613bc957613bc9613bd0565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114613bfb57600080fd5b50565b8015158114613bfb57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200eefd962c33004254fb37c70e9b84a3b8d3b95ae5a8143595a98f0569e16c3d664736f6c63430008040033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c80636ce37fa0116101d1578063a457c2d711610102578063dc44b6a0116100a0578063f259c57b1161006f578063f259c57b14610a23578063f2fde38b14610a43578063fabb0b4f14610a63578063ffb54a9914610a7957600080fd5b8063dc44b6a014610987578063dd62ed3e1461099d578063ea2f0b37146109e3578063eafb5a3c14610a0357600080fd5b8063c5d24189116100dc578063c5d2418914610925578063c86079521461093b578063c9cf778914610951578063d3f6a1571461096757600080fd5b8063a457c2d7146108cf578063a9059cbb146108ef578063bf56b3711461090f57600080fd5b806384530c461161016f5780638da5cb5b116101495780638da5cb5b1461085c5780638f4590d21461087a57806395d89b411461089a578063a3b84b6b146108af57600080fd5b806384530c46146107ed57806388790a681461080d57806388f820201461082357600080fd5b806371b9189c116101ab57806371b9189c14610781578063743942b6146107a15780637598f8bc146107c157806378109e54146107d757600080fd5b80636ce37fa01461072c57806370a082311461074c578063715018a61461076c57600080fd5b80632dd5efe7116102ab578063401aa5c0116102495780634b01547f116102235780634b01547f146106b657806352390c02146106d65780635d54c0af146106f6578063620158521461071657600080fd5b8063401aa5c0146106605780634549b0391461067657806349bd5a5e1461069657600080fd5b806337533c911161028557806337533c91146105eb57806339509351146106005780633bd5d173146106205780633ddf65ab1461064057600080fd5b80632dd5efe71461057f578063313ce5671461059f5780633685d419146105cb57600080fd5b806318160ddd1161031857806325b86edf116102f257806325b86edf146104fe5780632691bc801461051e5780632d4103d61461053f5780632d8381191461055f57600080fd5b806318160ddd146104a957806323ab8a93146104be57806323b872dd146104de57600080fd5b8063095ea7b311610354578063095ea7b3146103f35780630f3a325f1461042357806313114a9d1461045c5780631694505e1461047157600080fd5b80630445b6671461038657806306fdde03146103af57806309302dc6146103d157600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60275481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506103c4610a9a565b6040516103a69190613939565b3480156103dd57600080fd5b506103f16103ec3660046137e9565b610b2c565b005b3480156103ff57600080fd5b5061041361040e3660046136c2565b610b86565b60405190151581526020016103a6565b34801561042f57600080fd5b5061041361043e3660046135b8565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561046857600080fd5b5060145461039c565b34801561047d57600080fd5b50602854610491906001600160a01b031681565b6040516001600160a01b0390911681526020016103a6565b3480156104b557600080fd5b5060125461039c565b3480156104ca57600080fd5b506103f16104d9366004613668565b610b9d565b3480156104ea57600080fd5b506104136104f9366004613628565b610d3f565b34801561050a57600080fd5b506103f16105193660046137d7565b610da8565b34801561052a57600080fd5b5060295461041390600160b01b900460ff1681565b34801561054b57600080fd5b506103f161055a3660046137ba565b610ed8565b34801561056b57600080fd5b5061039c61057a3660046137e9565b610f63565b34801561058b57600080fd5b506103f161059a3660046135b8565b610fe7565b3480156105ab57600080fd5b50601154600160a01b900460ff1660405160ff90911681526020016103a6565b3480156105d757600080fd5b506103f16105e63660046135b8565b611035565b3480156105f757600080fd5b506103f1611220565b34801561060c57600080fd5b5061041361061b3660046136c2565b611283565b34801561062c57600080fd5b506103f161063b3660046137e9565b6112b9565b34801561064c57600080fd5b506103f161065b366004613782565b6113a3565b34801561066c57600080fd5b5061039c601b5481565b34801561068257600080fd5b5061039c610691366004613819565b6113eb565b3480156106a257600080fd5b50602954610491906001600160a01b031681565b3480156106c257600080fd5b506103f16106d1366004613782565b611478565b3480156106e257600080fd5b506103f16106f13660046135b8565b6114c0565b34801561070257600080fd5b506103f161071136600461372d565b6115aa565b34801561072257600080fd5b5061039c60195481565b34801561073857600080fd5b506103f161074736600461388b565b6116ac565b34801561075857600080fd5b5061039c6107673660046135b8565b6116e7565b34801561077857600080fd5b506103f1611746565b34801561078d57600080fd5b506103f161079c3660046136ed565b6117ba565b3480156107ad57600080fd5b506103f16107bc3660046135b8565b611867565b3480156107cd57600080fd5b5061039c601f5481565b3480156107e357600080fd5b5061039c60175481565b3480156107f957600080fd5b506103f16108083660046136ed565b6118c6565b34801561081957600080fd5b5061039c601c5481565b34801561082f57600080fd5b5061041361083e3660046135b8565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561086857600080fd5b506000546001600160a01b0316610491565b34801561088657600080fd5b506103f161089536600461383d565b61196e565b3480156108a657600080fd5b506103c46119b8565b3480156108bb57600080fd5b506103f16108ca3660046138bc565b6119c7565b3480156108db57600080fd5b506104136108ea3660046136c2565b611a3e565b3480156108fb57600080fd5b5061041361090a3660046136c2565b611a8d565b34801561091b57600080fd5b5061039c600b5481565b34801561093157600080fd5b5061039c601a5481565b34801561094757600080fd5b5061039c601d5481565b34801561095d57600080fd5b5061039c601e5481565b34801561097357600080fd5b506103f16109823660046135f0565b611a9a565b34801561099357600080fd5b5061039c60185481565b3480156109a957600080fd5b5061039c6109b83660046135f0565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109ef57600080fd5b506103f16109fe3660046135b8565b611af2565b348015610a0f57600080fd5b506103f1610a1e3660046135b8565b611b3d565b348015610a2f57600080fd5b506103f1610a3e3660046135b8565b611ec3565b348015610a4f57600080fd5b506103f1610a5e3660046135b8565b611f11565b348015610a6f57600080fd5b5061039c600a5481565b348015610a8557600080fd5b5060295461041390600160a81b900460ff1681565b606060158054610aa990613b7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad590613b7a565b8015610b225780601f10610af757610100808354040283529160200191610b22565b820191906000526020600020905b815481529060010190602001808311610b0557829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b5f5760405162461bcd60e51b8152600401610b569061398c565b60405180910390fd5b610b8081610b7a6103e8601254611ffb90919063ffffffff16565b9061203d565b60175550565b6000610b9333848461211b565b5060015b92915050565b6000546001600160a01b03163314610bc75760405162461bcd60e51b8152600401610b569061398c565b6107d18210610c2f5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b56565b6011546000908390610c4c90600160a01b900460ff16600a613a99565b610c569084613b44565b610c609190613b44565b905080610c6c866116e7565b1015610cba5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b56565b60005b83811015610d3757610d2586868684818110610ce957634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610cfe91906135b8565b601154610d1690600160a01b900460ff16600a613a99565b610d209087613b44565b61223f565b80610d2f81613bb5565b915050610cbd565b505050505050565b6000610d4c84848461223f565b610d9e8433610d9985604051806060016040528060288152602001613c0d602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612762565b61211b565b5060019392505050565b6000546001600160a01b03163314610dd25760405162461bcd60e51b8152600401610b569061398c565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610e1457600080fd5b505afa158015610e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4c9190613801565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610e9a57600080fd5b505af1158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed2919061379e565b50505050565b6000546001600160a01b03163314610f025760405162461bcd60e51b8152600401610b569061398c565b6029805460ff60a81b1916600160a81b84151502179055610f22306114c0565b602954610f37906001600160a01b03166114c0565b602954600160a81b900460ff168015610f505750600b54155b15610f5f5743600b55600a8190555b5050565b6000601354821115610fca5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b56565b6000610fd461279c565b9050610fe08382611ffb565b9392505050565b6000546001600160a01b031633146110115760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b0316331461105f5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b0381166000908152600e602052604090205460ff166110c75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b56565b60005b601054811015610f5f57816001600160a01b0316601082815481106110ff57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561120e576010805461112a90600190613b63565b8154811061114857634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601080546001600160a01b03909216918390811061118257634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff1916905560108054806111e857634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061121881613bb5565b9150506110ca565b6000546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610b569061398c565b6029805460ff60b81b1916905560125461126d90600290610b7a906103e8611ffb565b60175561128161127c306116e7565b6127bf565b565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b93918590610d9990866120bc565b336000818152600e602052604090205460ff161561132e5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b56565b6000611339836129a3565b505050506001600160a01b038416600090815260066020526040902054919250611365919050826129f2565b6001600160a01b03831660009081526006602052604090205560135461138b90826129f2565b60135560145461139b90846120bc565b601455505050565b6000546001600160a01b031633146113cd5760405162461bcd60e51b8152600401610b569061398c565b60298054911515600160b81b0260ff60b81b19909216919091179055565b600060125483111561143f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b56565b8161145e57600061144f846129a3565b50939550610b97945050505050565b6000611469846129a3565b50929550610b97945050505050565b6000546001600160a01b031633146114a25760405162461bcd60e51b8152600401610b569061398c565b60298054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146114ea5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b03811660009081526006602052604090205415611544576001600160a01b03811660009081526006602052604090205461152a90610f63565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319169091179055565b6000546001600160a01b031633146115d45760405162461bcd60e51b8152600401610b569061398c565b60005b82811015610ed257600f600085858481811061160357634e487b7160e01b600052603260045260246000fd5b905060200201602081019061161891906135b8565b6001600160a01b0316815260208101919091526040016000205460ff1661169c57816009600086868581811061165e57634e487b7160e01b600052603260045260246000fd5b905060200201602081019061167391906135b8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b6116a581613bb5565b90506115d7565b6000546001600160a01b031633146116d65760405162461bcd60e51b8152600401610b569061398c565b601c92909255601d55601e55601f55565b6001600160a01b0381166000908152600e602052604081205460ff161561172457506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610b9790610f63565b6000546001600160a01b031633146117705760405162461bcd60e51b8152600401610b569061398c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117e45760405162461bcd60e51b8152600401610b569061398c565b60005b81811015611862576001600c600085858581811061181557634e487b7160e01b600052603260045260246000fd5b905060200201602081019061182a91906135b8565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561185b81613bb5565b90506117e7565b505050565b6000546001600160a01b031633146118915760405162461bcd60e51b8152600401610b569061398c565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610f5f573d6000803e3d6000fd5b6000546001600160a01b031633146118f05760405162461bcd60e51b8152600401610b569061398c565b60005b81811015611862576001600f600085858581811061192157634e487b7160e01b600052603260045260246000fd5b905060200201602081019061193691906135b8565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561196781613bb5565b90506118f3565b6000546001600160a01b031633146119985760405162461bcd60e51b8152600401610b569061398c565b80826012546119a79190613b44565b6119b19190613a36565b6027555050565b606060168054610aa990613b7a565b6000546001600160a01b031633146119f15760405162461bcd60e51b8152600401610b569061398c565b6018849055601a8390556019829055601b85905560248590556021849055602382905560228390556020819055611a3481611a2e848188886120bc565b906120bc565b6025555050505050565b6000610b933384610d9985604051806060016040528060258152602001613c35602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612762565b6000610b9333848461223f565b6000546001600160a01b03163314611ac45760405162461bcd60e51b8152600401610b569061398c565b600380546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6000546001600160a01b03163314611b1c5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611b675760405162461bcd60e51b8152600401610b569061398c565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611ba757600080fd5b505afa158015611bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdf91906135d4565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c2757600080fd5b505afa158015611c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5f91906135d4565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611ca557600080fd5b505afa158015611cb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdd91906135d4565b90506001600160a01b038116611e8357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2657600080fd5b505afa158015611d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5e91906135d4565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611da657600080fd5b505afa158015611dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dde91906135d4565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611e2657600080fd5b505af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e91906135d4565b602980546001600160a01b0319166001600160a01b0392909216919091179055611e9f565b602980546001600160a01b0319166001600160a01b0383161790555b50602880546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611eed5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314611f3b5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b038116611fa05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b56565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610fe083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a34565b60008261204c57506000610b97565b60006120588385613b44565b9050826120658583613a36565b14610fe05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b56565b6000806120c98385613a1e565b905083811015610fe05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b56565b6001600160a01b03831661217d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b56565b6001600160a01b0382166121de5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b56565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b56565b6001600160a01b0382166123055760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b56565b600081116123675760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b56565b6001600160a01b03831660009081526009602052604090205460ff16156123d05760405162461bcd60e51b815260206004820152601760248201527f596f752068617665206e6f20706f7765722068657265210000000000000000006044820152606401610b56565b6000546001600160a01b038481169116148015906123fc57506000546001600160a01b03838116911614155b1561245a57602954600160a81b900460ff1661245a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b56565b6029546000906001600160a01b038581169116148061248657506029546001600160a01b038481169116145b80156124ce57506001600160a01b0384166000908152600c602052604090205460ff16806124cc57506001600160a01b0383166000908152600c602052604090205460ff165b155b156124d7575060015b6000600b5411801561251b57506001600160a01b0383166000908152600d602052604090205460ff1615801561251b57506000546001600160a01b03858116911614155b8015612536575043600a54600b546125339190613a1e565b11155b156125aa57601754612547846116e7565b6125519084613a1e565b11156125aa5760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b56565b602554602655601b54602455602954600160a81b900460ff1680156125dc57506029546001600160a01b038481169116145b15612608576125fe601e54611a2e601d54601c546120bc90919063ffffffff16565b602655601f546024555b6000600b54118015612628575043600a54600b546126269190613a1e565b115b15612651576001600160a01b0383166000908152600960205260409020805460ff191660011790555b6000600b5411801561267157506000546001600160a01b03858116911614155b801561268c5750600a54600b546126889190613a1e565b4310155b80156126a15750602954600160b81b900460ff165b156126ad576103de6026555b602954600160b01b900460ff16156126f057602954600160a81b900460ff1680156126e557506029546001600160a01b038581169116145b156126f05760006026555b602954600160a01b900460ff161580156127135750602954600160a81b900460ff165b801561272c57506029546001600160a01b038481169116145b1561275657600061273c306116e7565b90506027548110612754575060275461275481612a62565b505b610ed284848484612bb2565b600081848411156127865760405162461bcd60e51b8152600401610b569190613939565b5060006127938486613b63565b95945050505050565b60008060006127a9612cde565b90925090506127b88282611ffb565b9250505090565b6029805460ff60a01b1916600160a01b1790556025546021546000916127f5916002916127ef918290879061203d565b90611ffb565b9050600061280383836129f2565b905061280e81612e98565b602154479060009061282e90612825906002611ffb565b602554906129f2565b9050600061285060026127ef846127ef6021548861203d90919063ffffffff16565b9050600061286d836127ef6023548761203d90919063ffffffff16565b9050600061288a846127ef6022548861203d90919063ffffffff16565b905060006128a7856127ef6020548961203d90919063ffffffff16565b90504780156128f5576003546128c79084906001600160a01b0316613056565b6004546128de9083906001600160a01b0316613056565b6005546128f59085906001600160a01b0316613056565b881561290557612905898661308c565b602954601154612922916001600160a01b0390811691168c61223f565b602960009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561297257600080fd5b505af1158015612986573d6000803e3d6000fd5b50506029805460ff60a01b19169055505050505050505050505050565b60008060008060008060008060006129ba8a613170565b92509250925060008060006129d88d86866129d361279c565b6131b2565b919f909e50909c50959a5093985091965092945050505050565b6000610fe083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612762565b60008183612a555760405162461bcd60e51b8152600401610b569190613939565b5060006127938486613a36565b6029805460ff60a01b1916600160a01b179055602554602154600091612a92916002916127ef918290879061203d565b90506000612aa083836129f2565b9050612aab81612e98565b6021544790600090612ac290612825906002611ffb565b90506000612ae460026127ef846127ef6021548861203d90919063ffffffff16565b90506000612b01836127ef6023548761203d90919063ffffffff16565b90506000612b1e846127ef6022548861203d90919063ffffffff16565b90506000612b3b856127ef6020548961203d90919063ffffffff16565b9050478015612b8957600354612b5b9084906001600160a01b0316613056565b600454612b729083906001600160a01b0316613056565b600554612b899085906001600160a01b0316613056565b8815612b9957612b99898661308c565b50506029805460ff60a01b191690555050505050505050565b60245460265482612bc857600060248190556026555b6001600160a01b0386166000908152600e602052604090205460ff168015612c0957506001600160a01b0385166000908152600e602052604090205460ff16155b15612c1e57612c19868686613202565b612cca565b6001600160a01b0386166000908152600e602052604090205460ff16158015612c5f57506001600160a01b0385166000908152600e602052604090205460ff165b15612c6f57612c19868686613328565b6001600160a01b0386166000908152600e602052604090205460ff168015612caf57506001600160a01b0385166000908152600e602052604090205460ff165b15612cbf57612c198686866133d1565b612cca868686613444565b82610d375760249190915560265550505050565b6013546012546000918291825b601054811015612e6857826006600060108481548110612d1b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d945750816007600060108481548110612d6d57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612daa57601354601254945094505050509091565b612dfe6006600060108481548110612dd257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906129f2565b9250612e546007600060108481548110612e2857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906129f2565b915080612e6081613bb5565b915050612ceb565b50601254601354612e7891611ffb565b821015612e8f576013546012549350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612edb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612f2f57600080fd5b505afa158015612f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6791906135d4565b81600181518110612f8857634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602854612fae913091168461211b565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac94790612fe79085906000908690309042906004016139e2565b600060405180830381600087803b15801561300157600080fd5b505af1158015613015573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161304a9291906139c1565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611862573d6000803e3d6000fd5b6028546130a49030906001600160a01b03168461211b565b6028546001600160a01b031663f305d7198230856000806130cd6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561313057600080fd5b505af1158015613144573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613169919061385e565b5050505050565b60008060008061317f85613488565b9050600061318c866134a5565b905060006131a48261319e89866129f2565b906129f2565b979296509094509092505050565b60008080806131c1888661203d565b905060006131cf888761203d565b905060006131dd888861203d565b905060006131ef8261319e86866129f2565b939b939a50919850919650505050505050565b600080600080600080613214876129a3565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061324690886129f2565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461327590876129f2565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546132a490866120bc565b6001600160a01b0389166000908152600660205260409020556132c6816134c2565b6132d0848361354a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161331591815260200190565b60405180910390a3505050505050505050565b60008060008060008061333a876129a3565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061336c90876129f2565b6001600160a01b03808b16600090815260066020908152604080832094909455918b168152600790915220546133a290846120bc565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546132a490866120bc565b6000806000806000806133e3876129a3565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061341590886129f2565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461336c90876129f2565b600080600080600080613456876129a3565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061327590876129f2565b6000610b976103e86127ef6024548561203d90919063ffffffff16565b6000610b976103e86127ef6026548561203d90919063ffffffff16565b60006134cc61279c565b905060006134da838361203d565b306000908152600660205260409020549091506134f790826120bc565b30600090815260066020908152604080832093909355600e9052205460ff1615611862573060009081526007602052604090205461353590846120bc565b30600090815260076020526040902055505050565b60135461355790836129f2565b60135560145461356790826120bc565b6014555050565b60008083601f84011261357f578182fd5b50813567ffffffffffffffff811115613596578182fd5b6020830191508360208260051b85010111156135b157600080fd5b9250929050565b6000602082840312156135c9578081fd5b8135610fe081613be6565b6000602082840312156135e5578081fd5b8151610fe081613be6565b60008060408385031215613602578081fd5b823561360d81613be6565b9150602083013561361d81613be6565b809150509250929050565b60008060006060848603121561363c578081fd5b833561364781613be6565b9250602084013561365781613be6565b929592945050506040919091013590565b6000806000806060858703121561367d578081fd5b843561368881613be6565b9350602085013567ffffffffffffffff8111156136a3578182fd5b6136af8782880161356e565b9598909750949560400135949350505050565b600080604083850312156136d4578182fd5b82356136df81613be6565b946020939093013593505050565b600080602083850312156136ff578182fd5b823567ffffffffffffffff811115613715578283fd5b6137218582860161356e565b90969095509350505050565b600080600060408486031215613741578283fd5b833567ffffffffffffffff811115613757578384fd5b6137638682870161356e565b909450925050602084013561377781613bfe565b809150509250925092565b600060208284031215613793578081fd5b8135610fe081613bfe565b6000602082840312156137af578081fd5b8151610fe081613bfe565b600080604083850312156137cc578182fd5b82356136df81613bfe565b60008060408385031215613602578182fd5b6000602082840312156137fa578081fd5b5035919050565b600060208284031215613812578081fd5b5051919050565b6000806040838503121561382b578182fd5b82359150602083013561361d81613bfe565b6000806040838503121561384f578182fd5b50508035926020909101359150565b600080600060608486031215613872578081fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156138a0578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156138d3578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000815180845260208085019450808401835b8381101561392e5781516001600160a01b031687529582019590820190600101613909565b509495945050505050565b6000602080835283518082850152825b8181101561396557858101830151858201604001528201613949565b818111156139765783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006139da60408301846138f6565b949350505050565b85815284602082015260a060408201526000613a0160a08301866138f6565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613a3157613a31613bd0565b500190565b600082613a5157634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115613a91578160001904821115613a7757613a77613bd0565b80851615613a8457918102915b93841c9390800290613a5b565b509250929050565b6000610fe060ff841683600082613ab257506001610b97565b81613abf57506000610b97565b8160018114613ad55760028114613adf57613afb565b6001915050610b97565b60ff841115613af057613af0613bd0565b50506001821b610b97565b5060208310610133831016604e8410600b8410161715613b1e575081810a610b97565b613b288383613a56565b8060001904821115613b3c57613b3c613bd0565b029392505050565b6000816000190483118215151615613b5e57613b5e613bd0565b500290565b600082821015613b7557613b75613bd0565b500390565b600181811c90821680613b8e57607f821691505b60208210811415613baf57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613bc957613bc9613bd0565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114613bfb57600080fd5b50565b8015158114613bfb57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200eefd962c33004254fb37c70e9b84a3b8d3b95ae5a8143595a98f0569e16c3d664736f6c63430008040033

Deployed Bytecode Sourcemap

14470:25726:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16785:56;;;;;;;;;;;;;;;;;;;17591:25:1;;;17579:2;17564:18;16785:56:0;;;;;;;;19500:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;38239:175::-;;;;;;;;;;-1:-1:-1;38239:175:0;;;;;:::i;:::-;;:::i;:::-;;20412:161;;;;;;;;;;-1:-1:-1;20412:161:0;;;;;:::i;:::-;;:::i;:::-;;;9602:14:1;;9595:22;9577:41;;9565:2;9550:18;20412:161:0;9532:92:1;37310:106:0;;;;;;;;;;-1:-1:-1;37310:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;37390:18:0;37366:4;37390:18;;;:9;:18;;;;;;;;;37310:106;21533:87;;;;;;;;;;-1:-1:-1;21602:10:0;;21533:87;;16861:41;;;;;;;;;;-1:-1:-1;16861:41:0;;;;-1:-1:-1;;;;;16861:41:0;;;;;;-1:-1:-1;;;;;8193:32:1;;;8175:51;;8163:2;8148:18;16861:41:0;8130:102:1;19777:95:0;;;;;;;;;;-1:-1:-1;19857:7:0;;19777:95;;38729:511;;;;;;;;;;-1:-1:-1;38729:511:0;;;;;:::i;:::-;;:::i;20581:313::-;;;;;;;;;;-1:-1:-1;20581:313:0;;;;;:::i;:::-;;:::i;38054:177::-;;;;;;;;;;-1:-1:-1;38054:177:0;;;;;:::i;:::-;;:::i;17012:34::-;;;;;;;;;;-1:-1:-1;17012:34:0;;;;-1:-1:-1;;;17012:34:0;;;;;;18187:337;;;;;;;;;;-1:-1:-1;18187:337:0;;;;;:::i;:::-;;:::i;22465:253::-;;;;;;;;;;-1:-1:-1;22465:253:0;;;;;:::i;:::-;;:::i;38422:113::-;;;;;;;;;;-1:-1:-1;38422:113:0;;;;;:::i;:::-;;:::i;19686:83::-;;;;;;;;;;-1:-1:-1;19752:9:0;;-1:-1:-1;;;19752:9:0;;;;19686:83;;18723:4:1;18711:17;;;18693:36;;18681:2;18666:18;19686:83:0;18648:87:1;22997:479:0;;;;;;;;;;-1:-1:-1;22997:479:0;;;;;:::i;:::-;;:::i;18756:205::-;;;;;;;;;;;;;:::i;20902:218::-;;;;;;;;;;-1:-1:-1;20902:218:0;;;;;:::i;:::-;;:::i;21632:377::-;;;;;;;;;;-1:-1:-1;21632:377:0;;;;;:::i;:::-;;:::i;18648:96::-;;;;;;;;;;-1:-1:-1;18648:96:0;;;;;:::i;:::-;;:::i;16136:36::-;;;;;;;;;;;;;;;;22021:436;;;;;;;;;;-1:-1:-1;22021:436:0;;;;;:::i;:::-;;:::i;16909:28::-;;;;;;;;;;-1:-1:-1;16909:28:0;;;;-1:-1:-1;;;;;16909:28:0;;;18538:102;;;;;;;;;;-1:-1:-1;18538:102:0;;;;;:::i;:::-;;:::i;22726:263::-;;;;;;;;;;-1:-1:-1;22726:263:0;;;;;:::i;:::-;;:::i;37428:267::-;;;;;;;;;;-1:-1:-1;37428:267:0;;;;;:::i;:::-;;:::i;16039:30::-;;;;;;;;;;;;;;;;39853:299;;;;;;;;;;-1:-1:-1;39853:299:0;;;;;:::i;:::-;;:::i;19880:198::-;;;;;;;;;;-1:-1:-1;19880:198:0;;;;;:::i;:::-;;:::i;6101:148::-;;;;;;;;;;;;;:::i;36634:198::-;;;;;;;;;;-1:-1:-1;36634:198:0;;;;;:::i;:::-;;:::i;37911:135::-;;;;;;;;;;-1:-1:-1;37911:135:0;;;;;:::i;:::-;;:::i;16322:37::-;;;;;;;;;;;;;;;;15926:56;;;;;;;;;;;;;;;;37707:188;;;;;;;;;;-1:-1:-1;37707:188:0;;;;;:::i;:::-;;:::i;16181:36::-;;;;;;;;;;;;;;;;21405:120;;;;;;;;;;-1:-1:-1;21405:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21497:20:0;21473:4;21497:20;;;:11;:20;;;;;;;;;21405:120;5876:79;;;;;;;;;;-1:-1:-1;5914:7:0;5941:6;-1:-1:-1;;;;;5941:6:0;5876:79;;38543:178;;;;;;;;;;-1:-1:-1;38543:178:0;;;;;:::i;:::-;;:::i;19591:87::-;;;;;;;;;;;;;:::i;39249:596::-;;;;;;;;;;-1:-1:-1;39249:596:0;;;;;:::i;:::-;;:::i;21128:269::-;;;;;;;;;;-1:-1:-1;21128:269:0;;;;;:::i;:::-;;:::i;20086:167::-;;;;;;;;;;-1:-1:-1;20086:167:0;;;;;:::i;:::-;;:::i;15218:29::-;;;;;;;;;;;;;;;;16086:36;;;;;;;;;;;;;;;;16224:38;;;;;;;;;;;;;;;;16276:31;;;;;;;;;;;;;;;;36972:190;;;;;;;;;;-1:-1:-1;36972:190:0;;;;;:::i;:::-;;:::i;15991:36::-;;;;;;;;;;;;;;;;20261:143;;;;;;;;;;-1:-1:-1;20261:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20369:18:0;;;20342:7;20369:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20261:143;36850:110;;;;;;;;;;-1:-1:-1;36850:110:0;;;;;:::i;:::-;;:::i;18969:523::-;;;;;;;;;;-1:-1:-1;18969:523:0;;;;;:::i;:::-;;:::i;36514:112::-;;;;;;;;;;-1:-1:-1;36514:112:0;;;;;:::i;:::-;;:::i;6257:244::-;;;;;;;;;;-1:-1:-1;6257:244:0;;;;;:::i;:::-;;:::i;15182:29::-;;;;;;;;;;;;;;;;16974:31;;;;;;;;;;-1:-1:-1;16974:31:0;;;;-1:-1:-1;;;16974:31:0;;;;;;19500:83;19537:13;19570:5;19563:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19500:83;:::o;38239:175::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;;;;;;;;;38360:46:::1;38382:23;38360:17;38372:4;38360:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;38342:15;:64:::0;-1:-1:-1;38239:175:0:o;20412:161::-;20487:4;20504:39;260:10;20527:7;20536:6;20504:8;:39::i;:::-;-1:-1:-1;20561:4:0;20412:161;;;;;:::o;38729:511::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;38876:4:::1;38857:23:::0;::::1;38849:81;;;::::0;-1:-1:-1;;;38849:81:0;;13727:2:1;38849:81:0::1;::::0;::::1;13709:21:1::0;13766:2;13746:18;;;13739:30;13805:34;13785:18;;;13778:62;-1:-1:-1;;;13856:18:1;;;13849:44;13910:19;;38849:81:0::1;13699:236:1::0;38849:81:0::1;38993:9;::::0;38966:12:::1;::::0;39005:9;;38989:13:::1;::::0;-1:-1:-1;;;38993:9:0;::::1;;;38989:2;:13;:::i;:::-;38981:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;38966:55;;39061:4;39042:15;39052:4;39042:9;:15::i;:::-;:23;;39034:63;;;::::0;-1:-1:-1;;;39034:63:0;;13011:2:1;39034:63:0::1;::::0;::::1;12993:21:1::0;13050:2;13030:18;;;13023:30;13089:29;13069:18;;;13062:57;13136:18;;39034:63:0::1;12983:177:1::0;39034:63:0::1;39114:6;39110:123;39124:20:::0;;::::1;39110:123;;;39165:52;39175:4;39180:9;;39190:1;39180:12;;;;;-1:-1:-1::0;;;39180:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39206:9;::::0;39202:13:::1;::::0;-1:-1:-1;;;39206:9:0;::::1;;;39202:2;:13;:::i;:::-;39194:21;::::0;:6;:21:::1;:::i;:::-;39165:9;:52::i;:::-;39146:3:::0;::::1;::::0;::::1;:::i;:::-;;;;39110:123;;;;6080:1;38729:511:::0;;;;:::o;20581:313::-;20679:4;20696:36;20706:6;20714:9;20725:6;20696:9;:36::i;:::-;20743:121;20752:6;260:10;20774:89;20812:6;20774:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20774:19:0;;;;;;:11;:19;;;;;;;;260:10;20774:33;;;;;;;;;;:37;:89::i;:::-;20743:8;:121::i;:::-;-1:-1:-1;20882:4:0;20581:313;;;;;:::o;38054:177::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;38155:30:::1;::::0;-1:-1:-1;;;38155:30:0;;38179:4:::1;38155:30;::::0;::::1;8175:51:1::0;38137:15:0::1;::::0;-1:-1:-1;;;;;38155:15:0;::::1;::::0;::::1;::::0;8148:18:1;;38155:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38196:27;::::0;-1:-1:-1;;;38196:27:0;;-1:-1:-1;;;;;8738:32:1;;;38196:27:0::1;::::0;::::1;8720:51:1::0;8787:18;;;8780:34;;;38137:48:0;;-1:-1:-1;38196:14:0;;::::1;::::0;::::1;::::0;8693:18:1;;38196:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6080:1;38054:177:::0;;:::o;18187:337::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;18274:11:::1;:21:::0;;-1:-1:-1;;;;18274:21:0::1;-1:-1:-1::0;;;18274:21:0;::::1;;;;::::0;;18306:32:::1;18332:4;18306:17;:32::i;:::-;18367:13;::::0;18349:32:::1;::::0;-1:-1:-1;;;;;18367:13:0::1;18349:17;:32::i;:::-;18395:11;::::0;-1:-1:-1;;;18395:11:0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;18410:10:0::1;::::0;:15;18395:30:::1;18392:125;;;18454:12;18441:10;:25:::0;18481:10:::1;:24:::0;;;18392:125:::1;18187:337:::0;;:::o;22465:253::-;22531:7;22570;;22559;:18;;22551:73;;;;-1:-1:-1;;;22551:73:0;;11078:2:1;22551:73:0;;;11060:21:1;11117:2;11097:18;;;11090:30;11156:34;11136:18;;;11129:62;-1:-1:-1;;;11207:18:1;;;11200:40;11257:19;;22551:73:0;11050:232:1;22551:73:0;22635:19;22658:10;:8;:10::i;:::-;22635:33;-1:-1:-1;22686:24:0;:7;22635:33;22686:11;:24::i;:::-;22679:31;22465:253;-1:-1:-1;;;22465:253:0:o;38422:113::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38495:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;38495:32:0::1;38523:4;38495:32;::::0;;38422:113::o;22997:479::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23079:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23071:60;;;::::0;-1:-1:-1;;;23071:60:0;;12655:2:1;23071:60:0::1;::::0;::::1;12637:21:1::0;12694:2;12674:18;;;12667:30;12733:29;12713:18;;;12706:57;12780:18;;23071:60:0::1;12627:177:1::0;23071:60:0::1;23147:9;23142:327;23166:9;:16:::0;23162:20;::::1;23142:327;;;23224:7;-1:-1:-1::0;;;;;23208:23:0::1;:9;23218:1;23208:12;;;;;;-1:-1:-1::0;;;23208:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23208:12:0::1;:23;23204:254;;;23267:9;23277:16:::0;;:20:::1;::::0;23296:1:::1;::::0;23277:20:::1;:::i;:::-;23267:31;;;;;;-1:-1:-1::0;;;23267:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;23252:9:::1;:12:::0;;-1:-1:-1;;;;;23267:31:0;;::::1;::::0;23262:1;;23252:12;::::1;;;-1:-1:-1::0;;;23252:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23252:46:0::1;-1:-1:-1::0;;;;;23252:46:0;;::::1;;::::0;;23317:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23356:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23356:28:0::1;::::0;;23403:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;23403:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23403:15:0;;;;;-1:-1:-1;;;;;;23403:15:0::1;::::0;;;;;18187:337;;:::o;23204:254::-:1;23184:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23142:327;;18756:205:::0;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;18817:11:::1;:17:::0;;-1:-1:-1;;;;18817:17:0::1;::::0;;18862:7:::1;::::0;:24:::1;::::0;18884:1:::1;::::0;18862:17:::1;::::0;18874:4:::1;18862:11;:17::i;:24::-;18844:15;:42:::0;18904:49:::1;18928:24;18946:4;18928:9;:24::i;:::-;18904:23;:49::i;:::-;18756:205::o:0;20902:218::-;260:10;20990:4;21039:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21039:34:0;;;;;;;;;;20990:4;;21007:83;;21030:7;;21039:50;;21078:10;21039:38;:50::i;21632:377::-;260:10;21684:14;21733:19;;;:11;:19;;;;;;;;21732:20;21724:77;;;;-1:-1:-1;;;21724:77:0;;16882:2:1;21724:77:0;;;16864:21:1;16921:2;16901:18;;;16894:30;16960:34;16940:18;;;16933:62;-1:-1:-1;;;17011:18:1;;;17004:42;17063:19;;21724:77:0;16854:234:1;21724:77:0;21813:15;21837:19;21848:7;21837:10;:19::i;:::-;-1:-1:-1;;;;;;;;;21885:15:0;;;;;;:7;:15;;;;;;21812:44;;-1:-1:-1;21885:28:0;;:15;-1:-1:-1;21812:44:0;21885:19;:28::i;:::-;-1:-1:-1;;;;;21867:15:0;;;;;;:7;:15;;;;;:46;21934:7;;:20;;21946:7;21934:11;:20::i;:::-;21924:7;:30;21978:10;;:23;;21993:7;21978:14;:23::i;:::-;21965:10;:36;-1:-1:-1;;;21632:377:0:o;18648:96::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;18717:11:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;18717:19:0::1;-1:-1:-1::0;;;;18717:19:0;;::::1;::::0;;;::::1;::::0;;18648:96::o;22021:436::-;22111:7;22150;;22139;:18;;22131:62;;;;-1:-1:-1;;;22131:62:0;;13367:2:1;22131:62:0;;;13349:21:1;13406:2;13386:18;;;13379:30;13445:33;13425:18;;;13418:61;13496:18;;22131:62:0;13339:181:1;22131:62:0;22209:17;22204:246;;22244:15;22268:19;22279:7;22268:10;:19::i;:::-;-1:-1:-1;22243:44:0;;-1:-1:-1;22302:14:0;;-1:-1:-1;;;;;22302:14:0;22204:246;22351:23;22382:19;22393:7;22382:10;:19::i;:::-;-1:-1:-1;22349:52:0;;-1:-1:-1;22416:22:0;;-1:-1:-1;;;;;22416:22:0;18538:102;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;18610:14:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;18610:22:0::1;-1:-1:-1::0;;;;18610:22:0;;::::1;::::0;;;::::1;::::0;;18538:102::o;22726:263::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22805:16:0;::::1;22824:1;22805:16:::0;;;:7:::1;:16;::::0;;;;;:20;22802:108:::1;;-1:-1:-1::0;;;;;22881:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22861:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22842:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22802:108:::1;-1:-1:-1::0;;;;;22920:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22920:27:0::1;22943:4;22920:27:::0;;::::1;::::0;;;22958:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22958:23:0::1;::::0;;::::1;::::0;;22726:263::o;37428:267::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;37528:9:::1;37523:165;37539:20:::0;;::::1;37523:165;;;37585:10;:24;37596:9;;37606:1;37596:12;;;;;-1:-1:-1::0;;;37596:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37585:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;37585:24:0;;::::1;;37581:96;;37655:6;37629:9;:23;37639:9;;37649:1;37639:12;;;;;-1:-1:-1::0;;;37639:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37629:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;37629:23:0;:32;;-1:-1:-1;;37629:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37581:96:::1;37561:3;::::0;::::1;:::i;:::-;;;37523:165;;39853:299:::0;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;39990:17:::1;:33:::0;;;;40034:17:::1;:33:::0;40078:11:::1;:21:::0;40110:18:::1;:34:::0;39853:299::o;19880:198::-;-1:-1:-1;;;;;19970:20:0;;19946:7;19970:20;;;:11;:20;;;;;;;;19966:49;;;-1:-1:-1;;;;;;19999:16:0;;;;;:7;:16;;;;;;;19880:198::o;19966:49::-;-1:-1:-1;;;;;20053:16:0;;;;;;:7;:16;;;;;;20033:37;;:19;:37::i;6101:148::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;6208:1:::1;6192:6:::0;;6171:40:::1;::::0;-1:-1:-1;;;;;6192:6:0;;::::1;::::0;6171:40:::1;::::0;6208:1;;6171:40:::1;6239:1;6222:19:::0;;-1:-1:-1;;;;;;6222:19:0::1;::::0;;6101:148::o;36634:198::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;36721:9:::1;36716:109;36732:20:::0;;::::1;36716:109;;;36809:4;36774:18;:32;36793:9;;36803:1;36793:12;;;;;-1:-1:-1::0;;;36793:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36774:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;36774:32:0;:39;;-1:-1:-1;;36774:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36754:3:::1;::::0;::::1;:::i;:::-;;;36716:109;;;;36634:198:::0;;:::o;37911:135::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;37996:42:::1;::::0;-1:-1:-1;;;;;37996:19:0;::::1;::::0;38016:21:::1;37996:42:::0;::::1;;;::::0;::::1;::::0;;;38016:21;37996:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;37707:188:::0;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;37794:9:::1;37789:99;37805:20:::0;;::::1;37789:99;;;37872:4;37847:10;:24;37858:9;;37868:1;37858:12;;;;;-1:-1:-1::0;;;37858:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37847:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;37847:24:0;:29;;-1:-1:-1;;37847:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37827:3:::1;::::0;::::1;:::i;:::-;;;37789:99;;38543:178:::0;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;38697:16:::1;38677;38667:7;;:26;;;;:::i;:::-;38666:47;;;;:::i;:::-;38650:13;:63:::0;-1:-1:-1;;38543:178:0:o;19591:87::-;19630:13;19663:7;19656:14;;;;;:::i;39249:596::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;39417:16:::1;:32:::0;;;39460:16:::1;:32:::0;;;39503:10:::1;:20:::0;;;39534:17:::1;:33:::0;;;39580:13:::1;:29:::0;;;39620:12:::1;:28:::0;;;39659:6:::1;:16:::0;;;39686:12:::1;:28:::0;;;39725:12:::1;:26:::0;;;39775:60:::1;39738:13:::0;39775:42:::1;39516:7:::0;39775:42;39436:13;39479;39775:16:::1;:30::i;:::-;:34:::0;::::1;:42::i;:60::-;39764:8;:71:::0;-1:-1:-1;;;;;39249:596:0:o;21128:269::-;21221:4;21238:129;260:10;21261:7;21270:96;21309:15;21270:96;;;;;;;;;;;;;;;;;260:10;21270:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21270:34:0;;;;;;;;;;;;:38;:96::i;20086:167::-;20164:4;20181:42;260:10;20205:9;20216:6;20181:9;:42::i;36972:190::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;37069:15:::1;:43:::0;;-1:-1:-1;;;;;37069:43:0;;::::1;-1:-1:-1::0;;;;;;37069:43:0;;::::1;;::::0;;;37123:9:::1;:31:::0;;;;;::::1;::::0;::::1;;::::0;;36972:190::o;36850:110::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36917:27:0::1;36947:5;36917:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;36917:35:0::1;::::0;;36850:110::o;18969:523::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;19042:29:::1;19093:9;19042:61;;19114:16;19151:10;-1:-1:-1::0;;;;;19151:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19133:47:0::1;;19189:4;19196:10;-1:-1:-1::0;;;;;19196:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19133:81;::::0;-1:-1:-1;;;;;;19133:81:0::1;::::0;;;;;;-1:-1:-1;;;;;8467:15:1;;;19133:81:0::1;::::0;::::1;8449:34:1::0;8519:15;;8499:18;;;8492:43;8384:18;;19133:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19114:100:::0;-1:-1:-1;;;;;;19229:22:0;::::1;19225:221;;19302:10;-1:-1:-1::0;;;;;19302:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19284:50:0::1;;19343:4;19350:10;-1:-1:-1::0;;;;;19350:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19284:84;::::0;-1:-1:-1;;;;;;19284:84:0::1;::::0;;;;;;-1:-1:-1;;;;;8467:15:1;;;19284:84:0::1;::::0;::::1;8449:34:1::0;8519:15;;8499:18;;;8492:43;8384:18;;19284:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19268:13;:100:::0;;-1:-1:-1;;;;;;19268:100:0::1;-1:-1:-1::0;;;;;19268:100:0;;;::::1;::::0;;;::::1;::::0;;19225:221:::1;;;19410:13;:24:::0;;-1:-1:-1;;;;;;19410:24:0::1;-1:-1:-1::0;;;;;19410:24:0;::::1;;::::0;;19225:221:::1;-1:-1:-1::0;19456:15:0::1;:28:::0;;-1:-1:-1;;;;;;19456:28:0::1;-1:-1:-1::0;;;;;19456:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;18969:523:0:o;36514:112::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36584:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;36584:34:0::1;36614:4;36584:34;::::0;;36514:112::o;6257:244::-;6010:6;;-1:-1:-1;;;;;6010:6:0;260:10;6010:22;6002:67;;;;-1:-1:-1;;;6002:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6346:22:0;::::1;6338:73;;;::::0;-1:-1:-1;;;6338:73:0;;11489:2:1;6338:73:0::1;::::0;::::1;11471:21:1::0;11528:2;11508:18;;;11501:30;11567:34;11547:18;;;11540:62;-1:-1:-1;;;11618:18:1;;;11611:36;11664:19;;6338:73:0::1;11461:228:1::0;6338:73:0::1;6448:6;::::0;;6427:38:::1;::::0;-1:-1:-1;;;;;6427:38:0;;::::1;::::0;6448:6;::::1;::::0;6427:38:::1;::::0;::::1;6476:6;:17:::0;;-1:-1:-1;;;;;;6476:17:0::1;-1:-1:-1::0;;;;;6476:17:0;;;::::1;::::0;;;::::1;::::0;;6257:244::o;2035:132::-;2093:7;2120:39;2124:1;2127;2120:39;;;;;;;;;;;;;;;;;:3;:39::i;1775:250::-;1833:7;1857:6;1853:47;;-1:-1:-1;1887:1:0;1880:8;;1853:47;1912:9;1924:5;1928:1;1924;:5;:::i;:::-;1912:17;-1:-1:-1;1957:1:0;1948:5;1952:1;1912:17;1948:5;:::i;:::-;:10;1940:56;;;;-1:-1:-1;;;1940:56:0;;14142:2:1;1940:56:0;;;14124:21:1;14181:2;14161:18;;;14154:30;14220:34;14200:18;;;14193:62;-1:-1:-1;;;14271:18:1;;;14264:31;14312:19;;1940:56:0;14114:223:1;1242:181:0;1300:7;;1332:5;1336:1;1332;:5;:::i;:::-;1320:17;;1361:1;1356;:6;;1348:46;;;;-1:-1:-1;;;1348:46:0;;12299:2:1;1348:46:0;;;12281:21:1;12338:2;12318:18;;;12311:30;12377:29;12357:18;;;12350:57;12424:18;;1348:46:0;12271:177:1;23484:337:0;-1:-1:-1;;;;;23577:19:0;;23569:68;;;;-1:-1:-1;;;23569:68:0;;16124:2:1;23569:68:0;;;16106:21:1;16163:2;16143:18;;;16136:30;16202:34;16182:18;;;16175:62;-1:-1:-1;;;16253:18:1;;;16246:34;16297:19;;23569:68:0;16096:226:1;23569:68:0;-1:-1:-1;;;;;23656:21:0;;23648:68;;;;-1:-1:-1;;;23648:68:0;;11896:2:1;23648:68:0;;;11878:21:1;11935:2;11915:18;;;11908:30;11974:34;11954:18;;;11947:62;-1:-1:-1;;;12025:18:1;;;12018:32;12067:19;;23648:68:0;11868:224:1;23648:68:0;-1:-1:-1;;;;;23729:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23781:32;;17591:25:1;;;23781:32:0;;17564:18:1;23781:32:0;;;;;;;23484:337;;;:::o;23829:2332::-;-1:-1:-1;;;;;23951:18:0;;23943:68;;;;-1:-1:-1;;;23943:68:0;;15315:2:1;23943:68:0;;;15297:21:1;15354:2;15334:18;;;15327:30;15393:34;15373:18;;;15366:62;-1:-1:-1;;;15444:18:1;;;15437:35;15489:19;;23943:68:0;15287:227:1;23943:68:0;-1:-1:-1;;;;;24030:16:0;;24022:64;;;;-1:-1:-1;;;24022:64:0;;10674:2:1;24022:64:0;;;10656:21:1;10713:2;10693:18;;;10686:30;10752:34;10732:18;;;10725:62;-1:-1:-1;;;10803:18:1;;;10796:33;10846:19;;24022:64:0;10646:225:1;24022:64:0;24114:1;24105:6;:10;24097:64;;;;-1:-1:-1;;;24097:64:0;;14905:2:1;24097:64:0;;;14887:21:1;14944:2;14924:18;;;14917:30;14983:34;14963:18;;;14956:62;-1:-1:-1;;;15034:18:1;;;15027:39;15083:19;;24097:64:0;14877:231:1;24097:64:0;-1:-1:-1;;;;;24181:15:0;;;;;;:9;:15;;;;;;;;24180:16;24172:52;;;;-1:-1:-1;;;24172:52:0;;17295:2:1;24172:52:0;;;17277:21:1;17334:2;17314:18;;;17307:30;17373:25;17353:18;;;17346:53;17416:18;;24172:52:0;17267:173:1;24172:52:0;5914:7;5941:6;-1:-1:-1;;;;;24239:14:0;;;5941:6;;24239:14;;;;:30;;-1:-1:-1;5914:7:0;5941:6;-1:-1:-1;;;;;24257:12:0;;;5941:6;;24257:12;;24239:30;24235:84;;;24279:11;;-1:-1:-1;;;24279:11:0;;;;24271:48;;;;-1:-1:-1;;;24271:48:0;;16529:2:1;24271:48:0;;;16511:21:1;16568:2;16548:18;;;16541:30;16607:26;16587:18;;;16580:54;16651:18;;24271:48:0;16501:174:1;24271:48:0;24458:13;;24381:12;;-1:-1:-1;;;;;24452:19:0;;;24458:13;;24452:19;;:40;;-1:-1:-1;24479:13:0;;-1:-1:-1;;;;;24475:17:0;;;24479:13;;24475:17;24452:40;24451:99;;;;-1:-1:-1;;;;;;24499:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;24527:22:0;;;;;;:18;:22;;;;;;;;24499:50;24497:53;24451:99;24446:148;;;-1:-1:-1;24578:4:0;24446:148;24620:1;24609:10;;:12;:59;;;;-1:-1:-1;;;;;;24627:22:0;;;;;;:18;:22;;;;;;;;24626:23;:41;;;;-1:-1:-1;5914:7:0;5941:6;-1:-1:-1;;;;;24653:14:0;;;5941:6;;24653:14;;24626:41;24609:106;;;;;24702:12;24688:10;;24675;;:23;;;;:::i;:::-;24674:40;24672:43;24609:106;24606:247;;;24766:15;;24751:13;24761:2;24751:9;:13::i;:::-;24743:21;;:6;:21;:::i;:::-;:38;;24735:106;;;;-1:-1:-1;;;24735:106:0;;15721:2:1;24735:106:0;;;15703:21:1;15760:2;15740:18;;;15733:30;15799:34;15779:18;;;15772:62;-1:-1:-1;;;15850:18:1;;;15843:32;15892:19;;24735:106:0;15693:224:1;24735:106:0;24891:8;;24875:15;:24;24924:17;;24910:13;:31;24957:11;;-1:-1:-1;;;24957:11:0;;;;:34;;;;-1:-1:-1;24978:13:0;;-1:-1:-1;;;;;24972:19:0;;;24978:13;;24972:19;24957:34;24954:194;;;25032:57;25077:11;;25032:40;25054:17;;25032;;:21;;:40;;;;:::i;:57::-;25015:15;:74;25118:18;;25104:13;:32;24954:194;25218:1;25207:10;;:12;:56;;;;;25251:12;25237:10;;25224;;:23;;;;:::i;:::-;25223:40;25207:56;25204:109;;;-1:-1:-1;;;;;25283:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;25283:18:0;25297:4;25283:18;;;25204:109;25425:1;25414:10;;:12;:30;;;;-1:-1:-1;5914:7:0;5941:6;-1:-1:-1;;;;;25430:14:0;;;5941:6;;25430:14;;25414:30;:75;;;;;25478:10;;25465;;:23;;;;:::i;:::-;25448:12;:41;;25414:75;:91;;;;-1:-1:-1;25494:11:0;;-1:-1:-1;;;25494:11:0;;;;25414:91;25411:154;;;25541:3;25525:15;:19;25411:154;25580:14;;-1:-1:-1;;;25580:14:0;;;;25577:150;;;25614:11;;-1:-1:-1;;;25614:11:0;;;;:36;;;;-1:-1:-1;25637:13:0;;-1:-1:-1;;;;;25629:21:0;;;25637:13;;25629:21;25614:36;25611:105;;;25698:1;25682:15;:17;25611:105;25760:6;;-1:-1:-1;;;25760:6:0;;;;25759:7;:22;;;;-1:-1:-1;25770:11:0;;-1:-1:-1;;;25770:11:0;;;;25759:22;:45;;;;-1:-1:-1;25791:13:0;;-1:-1:-1;;;;;25785:19:0;;;25791:13;;25785:19;25759:45;25755:350;;;25829:28;25860:24;25878:4;25860:9;:24::i;:::-;25829:55;;25938:13;;25916:20;:35;25913:169;;-1:-1:-1;25998:13:0;;26034:32;25998:13;26034:10;:32::i;:::-;25755:350;;26115:38;26130:4;26135:2;26138:6;26145:7;26115:14;:38::i;1575:192::-;1661:7;1697:12;1689:6;;;;1681:29;;;;-1:-1:-1;;;1681:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1721:9:0;1733:5;1737:1;1733;:5;:::i;:::-;1721:17;1575:192;-1:-1:-1;;;;;1575:192:0:o;35051:163::-;35092:7;35113:15;35130;35149:19;:17;:19::i;:::-;35112:56;;-1:-1:-1;35112:56:0;-1:-1:-1;35186:20:0;35112:56;;35186:11;:20::i;:::-;35179:27;;;;35051:163;:::o;27676:1519::-;17317:6;:13;;-1:-1:-1;;;;17317:13:0;-1:-1:-1;;;17317:13:0;;;27887:8:::1;::::0;27855:12:::1;::::0;17317:13;;27816:101:::1;::::0;27915:1:::1;::::0;27816:80:::1;::::0;;;:20;;:38:::1;:52::i;:::-;:70:::0;::::1;:80::i;:101::-;27790:127:::0;-1:-1:-1;27930:20:0::1;27953:41;:20:::0;27790:127;27953:24:::1;:41::i;:::-;27930:64;;28015:30;28032:12;28015:16;:30::i;:::-;28147:12;::::0;28078:21:::1;::::0;28058:17:::1;::::0;28134:33:::1;::::0;28147:19:::1;::::0;28164:1:::1;28147:16;:19::i;:::-;28134:8;::::0;;:12:::1;:33::i;:::-;28112:55;;28180:26;28209:93;28300:1;28209:72;28269:11;28209:41;28237:12;;28209:9;:27;;:41;;;;:::i;:93::-;28180:122;;28323:20;28346:38;28372:11;28346:21;28360:6;;28346:9;:13;;:21;;;;:::i;:38::-;28323:61;;28395:26;28424:68;28470:11;28424:27;28438:12;;28424:9;:13;;:27;;;;:::i;:68::-;28395:97;;28505:26;28534:70;28581:11;28534:27;28548:12;;28534:9;:13;;:27;;;;:::i;:70::-;28505:99:::0;-1:-1:-1;28706:21:0::1;28741:22:::0;;28738:216:::1;;28812:15;::::0;28780:48:::1;::::0;28793:18;;-1:-1:-1;;;;;28812:15:0::1;28780:12;:48::i;:::-;28875:15;::::0;28843:48:::1;::::0;28856:18;;-1:-1:-1;;;;;28875:15:0::1;28843:12;:48::i;:::-;28932:9;::::0;28906:36:::1;::::0;28919:12;;-1:-1:-1;;;;;28932:9:0::1;28906:12;:36::i;:::-;28968:19:::0;;28964:104:::1;;29008:48;29021:15;29037:18;29008:12;:48::i;:::-;29090:13;::::0;29104:4:::1;::::0;29080:50:::1;::::0;-1:-1:-1;;;;;29090:13:0;;::::1;::::0;29104:4:::1;29109:20:::0;29080:9:::1;:50::i;:::-;29156:13;;;;;;;;;-1:-1:-1::0;;;;;29156:13:0::1;-1:-1:-1::0;;;;;29141:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17353:6:0;:14;;-1:-1:-1;;;;17353:14:0;;;-1:-1:-1;;;;;;;;;;;;27676:1519:0:o;33849:419::-;33908:7;33917;33926;33935;33944;33953;33974:23;33999:12;34013:18;34035:20;34047:7;34035:11;:20::i;:::-;33973:82;;;;;;34067:15;34084:23;34109:12;34125:50;34137:7;34146:4;34152:10;34164;:8;:10::i;:::-;34125:11;:50::i;:::-;34066:109;;;;-1:-1:-1;34066:109:0;;-1:-1:-1;34226:15:0;;-1:-1:-1;34243:4:0;;-1:-1:-1;34249:10:0;;-1:-1:-1;33849:419:0;;-1:-1:-1;;;;;33849:419:0:o;1431:136::-;1489:7;1516:43;1520:1;1523;1516:43;;;;;;;;;;;;;;;;;:3;:43::i;2175:278::-;2261:7;2296:12;2289:5;2281:28;;;;-1:-1:-1;;;2281:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2320:9:0;2332:5;2336:1;2332;:5;:::i;26169:1372::-;17317:6;:13;;-1:-1:-1;;;;17317:13:0;-1:-1:-1;;;17317:13:0;;;26367:8:::1;::::0;26335:12:::1;::::0;17317:13;;26296:101:::1;::::0;26395:1:::1;::::0;26296:80:::1;::::0;;;:20;;:38:::1;:52::i;:101::-;26270:127:::0;-1:-1:-1;26410:20:0::1;26433:41;:20:::0;26270:127;26433:24:::1;:41::i;:::-;26410:64;;26495:30;26512:12;26495:16;:30::i;:::-;26627:12;::::0;26558:21:::1;::::0;26538:17:::1;::::0;26614:33:::1;::::0;26627:19:::1;::::0;26644:1:::1;26627:16;:19::i;26614:33::-;26592:55;;26660:26;26689:93;26780:1;26689:72;26749:11;26689:41;26717:12;;26689:9;:27;;:41;;;;:::i;:93::-;26660:122;;26803:20;26826:38;26852:11;26826:21;26840:6;;26826:9;:13;;:21;;;;:::i;:38::-;26803:61;;26875:26;26904:68;26950:11;26904:27;26918:12;;26904:9;:13;;:27;;;;:::i;:68::-;26875:97;;26984:26;27013:68;27059:11;27013:27;27027:12;;27013:9;:13;;:27;;;;:::i;:68::-;26984:97:::0;-1:-1:-1;27172:21:0::1;27207:22:::0;;27204:216:::1;;27278:15;::::0;27246:48:::1;::::0;27259:18;;-1:-1:-1;;;;;27278:15:0::1;27246:12;:48::i;:::-;27341:15;::::0;27309:48:::1;::::0;27322:18;;-1:-1:-1;;;;;27341:15:0::1;27309:12;:48::i;:::-;27398:9;::::0;27372:36:::1;::::0;27385:12;;-1:-1:-1;;;;;27398:9:0::1;27372:12;:36::i;:::-;27434:19:::0;;27430:104:::1;;27474:48;27487:15;27503:18;27474:12;:48::i;:::-;-1:-1:-1::0;;17353:6:0;:14;;-1:-1:-1;;;;17353:14:0;;;-1:-1:-1;;;;;;;;26169:1372:0:o;30415:943::-;30555:13;;30605:15;;30635:7;30631:88;;30674:1;30658:13;:17;;;30690:15;:17;30631:88;-1:-1:-1;;;;;30743:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;30767:22:0;;;;;;:11;:22;;;;;;;;30766:23;30743:46;30739:467;;;30806:48;30828:6;30836:9;30847:6;30806:21;:48::i;:::-;30739:467;;;-1:-1:-1;;;;;30877:19:0;;;;;;:11;:19;;;;;;;;30876:20;:46;;;;-1:-1:-1;;;;;;30900:22:0;;;;;;:11;:22;;;;;;;;30876:46;30872:334;;;30939:46;30959:6;30967:9;30978:6;30939:19;:46::i;30872:334::-;-1:-1:-1;;;;;31007:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;31030:22:0;;;;;;:11;:22;;;;;;;;31007:45;31003:203;;;31069:48;31091:6;31099:9;31110:6;31069:21;:48::i;31003:203::-;31150:44;31168:6;31176:9;31187:6;31150:17;:44::i;:::-;31230:7;31226:125;;31253:13;:38;;;;31306:15;:33;-1:-1:-1;;;;30415:943:0:o;35222:561::-;35319:7;;35355;;35272;;;;;35379:289;35403:9;:16;35399:20;;35379:289;;;35469:7;35445;:21;35453:9;35463:1;35453:12;;;;;;-1:-1:-1;;;35453:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35453:12:0;35445:21;;;;;;;;;;;;;:31;;:66;;;35504:7;35480;:21;35488:9;35498:1;35488:12;;;;;;-1:-1:-1;;;35488:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35488:12:0;35480:21;;;;;;;;;;;;;:31;35445:66;35441:97;;;35521:7;;35530;;35513:25;;;;;;;35222:561;;:::o;35441:97::-;35563:34;35575:7;:21;35583:9;35593:1;35583:12;;;;;;-1:-1:-1;;;35583:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35583:12:0;35575:21;;;;;;;;;;;;;35563:7;;:11;:34::i;:::-;35553:44;;35622:34;35634:7;:21;35642:9;35652:1;35642:12;;;;;;-1:-1:-1;;;35642:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35642:12:0;35634:21;;;;;;;;;;;;;35622:7;;:11;:34::i;:::-;35612:44;-1:-1:-1;35421:3:0;;;;:::i;:::-;;;;35379:289;;;-1:-1:-1;35704:7:0;;35692;;:20;;:11;:20::i;:::-;35682:7;:30;35678:61;;;35722:7;;35731;;35714:25;;;;;;35222:561;;:::o;35678:61::-;35758:7;;35767;;-1:-1:-1;35222:561:0;-1:-1:-1;35222:561:0:o;29214:666::-;29364:16;;;29378:1;29364:16;;;;;;;;29340:21;;29364:16;;;;;;;;;;-1:-1:-1;29364:16:0;29340:40;;29409:4;29391;29396:1;29391:7;;;;;;-1:-1:-1;;;29391:7:0;;;;;;;;;-1:-1:-1;;;;;29391:23:0;;;:7;;;;;;;;;;:23;;;;29435:15;;:22;;;-1:-1:-1;;;29435:22:0;;;;:15;;;;;:20;;:22;;;;;29391:7;;29435:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29425:4;29430:1;29425:7;;;;;;-1:-1:-1;;;29425:7:0;;;;;;;;;-1:-1:-1;;;;;29425:32:0;;;:7;;;;;;;;;:32;29502:15;;29470:62;;29487:4;;29502:15;29520:11;29470:8;:62::i;:::-;29571:15;;:240;;-1:-1:-1;;;29571:240:0;;-1:-1:-1;;;;;29571:15:0;;;;:66;;:240;;29652:11;;29571:15;;29722:4;;29749;;29785:15;;29571:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29837:35;29854:11;29867:4;29837:35;;;;;;;:::i;:::-;;;;;;;;29214:666;;:::o;27553:111::-;27633:23;;-1:-1:-1;;;;;27633:15:0;;;:23;;;;;27649:6;;27633:23;;;;27649:6;27633:15;:23;;;;;;;;;;;;;;;;;;;29894:513;30074:15;;30042:62;;30059:4;;-1:-1:-1;;;;;30074:15:0;30092:11;30042:8;:62::i;:::-;30147:15;;-1:-1:-1;;;;;30147:15:0;:31;30186:9;30219:4;30239:11;30147:15;;30351:7;5914;5941:6;-1:-1:-1;;;;;5941:6:0;;5876:79;30351:7;30147:252;;;;;;-1:-1:-1;;;;;;30147:252:0;;;-1:-1:-1;;;;;9184:15:1;;;30147:252:0;;;9166:34:1;9216:18;;;9209:34;;;;9259:18;;;9252:34;;;;9302:18;;;9295:34;9366:15;;;9345:19;;;9338:44;30373:15:0;9398:19:1;;;9391:35;9100:19;;30147:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29894:513;;:::o;34276:330::-;34336:7;34345;34354;34374:12;34389:24;34405:7;34389:15;:24::i;:::-;34374:39;;34424:18;34445:30;34467:7;34445:21;:30::i;:::-;34424:51;-1:-1:-1;34486:23:0;34512:33;34424:51;34512:17;:7;34524:4;34512:11;:17::i;:::-;:21;;:33::i;:::-;34486:59;34581:4;;-1:-1:-1;34587:10:0;;-1:-1:-1;34276:330:0;;-1:-1:-1;;;34276:330:0:o;34614:429::-;34729:7;;;;34785:24;:7;34797:11;34785;:24::i;:::-;34767:42;-1:-1:-1;34820:12:0;34835:21;:4;34844:11;34835:8;:21::i;:::-;34820:36;-1:-1:-1;34867:18:0;34888:27;:10;34903:11;34888:14;:27::i;:::-;34867:48;-1:-1:-1;34926:23:0;34952:33;34867:48;34952:17;:7;34964:4;34952:11;:17::i;:33::-;35004:7;;;;-1:-1:-1;35030:4:0;;-1:-1:-1;34614:429:0;;-1:-1:-1;;;;;;;34614:429:0:o;32470:566::-;32573:15;32590:23;32615:12;32629:23;32654:12;32668:18;32690:19;32701:7;32690:10;:19::i;:::-;-1:-1:-1;;;;;32738:15:0;;;;;;:7;:15;;;;;;32572:137;;-1:-1:-1;32572:137:0;;-1:-1:-1;32572:137:0;;-1:-1:-1;32572:137:0;-1:-1:-1;32572:137:0;-1:-1:-1;32572:137:0;-1:-1:-1;32738:28:0;;32758:7;32738:19;:28::i;:::-;-1:-1:-1;;;;;32720:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32795:7;:15;;;;:28;;32815:7;32795:19;:28::i;:::-;-1:-1:-1;;;;;32777:15:0;;;;;;;:7;:15;;;;;;:46;;;;32855:18;;;;;;;:39;;32878:15;32855:22;:39::i;:::-;-1:-1:-1;;;;;32834:18:0;;;;;;:7;:18;;;;;:60;32908:26;32923:10;32908:14;:26::i;:::-;32945:23;32957:4;32963;32945:11;:23::i;:::-;33001:9;-1:-1:-1;;;;;32984:44:0;32993:6;-1:-1:-1;;;;;32984:44:0;;33012:15;32984:44;;;;17591:25:1;;17579:2;17564:18;;17546:76;32984:44:0;;;;;;;;32470:566;;;;;;;;;:::o;31876:586::-;31977:15;31994:23;32019:12;32033:23;32058:12;32072:18;32094:19;32105:7;32094:10;:19::i;:::-;-1:-1:-1;;;;;32142:15:0;;;;;;:7;:15;;;;;;31976:137;;-1:-1:-1;31976:137:0;;-1:-1:-1;31976:137:0;;-1:-1:-1;31976:137:0;-1:-1:-1;31976:137:0;-1:-1:-1;31976:137:0;-1:-1:-1;32142:28:0;;31976:137;32142:19;:28::i;:::-;-1:-1:-1;;;;;32124:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;32202:18;;;;;:7;:18;;;;;:39;;32225:15;32202:22;:39::i;:::-;-1:-1:-1;;;;;32181:18:0;;;;;;:7;:18;;;;;;;;:60;;;;32273:7;:18;;;;:39;;32296:15;32273:22;:39::i;33044:642::-;33147:15;33164:23;33189:12;33203:23;33228:12;33242:18;33264:19;33275:7;33264:10;:19::i;:::-;-1:-1:-1;;;;;33312:15:0;;;;;;:7;:15;;;;;;33146:137;;-1:-1:-1;33146:137:0;;-1:-1:-1;33146:137:0;;-1:-1:-1;33146:137:0;-1:-1:-1;33146:137:0;-1:-1:-1;33146:137:0;-1:-1:-1;33312:28:0;;33332:7;33312:19;:28::i;:::-;-1:-1:-1;;;;;33294:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33369:7;:15;;;;:28;;33389:7;33369:19;:28::i;31366:502::-;31465:15;31482:23;31507:12;31521:23;31546:12;31560:18;31582:19;31593:7;31582:10;:19::i;:::-;-1:-1:-1;;;;;31630:15:0;;;;;;:7;:15;;;;;;31464:137;;-1:-1:-1;31464:137:0;;-1:-1:-1;31464:137:0;;-1:-1:-1;31464:137:0;-1:-1:-1;31464:137:0;-1:-1:-1;31464:137:0;-1:-1:-1;31630:28:0;;31464:137;31630:19;:28::i;36162:160::-;36226:7;36253:61;36298:5;36253:26;36265:13;;36253:7;:11;;:26;;;;:::i;36334:168::-;36404:7;36431:63;36478:5;36431:28;36443:15;;36431:7;:11;;:28;;;;:::i;35795:355::-;35858:19;35881:10;:8;:10::i;:::-;35858:33;-1:-1:-1;35902:18:0;35923:27;:10;35858:33;35923:14;:27::i;:::-;36002:4;35986:22;;;;:7;:22;;;;;;35902:48;;-1:-1:-1;35986:38:0;;35902:48;35986:26;:38::i;:::-;35977:4;35961:22;;;;:7;:22;;;;;;;;:63;;;;36038:11;:26;;;;;;36035:107;;;36120:4;36104:22;;;;:7;:22;;;;;;:38;;36131:10;36104:26;:38::i;:::-;36095:4;36079:22;;;;:7;:22;;;;;:63;35795:355;;;:::o;33694:147::-;33772:7;;:17;;33784:4;33772:11;:17::i;:::-;33762:7;:27;33813:10;;:20;;33828:4;33813:14;:20::i;:::-;33800:10;:33;-1:-1:-1;;33694: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:660::-;2190:6;2198;2206;2214;2267:2;2255:9;2246:7;2242:23;2238:32;2235:2;;;2288:6;2280;2273:22;2235:2;2332:9;2319:23;2351:31;2376:5;2351:31;:::i;:::-;2401:5;-1:-1:-1;2457:2:1;2442:18;;2429:32;2484:18;2473:30;;2470:2;;;2521:6;2513;2506:22;2470:2;2565:70;2627:7;2618:6;2607:9;2603:22;2565:70;:::i;:::-;2225:521;;2654:8;;-1:-1:-1;2539:96:1;;2736:2;2721:18;2708:32;;2225:521;-1:-1:-1;;;;2225:521:1:o;2751:325::-;2819:6;2827;2880:2;2868:9;2859:7;2855:23;2851:32;2848:2;;;2901:6;2893;2886:22;2848:2;2945:9;2932:23;2964:31;2989:5;2964:31;:::i;:::-;3014:5;3066:2;3051:18;;;;3038:32;;-1:-1:-1;;;2838:238:1:o;3081:457::-;3167:6;3175;3228:2;3216:9;3207:7;3203:23;3199:32;3196:2;;;3249:6;3241;3234:22;3196:2;3294:9;3281:23;3327:18;3319:6;3316:30;3313:2;;;3364:6;3356;3349:22;3313:2;3408:70;3470:7;3461:6;3450:9;3446:22;3408:70;:::i;:::-;3497:8;;3382:96;;-1:-1:-1;3186:352:1;-1:-1:-1;;;;3186:352:1:o;3543:586::-;3635:6;3643;3651;3704:2;3692:9;3683:7;3679:23;3675:32;3672:2;;;3725:6;3717;3710:22;3672:2;3770:9;3757:23;3803:18;3795:6;3792:30;3789:2;;;3840:6;3832;3825:22;3789:2;3884:70;3946:7;3937:6;3926:9;3922:22;3884:70;:::i;:::-;3973:8;;-1:-1:-1;3858:96:1;-1:-1:-1;;4058:2:1;4043:18;;4030:32;4071:28;4030:32;4071:28;:::i;:::-;4118:5;4108:15;;;3662:467;;;;;:::o;4134:251::-;4190:6;4243:2;4231:9;4222:7;4218:23;4214:32;4211:2;;;4264:6;4256;4249:22;4211:2;4308:9;4295:23;4327:28;4349:5;4327:28;:::i;4390:255::-;4457:6;4510:2;4498:9;4489:7;4485:23;4481:32;4478:2;;;4531:6;4523;4516:22;4478:2;4568:9;4562:16;4587:28;4609:5;4587:28;:::i;4650:319::-;4715:6;4723;4776:2;4764:9;4755:7;4751:23;4747:32;4744:2;;;4797:6;4789;4782:22;4744:2;4841:9;4828:23;4860:28;4882:5;4860:28;:::i;4974:411::-;5055:6;5063;5116:2;5104:9;5095:7;5091:23;5087:32;5084:2;;;5137:6;5129;5122:22;5390:190;5449:6;5502:2;5490:9;5481:7;5477:23;5473:32;5470:2;;;5523:6;5515;5508:22;5470:2;-1:-1:-1;5551:23:1;;5460:120;-1:-1:-1;5460:120:1:o;5585:194::-;5655:6;5708:2;5696:9;5687:7;5683:23;5679:32;5676:2;;;5729:6;5721;5714:22;5676:2;-1:-1:-1;5757:16:1;;5666:113;-1:-1:-1;5666:113:1:o;5784:319::-;5849:6;5857;5910:2;5898:9;5889:7;5885:23;5881:32;5878:2;;;5931:6;5923;5916:22;5878:2;5972:9;5959:23;5949:33;;6032:2;6021:9;6017:18;6004:32;6045:28;6067:5;6045:28;:::i;6108:258::-;6176:6;6184;6237:2;6225:9;6216:7;6212:23;6208:32;6205:2;;;6258:6;6250;6243:22;6205:2;-1:-1:-1;;6286:23:1;;;6356:2;6341:18;;;6328:32;;-1:-1:-1;6195:171:1:o;6371:316::-;6459:6;6467;6475;6528:2;6516:9;6507:7;6503:23;6499:32;6496:2;;;6549:6;6541;6534:22;6496:2;6583:9;6577:16;6567:26;;6633:2;6622:9;6618:18;6612:25;6602:35;;6677:2;6666:9;6662:18;6656:25;6646:35;;6486:201;;;;;:::o;6692:395::-;6778:6;6786;6794;6802;6855:3;6843:9;6834:7;6830:23;6826:33;6823:2;;;6877:6;6869;6862:22;6823:2;-1:-1:-1;;6905:23:1;;;6975:2;6960:18;;6947:32;;-1:-1:-1;7026:2:1;7011:18;;6998:32;;7077:2;7062:18;7049:32;;-1:-1:-1;6813:274:1;-1:-1:-1;6813:274:1:o;7092:464::-;7187:6;7195;7203;7211;7219;7272:3;7260:9;7251:7;7247:23;7243:33;7240:2;;;7294:6;7286;7279:22;7240:2;-1:-1:-1;;7322:23:1;;;7392:2;7377:18;;7364:32;;-1:-1:-1;7443:2:1;7428:18;;7415:32;;7494:2;7479:18;;7466:32;;-1:-1:-1;7545:3:1;7530:19;7517:33;;-1:-1:-1;7230:326:1;-1:-1:-1;7230:326:1:o;7561:463::-;7614:3;7652:5;7646:12;7679:6;7674:3;7667:19;7705:4;7734:2;7729:3;7725:12;7718:19;;7771:2;7764:5;7760:14;7792:3;7804:195;7818:6;7815:1;7812:13;7804:195;;;7883:13;;-1:-1:-1;;;;;7879:39:1;7867:52;;7939:12;;;;7974:15;;;;7915:1;7833:9;7804:195;;;-1:-1:-1;8015:3:1;;7622:402;-1:-1:-1;;;;;7622:402:1:o;9864:603::-;9976:4;10005:2;10034;10023:9;10016:21;10066:6;10060:13;10109:6;10104:2;10093:9;10089:18;10082:34;10134:4;10147:140;10161:6;10158:1;10155:13;10147:140;;;10256:14;;;10252:23;;10246:30;10222:17;;;10241:2;10218:26;10211:66;10176:10;;10147:140;;;10305:6;10302:1;10299:13;10296:2;;;10375:4;10370:2;10361:6;10350:9;10346:22;10342:31;10335:45;10296:2;-1:-1:-1;10451:2:1;10430:15;-1:-1:-1;;10426:29:1;10411:45;;;;10458:2;10407:54;;9985:482;-1:-1:-1;;;9985:482:1:o;14342:356::-;14544:2;14526:21;;;14563:18;;;14556:30;14622:34;14617:2;14602:18;;14595:62;14689:2;14674:18;;14516:182::o;17627:332::-;17834:6;17823:9;17816:25;17877:2;17872;17861:9;17857:18;17850:30;17797:4;17897:56;17949:2;17938:9;17934:18;17926:6;17897:56;:::i;:::-;17889:64;17806:153;-1:-1:-1;;;;17806:153:1:o;17964:582::-;18263:6;18252:9;18245:25;18306:6;18301:2;18290:9;18286:18;18279:34;18349:3;18344:2;18333:9;18329:18;18322:31;18226:4;18370:57;18422:3;18411:9;18407:19;18399:6;18370:57;:::i;:::-;-1:-1:-1;;;;;18463:32:1;;;;18458:2;18443:18;;18436:60;-1:-1:-1;18527:3:1;18512:19;18505:35;18362:65;18235:311;-1:-1:-1;;;18235:311:1:o;18740:128::-;18780:3;18811:1;18807:6;18804:1;18801:13;18798:2;;;18817:18;;:::i;:::-;-1:-1:-1;18853:9:1;;18788:80::o;18873:217::-;18913:1;18939;18929:2;;-1:-1:-1;;;18964:31:1;;19018:4;19015:1;19008:15;19046:4;18971:1;19036:15;18929:2;-1:-1:-1;19075:9:1;;18919:171::o;19095:422::-;19184:1;19227:5;19184:1;19241:270;19262:7;19252:8;19249:21;19241:270;;;19321:4;19317:1;19313:6;19309:17;19303:4;19300:27;19297:2;;;19330:18;;:::i;:::-;19380:7;19370:8;19366:22;19363:2;;;19400:16;;;;19363:2;19479:22;;;;19439:15;;;;19241:270;;;19245:3;19159:358;;;;;:::o;19522:140::-;19580:5;19609:47;19650:4;19640:8;19636:19;19630:4;19716:5;19746:8;19736:2;;-1:-1:-1;19787:1:1;19801:5;;19736:2;19835:4;19825:2;;-1:-1:-1;19872:1:1;19886:5;;19825:2;19917:4;19935:1;19930:59;;;;20003:1;19998:130;;;;19910:218;;19930:59;19960:1;19951:10;;19974:5;;;19998:130;20035:3;20025:8;20022:17;20019:2;;;20042:18;;:::i;:::-;-1:-1:-1;;20098:1:1;20084:16;;20113:5;;19910:218;;20212:2;20202:8;20199:16;20193:3;20187:4;20184:13;20180:36;20174:2;20164:8;20161:16;20156:2;20150:4;20147:12;20143:35;20140:77;20137:2;;;-1:-1:-1;20249:19:1;;;20281:5;;20137:2;20328:34;20353:8;20347:4;20328:34;:::i;:::-;20398:6;20394:1;20390:6;20386:19;20377:7;20374:32;20371:2;;;20409:18;;:::i;:::-;20447:20;;19726:747;-1:-1:-1;;;19726:747:1:o;20478:168::-;20518:7;20584:1;20580;20576:6;20572:14;20569:1;20566:21;20561:1;20554:9;20547:17;20543:45;20540:2;;;20591:18;;:::i;:::-;-1:-1:-1;20631:9:1;;20530:116::o;20651:125::-;20691:4;20719:1;20716;20713:8;20710:2;;;20724:18;;:::i;:::-;-1:-1:-1;20761:9:1;;20700:76::o;20781:380::-;20860:1;20856:12;;;;20903;;;20924:2;;20978:4;20970:6;20966:17;20956:27;;20924:2;21031;21023:6;21020:14;21000:18;20997:38;20994:2;;;21077:10;21072:3;21068:20;21065:1;21058:31;21112:4;21109:1;21102:15;21140:4;21137:1;21130:15;20994:2;;20836:325;;;:::o;21166:135::-;21205:3;-1:-1:-1;;21226:17:1;;21223:2;;;21246:18;;:::i;:::-;-1:-1:-1;21293:1:1;21282:13;;21213:88::o;21306:127::-;21367:10;21362:3;21358:20;21355:1;21348:31;21398:4;21395:1;21388:15;21422:4;21419:1;21412:15;21438:131;-1:-1:-1;;;;;21513:31:1;;21503:42;;21493:2;;21559:1;21556;21549:12;21493:2;21483:86;:::o;21574:118::-;21660:5;21653:13;21646:21;21639:5;21636:32;21626:2;;21682:1;21679;21672:12

Swarm Source

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