ETH Price: $3,454.73 (+1.45%)
Gas: 8 Gwei

Token

Funky Flies (FFLY)
 

Overview

Max Total Supply

1,000,000,000 FFLY

Holders

468

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
620.005638084146561423 FFLY

Value
$0.00
0xaf9390ae0c19975a8062638b6bd0c24f35694a7c
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:
FunkyFlies

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed
// FunkyFlies Loves you. Caterpillars are coming to Fly Village. they love their purchasable Accessories. is this a spoiler?
pragma solidity ^0.8.11;

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    
    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract lock duration is not over");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// 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 LockToken is Ownable {
    bool public isOpen = false;
    mapping(address => bool) private _whiteList;
    modifier open(address from, address to) {
        require(isOpen || _whiteList[from] || _whiteList[to], "Not Open");
        _;
    }

    constructor() {
        _whiteList[msg.sender] = true;
        _whiteList[address(this)] = true;
    }

    function openTrade() external onlyOwner {
        isOpen = true;
    }

    function stopTrade() external onlyOwner {
        isOpen = false;
    }

    function includeToWhiteList(address[] memory _users) external onlyOwner {
        for(uint8 i = 0; i < _users.length; i++) {
            _whiteList[_users[i]] = true;
        }
    }
}


contract FunkyFlies is Context, IERC20, LockToken {
    using SafeMath for uint256;
    using Address for address;
    
    address payable public marketingAddress = payable(0x95957eEdE0f344F75c0Ac42c262Aa7c1f3cB297E); // Marketing wallet address.
    address payable public developerAddress = payable(0xF6C8103365d6c05645f468e7596a273afb3Fc235); // Developer wallet address. 
    address public stakingAddress = address(0x0f1893a82FdfA3f5EE7FbC8198e2f4A4bCd301b7); // Staking wallet will be replaced by staking contract address

    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; //burn wallet address.
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 1_000_000_000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Funky Flies";
    string private _symbol = "FFLY";
    uint8 private _decimals = 18;


    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 2;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 public _marketingFee = 4;
    uint256 private _previousMarketingFee = _marketingFee;

    uint256 public _developerFee = 4;
    uint256 private _previousDeveloperFee = _developerFee;  

    uint256 public _stakingFee = 2;
    uint256 private _previousStakingFee = _stakingFee;  

    uint256 public _burnFee = 1;
    uint256 private _previousBurnFee = _burnFee;  


    uint256 private _saleTaxFee = 2;
    uint256 private _saleLiquidityFee = 2;
    uint256 private _saleMarketingFee = 4;
    uint256 private _saleDeveloperFee = 4;
    uint256 private _saleStakingFee = 2;
    uint256 private _saleBurnFee = 1;

    uint256 public _maxTxAmount = _tTotal.div(100); //1%
    uint256 private swapThresholdAmount = 1_00_000 * 10**18; 

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;

    
    event RewardLiquidityProviders(uint256 tokenAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = 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;
        emit Transfer(address(0), _msgSender(), _tTotal);

        excludeWalletsFromWhales();


    }

    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 swapThresholdAmountAmount() public view returns (uint256) {
        return swapThresholdAmount;
    }

  

    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() {

        require(!_isExcluded[account], "Account is already excluded");
        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 open(from, to) 
    {
        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");

        checkForBlackList(from, to);
        checkForWhale(from, to, amount);

        if(from != owner() && to != owner()) 
        {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= swapThresholdAmount;
        
        if (!inSwapAndLiquify && swapAndLiquifyEnabled && from != uniswapV2Pair) {
            if (overMinimumTokenBalance) 
            {
                contractTokenBalance = swapThresholdAmount;
                swapAndLiquify(contractTokenBalance);    
            }
        }
        
        bool takeFee = true;
        if(to==uniswapV2Pair) { setSaleFee(); }
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap 
    {
        uint256 swapableFee = _liquidityFee.add(_marketingFee).add(_developerFee);
        uint256 halfLiquidityTokens = contractTokenBalance.mul(_liquidityFee).div(swapableFee).div(2);
        uint256 swapableTokens = contractTokenBalance.sub(halfLiquidityTokens);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(swapableTokens); 
        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 ethForLiquidity = newBalance.mul(_liquidityFee).div(swapableFee).div(2);
        addLiquidity(halfLiquidityTokens, ethForLiquidity);
        emit SwapAndLiquify(halfLiquidityTokens, ethForLiquidity, halfLiquidityTokens);

        uint256 ethforMarketing = newBalance.mul(_marketingFee).div(swapableFee);
        uint256 ethForDeveloper = newBalance.sub(ethforMarketing).sub(ethForLiquidity);

        marketingAddress.transfer(ethforMarketing);
        developerAddress.transfer(ethForDeveloper);

    }
    

    
    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 {
        if(!takeFee) { removeAllFee(); }

        uint256 burnTokens = amount.mul(_burnFee).div(100);
        uint256 stakingTokens = amount.mul(_stakingFee).div(100);

        amount = amount.sub(burnTokens).sub(stakingTokens);
        
        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);
        }

        removeAllFee();

        if(burnTokens > 0)
        {
            _transferStandard(sender, deadAddress, burnTokens);
        }   
            if(stakingTokens > 0)
        {
            _transferStandard(sender, stakingAddress, stakingTokens);
        }    
        restoreAllFee();

    }

    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);
        if(tLiquidity>0) { emit Transfer(sender, address(this), tLiquidity); }
    }


    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);
        if(tLiquidity>0) { emit Transfer(sender, address(this), tLiquidity); }
    }

    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);
        if(tLiquidity>0) { emit Transfer(sender, address(this), tLiquidity); }
    }

    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);
        if(tLiquidity>0) { emit Transfer(sender, address(this), tLiquidity); }
    }

    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) 
    {
        _amount = _amount.mul(100).div(100-_burnFee-_stakingFee);
        return _amount.mul(_taxFee).div(100);
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) 
    {
        _amount = _amount.mul(100).div(100-_burnFee-_stakingFee);
        return _amount.mul(_liquidityFee+_marketingFee+_developerFee).div(100);
    }
    
    function removeAllFee() private 
    {       
        _taxFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
        _developerFee = 0;
        _stakingFee = 0;
        _burnFee = 0;
    }
    
    function restoreAllFee() private 
    {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _marketingFee = _previousMarketingFee;
        _developerFee = _previousDeveloperFee;
        _stakingFee = _previousStakingFee;
        _burnFee = _previousBurnFee;
    }


    function setSaleFee() private 
    {
        _taxFee = _saleTaxFee;
        _liquidityFee = _saleLiquidityFee;
        _marketingFee = _saleMarketingFee;
        _developerFee = _saleDeveloperFee;
        _stakingFee = _saleStakingFee;
        _burnFee = _saleBurnFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) 
    {
        return _isExcludedFromFee[account];
    }
    
    function excludeFromFee(address account) public onlyOwner 
    {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner 
    {
        _isExcludedFromFee[account] = false;
    }
    
    function setAllBuyFeePercents(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee, 
    uint256 developerFee, uint256 stakingFee, uint256 burnFee) 
    external onlyOwner() 
    {
        _taxFee = taxFee;
        _previousTaxFee = taxFee;

        _liquidityFee = liquidityFee;
        _previousLiquidityFee = liquidityFee;

        _marketingFee = marketingFee;
        _previousMarketingFee = marketingFee;

        _developerFee = developerFee;
        _previousDeveloperFee = developerFee;

        _stakingFee = stakingFee;
        _previousStakingFee = stakingFee;

        _burnFee = burnFee;
        _previousBurnFee = burnFee;

        uint256 totalFee = taxFee.add(liquidityFee).add(marketingFee).add(developerFee);
        totalFee = totalFee.add(stakingFee).add(burnFee);

        require(totalFee<=20, "Too High Fee");

    }

    function setAllSaleFeesPercents(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee, 
    uint256 developerFee, uint256 stackingFee, uint256 burnFee) 
    external onlyOwner
    {
        _saleTaxFee = taxFee;
        _saleLiquidityFee = liquidityFee;
        _saleMarketingFee = marketingFee;
        _saleDeveloperFee = developerFee;
        _saleBurnFee = burnFee;
        uint256 totalFee = taxFee.add(liquidityFee).add(marketingFee).add(developerFee);
        totalFee = totalFee.add(stackingFee).add(burnFee);
        require(totalFee<=20, "Too High Fee");
    }


    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() 
    {
        _maxTxAmount = maxTxAmount;
        require(maxTxAmount>_tTotal.div(10000), "Too low tx limit");
    }
    

    function updateSwapThresholdAmount(uint256 _swapThresholdAmount) external onlyOwner() 
    {
        swapThresholdAmount = _swapThresholdAmount;
    }
    

    function setMarketingAddress(address _marketingAddress) external onlyOwner() 
    {
        marketingAddress = payable(_marketingAddress);
    }

    function setDeveloperAddress(address _developerAddress) external onlyOwner() 
    {
        developerAddress = payable(_developerAddress);
    }

    function setStakingAddress(address _address) external onlyOwner() 
    {
        stakingAddress = _address;
    }


    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    
    function prepareForLaunch() external onlyOwner 
    {
        _taxFee = 0;
        _previousTaxFee = 0;

        _liquidityFee = 0;
        _previousLiquidityFee = 0;

        _marketingFee = 0;
        _previousMarketingFee = 0;

        _developerFee = 0;
        _previousDeveloperFee = 0;

        _stakingFee = 0;
        _previousStakingFee = 0;

        _burnFee = 0;
        _previousBurnFee = 0;

        setSwapAndLiquifyEnabled(false);
        _maxTxAmount = 1_000_000_000 * 10**18;
    }
    
    function afterLaunch() external onlyOwner 
    {    
        _taxFee = 2;
        _previousTaxFee = _taxFee;

        _liquidityFee = 2;
        _previousLiquidityFee = _liquidityFee;

        _marketingFee = 4;
        _previousMarketingFee = _marketingFee;

        _developerFee = 4;
        _previousDeveloperFee = _developerFee;

        _stakingFee = 2;
        _previousStakingFee = _stakingFee;        

        _burnFee = 1;
        _previousBurnFee = _burnFee;

        setSwapAndLiquifyEnabled(true);
        _maxTxAmount = 1_000_000_00 * 10**18;
    }
    
    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}


//////--------  ANTI WHALE -------/////--------

    mapping (address => bool) private _isExcludedFromWhale;

    uint256 public _walletHoldingMaxLimit =  _tTotal.div(100).mul(2); //2%

    function excludeWalletsFromWhales() private 
    {
        _isExcludedFromWhale[owner()]=true;
        _isExcludedFromWhale[address(this)]=true;
        _isExcludedFromWhale[address(0)]=true;
        _isExcludedFromWhale[uniswapV2Pair]=true;
    }


    function checkForWhale(address from, address to, uint256 amount) 
    private view
    {
        uint256 newBalance = balanceOf(to).add(amount);
        if(!_isExcludedFromWhale[from] && !_isExcludedFromWhale[to]) 
        { 
            require(newBalance <= _walletHoldingMaxLimit, "Exceeding max tokens limit in the wallet"); 
        } 
        if(from==uniswapV2Pair && !_isExcludedFromWhale[to]) 
        { 
            require(newBalance <= _walletHoldingMaxLimit, "Exceeding max tokens limit in the wallet"); 
        } 
    }
 
    function setExcludedFromWhale(address account, bool _enabled) public onlyOwner 
    {
        _isExcludedFromWhale[account] = _enabled;
    } 

    function  setWalletMaxHoldingLimit(uint256 _amount) public onlyOwner 
    {
            _walletHoldingMaxLimit = _amount;
    }


    /// black list

    mapping(address => bool) public _isBlacklisted;

    event AccountBlacklisted(address _account,  bool _value, uint256 timestamp);
    function blacklistAddress(address account, bool value) external onlyOwner
    {
        _isBlacklisted[account] = value;
        emit AccountBlacklisted(account,  value, block.timestamp);
    }

    function checkForBlackList(address from, address to) private view
    {
        require(!_isBlacklisted[from] && !_isBlacklisted[to], 'Blacklisted address');
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_account","type":"address"},{"indexed":false,"internalType":"bool","name":"_value","type":"bool"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AccountBlacklisted","type":"event"},{"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":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_stakingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletHoldingMaxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"afterLaunch","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developerAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_users","type":"address[]"}],"name":"includeToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareForLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"developerFee","type":"uint256"},{"internalType":"uint256","name":"stakingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setAllBuyFeePercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"developerFee","type":"uint256"},{"internalType":"uint256","name":"stackingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setAllSaleFeesPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_developerAddress","type":"address"}],"name":"setDeveloperAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setExcludedFromWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setWalletMaxHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stopTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThresholdAmountAmount","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":[{"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":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapThresholdAmount","type":"uint256"}],"name":"updateSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040526003805460ff19169055600580546001600160a01b03199081167395957eede0f344f75c0ac42c262aa7c1f3cb297e1790915560068054821673f6c8103365d6c05645f468e7596a273afb3fc23517905560078054909116730f1893a82fdfa3f5ee7fbc8198e2f4a4bcd301b717905561dead6080526b033b2e3c9fd0803ce8000000600e8190556200009a9060001962000759565b620000a89060001962000786565b600f5560408051808201909152600b8082526a46756e6b7920466c69657360a81b6020909201918252620000df916011916200069d565b506040805180820190915260048082526346464c5960e01b60209092019182526200010d916012916200069d565b506012601360006101000a81548160ff021916908360ff1602179055506002601455601454601555600260165560165460175560046018556018546019556004601a55601a54601b556002601c55601c54601d556001601e55601e54601f55600260205560026021556004602255600460235560026024556001602555620001a76064600e54620004e860201b62001b5d1790919060201c565b60265569152d02c7e14af68000006027556028805461ff0019169055600e54620001fb90600290620001e7906064620004e8602090811b62001b5d17901c565b6200053b60201b62001b9f1790919060201c565b602a553480156200020b57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350336000908152600460205260408082208054600160ff1991821681179092553084529183208054909216179055600f5490600890620002893390565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032b9190620007a0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039f9190620007a0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620003ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004139190620007a0565b6001600160a01b0390811660c052811660a0526001600b60006200043f6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600b909252902080549091166001179055620004873390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e54604051620004cf91815260200190565b60405180910390a3620004e1620005c6565b5062000899565b60006200053283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200066160201b60201c565b90505b92915050565b6000826200054c5750600062000535565b60006200055a8385620007cb565b905082620005698583620007ed565b14620005325760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b600160296000620005df6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260299093528183208054851660019081179091557fbc72c27881d499e9ea29f42d0975d4e269d866b929e1b555435cbfe829a9d200805486168217905560c051909116835291208054909216179055565b60008183620006855760405162461bcd60e51b8152600401620005bd919062000804565b506000620006948486620007ed565b95945050505050565b828054620006ab906200085c565b90600052602060002090601f016020900481019282620006cf57600085556200071a565b82601f10620006ea57805160ff19168380011785556200071a565b828001600101855582156200071a579182015b828111156200071a578251825591602001919060010190620006fd565b50620007289291506200072c565b5090565b5b808211156200072857600081556001016200072d565b634e487b7160e01b600052601260045260246000fd5b6000826200076b576200076b62000743565b500690565b634e487b7160e01b600052601160045260246000fd5b6000828210156200079b576200079b62000770565b500390565b600060208284031215620007b357600080fd5b81516001600160a01b03811681146200053257600080fd5b6000816000190483118215151615620007e857620007e862000770565b500290565b600082620007ff57620007ff62000743565b500490565b600060208083528351808285015260005b81811015620008335785810183015185820160400152820162000815565b8181111562000846576000604083870101525b50601f01601f1916929092016040019392505050565b600181811c908216806200087157607f821691505b602082108114156200089357634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516136d962000908600039600081816106e301528181611fd201528181612028015261232101526000818161046001528181612a0b01528181612ac401528181612b0001528181612ba70152612bce01526000818161054701526126f001526136d96000f3fe6080604052600436106103a65760003560e01c80636bc87c3a116101e7578063a878b3011161010d578063dcc345f2116100a0578063ec28438a1161006f578063ec28438a14610ae3578063f2fde38b14610b03578063f4e0d9ac14610b23578063fb201b1d14610b4357600080fd5b8063dcc345f214610a3d578063dd46706414610a5d578063dd62ed3e14610a7d578063ea2f0b3714610ac357600080fd5b8063c0b0fda2116100dc578063c0b0fda2146109c7578063c49b9a80146109dd578063caccd7f7146109fd578063d7b4be2414610a1d57600080fd5b8063a878b3011461095c578063a9059cbb1461097c578063ae8502811461099c578063be1614f9146109b257600080fd5b80638baeefce11610185578063a1ab19a311610154578063a1ab19a3146108f2578063a457c2d714610907578063a5ece94114610927578063a69df4b51461094757600080fd5b80638baeefce1461088a5780638da5cb5b1461089f578063906e9dd0146108bd57806395d89b41146108dd57600080fd5b806372b28e45116101c157806372b28e45146108105780637d1db4a51461082657806388f820201461083c578063896f9b9a1461087557600080fd5b80636bc87c3a146107c557806370a08231146107db578063715018a6146107fb57600080fd5b806339509351116102cc57806348de478e1161026a57806352390c021161023957806352390c02146107445780635342acb414610764578063557ed1ba1461079d578063602bc62b146107b057600080fd5b806348de478e146106bb57806349bd5a5e146106d15780634a74bb02146107055780634e3c06b11461072457600080fd5b806344d4225f116102a657806344d4225f146106415780634549b03914610661578063455a43961461068157806347535d7b146106a157600080fd5b806339509351146105eb5780633b124fe71461060b578063437823ec1461062157600080fd5b80631fc6a2dd116103445780632d838119116103135780632d83811914610569578063313ce567146105895780633685d419146105ab5780633742c24c146105cb57600080fd5b80631fc6a2dd146104df57806322976e0d146104ff57806323b872dd1461051557806327c8f8351461053557600080fd5b806313114a9d1161038057806313114a9d1461042f5780631694505e1461044e57806318160ddd1461049a5780631cdd3be3146104af57600080fd5b806306fdde03146103b2578063095ea7b3146103dd5780630b6bb6f51461040d57600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610b58565b6040516103d491906130ae565b60405180910390f35b3480156103e957600080fd5b506103fd6103f8366004613128565b610bea565b60405190151581526020016103d4565b34801561041957600080fd5b5061042d61042836600461316a565b610c01565b005b34801561043b57600080fd5b506010545b6040519081526020016103d4565b34801561045a57600080fd5b506104827f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103d4565b3480156104a657600080fd5b50600e54610440565b3480156104bb57600080fd5b506103fd6104ca36600461322f565b602b6020526000908152604090205460ff1681565b3480156104eb57600080fd5b5061042d6104fa36600461324c565b610ca6565b34801561050b57600080fd5b5061044060185481565b34801561052157600080fd5b506103fd610530366004613265565b610cd5565b34801561054157600080fd5b506104827f000000000000000000000000000000000000000000000000000000000000000081565b34801561057557600080fd5b5061044061058436600461324c565b610d3e565b34801561059557600080fd5b5060135460405160ff90911681526020016103d4565b3480156105b757600080fd5b5061042d6105c636600461322f565b610dc2565b3480156105d757600080fd5b5061042d6105e63660046132a6565b610f75565b3480156105f757600080fd5b506103fd610606366004613128565b61102b565b34801561061757600080fd5b5061044060145481565b34801561062d57600080fd5b5061042d61063c36600461322f565b611061565b34801561064d57600080fd5b5061042d61065c36600461324c565b6110af565b34801561066d57600080fd5b5061044061067c3660046132f9565b6110de565b34801561068d57600080fd5b5061042d61069c366004613325565b61116b565b3480156106ad57600080fd5b506003546103fd9060ff1681565b3480156106c757600080fd5b50610440601a5481565b3480156106dd57600080fd5b506104827f000000000000000000000000000000000000000000000000000000000000000081565b34801561071157600080fd5b506028546103fd90610100900460ff1681565b34801561073057600080fd5b5061042d61073f366004613325565b611200565b34801561075057600080fd5b5061042d61075f36600461322f565b611255565b34801561077057600080fd5b506103fd61077f36600461322f565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156107a957600080fd5b5042610440565b3480156107bc57600080fd5b50600254610440565b3480156107d157600080fd5b5061044060165481565b3480156107e757600080fd5b506104406107f636600461322f565b6113a8565b34801561080757600080fd5b5061042d611407565b34801561081c57600080fd5b50610440602a5481565b34801561083257600080fd5b5061044060265481565b34801561084857600080fd5b506103fd61085736600461322f565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561088157600080fd5b5061042d611469565b34801561089657600080fd5b5061042d6114eb565b3480156108ab57600080fd5b506000546001600160a01b0316610482565b3480156108c957600080fd5b5061042d6108d836600461322f565b611521565b3480156108e957600080fd5b506103c761156d565b3480156108fe57600080fd5b5061042d61157c565b34801561091357600080fd5b506103fd610922366004613128565b6115ff565b34801561093357600080fd5b50600554610482906001600160a01b031681565b34801561095357600080fd5b5061042d61164e565b34801561096857600080fd5b5061042d6109773660046132a6565b61175f565b34801561098857600080fd5b506103fd610997366004613128565b6117d7565b3480156109a857600080fd5b50610440601c5481565b3480156109be57600080fd5b50602754610440565b3480156109d357600080fd5b50610440601e5481565b3480156109e957600080fd5b5061042d6109f8366004613351565b6117e4565b348015610a0957600080fd5b50600654610482906001600160a01b031681565b348015610a2957600080fd5b50600754610482906001600160a01b031681565b348015610a4957600080fd5b5061042d610a5836600461322f565b611862565b348015610a6957600080fd5b5061042d610a7836600461324c565b6118ae565b348015610a8957600080fd5b50610440610a9836600461336c565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b348015610acf57600080fd5b5061042d610ade36600461322f565b611933565b348015610aef57600080fd5b5061042d610afe36600461324c565b61197e565b348015610b0f57600080fd5b5061042d610b1e36600461322f565b611a00565b348015610b2f57600080fd5b5061042d610b3e36600461322f565b611ad8565b348015610b4f57600080fd5b5061042d611b24565b606060118054610b67906133a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b93906133a5565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b5050505050905090565b6000610bf7338484611c1e565b5060015b92915050565b6000546001600160a01b03163314610c345760405162461bcd60e51b8152600401610c2b906133e0565b60405180910390fd5b60005b81518160ff161015610ca257600160046000848460ff1681518110610c5e57610c5e613415565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c9a81613441565b915050610c37565b5050565b6000546001600160a01b03163314610cd05760405162461bcd60e51b8152600401610c2b906133e0565b602755565b6000610ce2848484611d42565b610d348433610d2f85604051806060016040528060288152602001613637602891396001600160a01b038a166000908152600a6020908152604080832033845290915290205491906120e7565b611c1e565b5060019392505050565b6000600f54821115610da55760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c2b565b6000610daf612121565b9050610dbb8382611b5d565b9392505050565b6000546001600160a01b03163314610dec5760405162461bcd60e51b8152600401610c2b906133e0565b6001600160a01b0381166000908152600c602052604090205460ff16610e545760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c2b565b60005b600d54811015610ca257816001600160a01b0316600d8281548110610e7e57610e7e613415565b6000918252602090912001546001600160a01b03161415610f6357600d8054610ea990600190613461565b81548110610eb957610eb9613415565b600091825260209091200154600d80546001600160a01b039092169183908110610ee557610ee5613415565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600982526040808220829055600c90925220805460ff19169055600d805480610f3d57610f3d613478565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610f6d8161348e565b915050610e57565b6000546001600160a01b03163314610f9f5760405162461bcd60e51b8152600401610c2b906133e0565b602086905560218590556022849055602383905560258190556000610fd084610fca87818b8b612144565b90612144565b9050610fe082610fca8386612144565b905060148111156110225760405162461bcd60e51b815260206004820152600c60248201526b546f6f20486967682046656560a01b6044820152606401610c2b565b50505050505050565b336000818152600a602090815260408083206001600160a01b03871684529091528120549091610bf7918590610d2f9086612144565b6000546001600160a01b0316331461108b5760405162461bcd60e51b8152600401610c2b906133e0565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b031633146110d95760405162461bcd60e51b8152600401610c2b906133e0565b602a55565b6000600e548311156111325760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c2b565b81611151576000611142846121a3565b50939550610bfb945050505050565b600061115c846121a3565b50929550610bfb945050505050565b6000546001600160a01b031633146111955760405162461bcd60e51b8152600401610c2b906133e0565b6001600160a01b0382166000818152602b6020908152604091829020805460ff191685151590811790915582519384529083015242908201527f6939dfd500375b74c4a98d82db6e7fa9fa1facbdeb93453f963f7e2a3bca737b906060015b60405180910390a15050565b6000546001600160a01b0316331461122a5760405162461bcd60e51b8152600401610c2b906133e0565b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461127f5760405162461bcd60e51b8152600401610c2b906133e0565b6001600160a01b0381166000908152600c602052604090205460ff16156112e85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c2b565b6001600160a01b03811660009081526008602052604090205415611342576001600160a01b03811660009081526008602052604090205461132890610d3e565b6001600160a01b0382166000908152600960205260409020555b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6001600160a01b0381166000908152600c602052604081205460ff16156113e557506001600160a01b031660009081526009602052604090205490565b6001600160a01b038216600090815260086020526040902054610bfb90610d3e565b6000546001600160a01b031633146114315760405162461bcd60e51b8152600401610c2b906133e0565b600080546040516001600160a01b039091169060008051602061365f833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146114935760405162461bcd60e51b8152600401610c2b906133e0565b60026014819055601581905560168190556017819055600460188190556019819055601a819055601b55601c819055601d556001601e819055601f8190556114da906117e4565b6a52b7d2dcc80cd2e4000000602655565b6000546001600160a01b031633146115155760405162461bcd60e51b8152600401610c2b906133e0565b6003805460ff19169055565b6000546001600160a01b0316331461154b5760405162461bcd60e51b8152600401610c2b906133e0565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b606060128054610b67906133a5565b6000546001600160a01b031633146115a65760405162461bcd60e51b8152600401610c2b906133e0565b6000601481905560158190556016819055601781905560188190556019819055601a819055601b819055601c819055601d819055601e819055601f8190556115ed906117e4565b6b033b2e3c9fd0803ce8000000602655565b6000610bf73384610d2f8560405180606001604052806025815260200161367f60259139336000908152600a602090815260408083206001600160a01b038d16845290915290205491906120e7565b6001546001600160a01b031633146116b45760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610c2b565b60025442116117105760405162461bcd60e51b815260206004820152602260248201527f436f6e7472616374206c6f636b206475726174696f6e206973206e6f74206f7660448201526132b960f11b6064820152608401610c2b565b600154600080546040516001600160a01b03938416939091169160008051602061365f83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000546001600160a01b031633146117895760405162461bcd60e51b8152600401610c2b906133e0565b601486905560158690556016859055601785905560188490556019849055601a839055601b839055601c829055601d829055601e819055601f8190556000610fd084610fca87818b8b612144565b6000610bf7338484611d42565b6000546001600160a01b0316331461180e5760405162461bcd60e51b8152600401610c2b906133e0565b602880548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061185790831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461188c5760405162461bcd60e51b8152600401610c2b906133e0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118d85760405162461bcd60e51b8152600401610c2b906133e0565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561190781426134a9565b600255600080546040516001600160a01b039091169060008051602061365f833981519152908390a350565b6000546001600160a01b0316331461195d5760405162461bcd60e51b8152600401610c2b906133e0565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146119a85760405162461bcd60e51b8152600401610c2b906133e0565b6026819055600e546119bc90612710611b5d565b81116119fd5760405162461bcd60e51b815260206004820152601060248201526f151bdbc81b1bddc81d1e081b1a5b5a5d60821b6044820152606401610c2b565b50565b6000546001600160a01b03163314611a2a5760405162461bcd60e51b8152600401610c2b906133e0565b6001600160a01b038116611a8f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c2b565b600080546040516001600160a01b038085169392169160008051602061365f83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b025760405162461bcd60e51b8152600401610c2b906133e0565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b4e5760405162461bcd60e51b8152600401610c2b906133e0565b6003805460ff19166001179055565b6000610dbb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121f2565b600082611bae57506000610bfb565b6000611bba83856134c1565b905082611bc785836134e0565b14610dbb5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c2b565b6001600160a01b038316611c805760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c2b565b6001600160a01b038216611ce15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c2b565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6003548390839060ff1680611d6f57506001600160a01b03821660009081526004602052604090205460ff165b80611d9257506001600160a01b03811660009081526004602052604090205460ff165b611dc95760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610c2b565b6001600160a01b038516611e2d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c2b565b6001600160a01b038416611e8f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c2b565b60008311611ef15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c2b565b611efb8585612220565b611f068585856122a4565b6000546001600160a01b03868116911614801590611f3257506000546001600160a01b03858116911614155b15611f9a57602654831115611f9a5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c2b565b6000611fa5306113a8565b6027546028549192508210159060ff16158015611fc95750602854610100900460ff165b801561200757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614155b15612020578015612020576027549150612020826123a6565b6000600190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b0316141561208957612089602054601455602154601655602254601855602354601a55602454601c55602554601e55565b6001600160a01b0388166000908152600b602052604090205460ff16806120c857506001600160a01b0387166000908152600b602052604090205460ff165b156120d1575060005b6120dd8888888461254a565b5050505050505050565b6000818484111561210b5760405162461bcd60e51b8152600401610c2b91906130ae565b5060006121188486613461565b95945050505050565b600080600061212e612764565b909250905061213d8282611b5d565b9250505090565b60008061215183856134a9565b905083811015610dbb5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c2b565b60008060008060008060008060006121ba8a6128e6565b92509250925060008060006121d88d86866121d3612121565b612922565b919f909e50909c50959a5093985091965092945050505050565b600081836122135760405162461bcd60e51b8152600401610c2b91906130ae565b50600061211884866134e0565b6001600160a01b0382166000908152602b602052604090205460ff1615801561226257506001600160a01b0381166000908152602b602052604090205460ff16155b610ca25760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610c2b565b60006122b382610fca856113a8565b6001600160a01b03851660009081526029602052604090205490915060ff161580156122f857506001600160a01b03831660009081526029602052604090205460ff16155b1561231f57602a5481111561231f5760405162461bcd60e51b8152600401610c2b90613502565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614801561237957506001600160a01b03831660009081526029602052604090205460ff16155b156123a057602a548111156123a05760405162461bcd60e51b8152600401610c2b90613502565b50505050565b6028805460ff19166001179055601a546018546016546000926123ce929091610fca91612144565b905060006123f660026123f0846123f060165488611b9f90919063ffffffff16565b90611b5d565b905060006124048483612972565b905047612410826129b4565b600061241c4783612972565b9050600061243e60026123f0886123f060165487611b9f90919063ffffffff16565b905061244a8582612ba1565b60408051868152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a160006124a6876123f060185486611b9f90919063ffffffff16565b905060006124be836124b88685612972565b90612972565b6005546040519192506001600160a01b03169083156108fc029084906000818181858888f193505050501580156124f9573d6000803e3d6000fd5b506006546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612534573d6000803e3d6000fd5b50506028805460ff191690555050505050505050565b80612572576125726000601481905560168190556018819055601a819055601c819055601e55565b600061258e60646123f0601e5486611b9f90919063ffffffff16565b905060006125ac60646123f0601c5487611b9f90919063ffffffff16565b90506125bc816124b88685612972565b6001600160a01b0387166000908152600c602052604090205490945060ff16801561260057506001600160a01b0385166000908152600c602052604090205460ff16155b1561261557612610868686612ca7565b6126c1565b6001600160a01b0386166000908152600c602052604090205460ff1615801561265657506001600160a01b0385166000908152600c602052604090205460ff165b1561266657612610868686612e14565b6001600160a01b0386166000908152600c602052604090205460ff1680156126a657506001600160a01b0385166000908152600c602052604090205460ff165b156126b657612610868686612ebd565b6126c1868686612f30565b6126e46000601481905560168190556018819055601a819055601c819055601e55565b811561271557612715867f000000000000000000000000000000000000000000000000000000000000000084612f30565b8015612733576007546127339087906001600160a01b031683612f30565b61275c601554601455601754601655601954601855601b54601a55601d54601c55601f54601e55565b505050505050565b600f54600e546000918291825b600d548110156128b6578260086000600d848154811061279357612793613415565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806127fe57508160096000600d84815481106127d7576127d7613415565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561281457600f54600e54945094505050509091565b61285a60086000600d848154811061282e5761282e613415565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612972565b92506128a260096000600d848154811061287657612876613415565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612972565b9150806128ae8161348e565b915050612771565b50600e54600f546128c691611b5d565b8210156128dd57600f54600e549350935050509091565b90939092509050565b6000806000806128f585612f74565b9050600061290286612fbc565b90506000612914826124b88986612972565b979296509094509092505050565b60008080806129318886611b9f565b9050600061293f8887611b9f565b9050600061294d8888611b9f565b9050600061295f826124b88686612972565b939b939a50919850919650505050505050565b6000610dbb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120e7565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129e9576129e9613415565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8b919061354a565b81600181518110612a9e57612a9e613415565b60200260200101906001600160a01b031690816001600160a01b031681525050612ae9307f000000000000000000000000000000000000000000000000000000000000000084611c1e565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612b3e9085906000908690309042906004016135ab565b600060405180830381600087803b158015612b5857600080fd5b505af1158015612b6c573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516111f49291906135e7565b612bcc307f000000000000000000000000000000000000000000000000000000000000000084611c1e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719823085600080612c136000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612c7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ca09190613608565b5050505050565b600080600080600080612cb9876121a3565b6001600160a01b038f16600090815260096020526040902054959b50939950919750955093509150612ceb9088612972565b6001600160a01b038a16600090815260096020908152604080832093909355600890522054612d1a9087612972565b6001600160a01b03808b1660009081526008602052604080822093909355908a1681522054612d499086612144565b6001600160a01b038916600090815260086020526040902055612d6b81613001565b612d75848361308a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612dba91815260200190565b60405180910390a38015612e095760405181815230906001600160a01b038b16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b505050505050505050565b600080600080600080612e26876121a3565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150612e589087612972565b6001600160a01b03808b16600090815260086020908152604080832094909455918b16815260099091522054612e8e9084612144565b6001600160a01b038916600090815260096020908152604080832093909355600890522054612d499086612144565b600080600080600080612ecf876121a3565b6001600160a01b038f16600090815260096020526040902054959b50939950919750955093509150612f019088612972565b6001600160a01b038a16600090815260096020908152604080832093909355600890522054612e589087612972565b600080600080600080612f42876121a3565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150612d1a9087612972565b6000612fa0601c54601e546064612f8b9190613461565b612f959190613461565b6123f0846064611b9f565b9150610bfb60646123f060145485611b9f90919063ffffffff16565b6000612fd3601c54601e546064612f8b9190613461565b9150610bfb60646123f0601a54601854601654612ff091906134a9565b612ffa91906134a9565b8590611b9f565b600061300b612121565b905060006130198383611b9f565b306000908152600860205260409020549091506130369082612144565b30600090815260086020908152604080832093909355600c9052205460ff161561308557306000908152600960205260409020546130749084612144565b306000908152600960205260409020555b505050565b600f546130979083612972565b600f556010546130a79082612144565b6010555050565b600060208083528351808285015260005b818110156130db578581018301518582016040015282016130bf565b818111156130ed576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146119fd57600080fd5b803561312381613103565b919050565b6000806040838503121561313b57600080fd5b823561314681613103565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561317d57600080fd5b823567ffffffffffffffff8082111561319557600080fd5b818501915085601f8301126131a957600080fd5b8135818111156131bb576131bb613154565b8060051b604051601f19603f830116810181811085821117156131e0576131e0613154565b6040529182528482019250838101850191888311156131fe57600080fd5b938501935b828510156132235761321485613118565b84529385019392850192613203565b98975050505050505050565b60006020828403121561324157600080fd5b8135610dbb81613103565b60006020828403121561325e57600080fd5b5035919050565b60008060006060848603121561327a57600080fd5b833561328581613103565b9250602084013561329581613103565b929592945050506040919091013590565b60008060008060008060c087890312156132bf57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b8035801515811461312357600080fd5b6000806040838503121561330c57600080fd5b8235915061331c602084016132e9565b90509250929050565b6000806040838503121561333857600080fd5b823561334381613103565b915061331c602084016132e9565b60006020828403121561336357600080fd5b610dbb826132e9565b6000806040838503121561337f57600080fd5b823561338a81613103565b9150602083013561339a81613103565b809150509250929050565b600181811c908216806133b957607f821691505b602082108114156133da57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8114156134585761345861342b565b60010192915050565b6000828210156134735761347361342b565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156134a2576134a261342b565b5060010190565b600082198211156134bc576134bc61342b565b500190565b60008160001904831182151516156134db576134db61342b565b500290565b6000826134fd57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b60006020828403121561355c57600080fd5b8151610dbb81613103565b600081518084526020808501945080840160005b838110156135a05781516001600160a01b03168752958201959082019060010161357b565b509495945050505050565b85815284602082015260a0604082015260006135ca60a0830186613567565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006136006040830184613567565b949350505050565b60008060006060848603121561361d57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d0a8f6b3c1575960fe58acd00a83a4f5d0aec480292cfcfa07337e32b80110a264736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c80636bc87c3a116101e7578063a878b3011161010d578063dcc345f2116100a0578063ec28438a1161006f578063ec28438a14610ae3578063f2fde38b14610b03578063f4e0d9ac14610b23578063fb201b1d14610b4357600080fd5b8063dcc345f214610a3d578063dd46706414610a5d578063dd62ed3e14610a7d578063ea2f0b3714610ac357600080fd5b8063c0b0fda2116100dc578063c0b0fda2146109c7578063c49b9a80146109dd578063caccd7f7146109fd578063d7b4be2414610a1d57600080fd5b8063a878b3011461095c578063a9059cbb1461097c578063ae8502811461099c578063be1614f9146109b257600080fd5b80638baeefce11610185578063a1ab19a311610154578063a1ab19a3146108f2578063a457c2d714610907578063a5ece94114610927578063a69df4b51461094757600080fd5b80638baeefce1461088a5780638da5cb5b1461089f578063906e9dd0146108bd57806395d89b41146108dd57600080fd5b806372b28e45116101c157806372b28e45146108105780637d1db4a51461082657806388f820201461083c578063896f9b9a1461087557600080fd5b80636bc87c3a146107c557806370a08231146107db578063715018a6146107fb57600080fd5b806339509351116102cc57806348de478e1161026a57806352390c021161023957806352390c02146107445780635342acb414610764578063557ed1ba1461079d578063602bc62b146107b057600080fd5b806348de478e146106bb57806349bd5a5e146106d15780634a74bb02146107055780634e3c06b11461072457600080fd5b806344d4225f116102a657806344d4225f146106415780634549b03914610661578063455a43961461068157806347535d7b146106a157600080fd5b806339509351146105eb5780633b124fe71461060b578063437823ec1461062157600080fd5b80631fc6a2dd116103445780632d838119116103135780632d83811914610569578063313ce567146105895780633685d419146105ab5780633742c24c146105cb57600080fd5b80631fc6a2dd146104df57806322976e0d146104ff57806323b872dd1461051557806327c8f8351461053557600080fd5b806313114a9d1161038057806313114a9d1461042f5780631694505e1461044e57806318160ddd1461049a5780631cdd3be3146104af57600080fd5b806306fdde03146103b2578063095ea7b3146103dd5780630b6bb6f51461040d57600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610b58565b6040516103d491906130ae565b60405180910390f35b3480156103e957600080fd5b506103fd6103f8366004613128565b610bea565b60405190151581526020016103d4565b34801561041957600080fd5b5061042d61042836600461316a565b610c01565b005b34801561043b57600080fd5b506010545b6040519081526020016103d4565b34801561045a57600080fd5b506104827f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103d4565b3480156104a657600080fd5b50600e54610440565b3480156104bb57600080fd5b506103fd6104ca36600461322f565b602b6020526000908152604090205460ff1681565b3480156104eb57600080fd5b5061042d6104fa36600461324c565b610ca6565b34801561050b57600080fd5b5061044060185481565b34801561052157600080fd5b506103fd610530366004613265565b610cd5565b34801561054157600080fd5b506104827f000000000000000000000000000000000000000000000000000000000000dead81565b34801561057557600080fd5b5061044061058436600461324c565b610d3e565b34801561059557600080fd5b5060135460405160ff90911681526020016103d4565b3480156105b757600080fd5b5061042d6105c636600461322f565b610dc2565b3480156105d757600080fd5b5061042d6105e63660046132a6565b610f75565b3480156105f757600080fd5b506103fd610606366004613128565b61102b565b34801561061757600080fd5b5061044060145481565b34801561062d57600080fd5b5061042d61063c36600461322f565b611061565b34801561064d57600080fd5b5061042d61065c36600461324c565b6110af565b34801561066d57600080fd5b5061044061067c3660046132f9565b6110de565b34801561068d57600080fd5b5061042d61069c366004613325565b61116b565b3480156106ad57600080fd5b506003546103fd9060ff1681565b3480156106c757600080fd5b50610440601a5481565b3480156106dd57600080fd5b506104827f0000000000000000000000001835e7845df57f97904f1f182099a3b8d822547381565b34801561071157600080fd5b506028546103fd90610100900460ff1681565b34801561073057600080fd5b5061042d61073f366004613325565b611200565b34801561075057600080fd5b5061042d61075f36600461322f565b611255565b34801561077057600080fd5b506103fd61077f36600461322f565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156107a957600080fd5b5042610440565b3480156107bc57600080fd5b50600254610440565b3480156107d157600080fd5b5061044060165481565b3480156107e757600080fd5b506104406107f636600461322f565b6113a8565b34801561080757600080fd5b5061042d611407565b34801561081c57600080fd5b50610440602a5481565b34801561083257600080fd5b5061044060265481565b34801561084857600080fd5b506103fd61085736600461322f565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561088157600080fd5b5061042d611469565b34801561089657600080fd5b5061042d6114eb565b3480156108ab57600080fd5b506000546001600160a01b0316610482565b3480156108c957600080fd5b5061042d6108d836600461322f565b611521565b3480156108e957600080fd5b506103c761156d565b3480156108fe57600080fd5b5061042d61157c565b34801561091357600080fd5b506103fd610922366004613128565b6115ff565b34801561093357600080fd5b50600554610482906001600160a01b031681565b34801561095357600080fd5b5061042d61164e565b34801561096857600080fd5b5061042d6109773660046132a6565b61175f565b34801561098857600080fd5b506103fd610997366004613128565b6117d7565b3480156109a857600080fd5b50610440601c5481565b3480156109be57600080fd5b50602754610440565b3480156109d357600080fd5b50610440601e5481565b3480156109e957600080fd5b5061042d6109f8366004613351565b6117e4565b348015610a0957600080fd5b50600654610482906001600160a01b031681565b348015610a2957600080fd5b50600754610482906001600160a01b031681565b348015610a4957600080fd5b5061042d610a5836600461322f565b611862565b348015610a6957600080fd5b5061042d610a7836600461324c565b6118ae565b348015610a8957600080fd5b50610440610a9836600461336c565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b348015610acf57600080fd5b5061042d610ade36600461322f565b611933565b348015610aef57600080fd5b5061042d610afe36600461324c565b61197e565b348015610b0f57600080fd5b5061042d610b1e36600461322f565b611a00565b348015610b2f57600080fd5b5061042d610b3e36600461322f565b611ad8565b348015610b4f57600080fd5b5061042d611b24565b606060118054610b67906133a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b93906133a5565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b5050505050905090565b6000610bf7338484611c1e565b5060015b92915050565b6000546001600160a01b03163314610c345760405162461bcd60e51b8152600401610c2b906133e0565b60405180910390fd5b60005b81518160ff161015610ca257600160046000848460ff1681518110610c5e57610c5e613415565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c9a81613441565b915050610c37565b5050565b6000546001600160a01b03163314610cd05760405162461bcd60e51b8152600401610c2b906133e0565b602755565b6000610ce2848484611d42565b610d348433610d2f85604051806060016040528060288152602001613637602891396001600160a01b038a166000908152600a6020908152604080832033845290915290205491906120e7565b611c1e565b5060019392505050565b6000600f54821115610da55760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c2b565b6000610daf612121565b9050610dbb8382611b5d565b9392505050565b6000546001600160a01b03163314610dec5760405162461bcd60e51b8152600401610c2b906133e0565b6001600160a01b0381166000908152600c602052604090205460ff16610e545760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c2b565b60005b600d54811015610ca257816001600160a01b0316600d8281548110610e7e57610e7e613415565b6000918252602090912001546001600160a01b03161415610f6357600d8054610ea990600190613461565b81548110610eb957610eb9613415565b600091825260209091200154600d80546001600160a01b039092169183908110610ee557610ee5613415565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600982526040808220829055600c90925220805460ff19169055600d805480610f3d57610f3d613478565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610f6d8161348e565b915050610e57565b6000546001600160a01b03163314610f9f5760405162461bcd60e51b8152600401610c2b906133e0565b602086905560218590556022849055602383905560258190556000610fd084610fca87818b8b612144565b90612144565b9050610fe082610fca8386612144565b905060148111156110225760405162461bcd60e51b815260206004820152600c60248201526b546f6f20486967682046656560a01b6044820152606401610c2b565b50505050505050565b336000818152600a602090815260408083206001600160a01b03871684529091528120549091610bf7918590610d2f9086612144565b6000546001600160a01b0316331461108b5760405162461bcd60e51b8152600401610c2b906133e0565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b031633146110d95760405162461bcd60e51b8152600401610c2b906133e0565b602a55565b6000600e548311156111325760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c2b565b81611151576000611142846121a3565b50939550610bfb945050505050565b600061115c846121a3565b50929550610bfb945050505050565b6000546001600160a01b031633146111955760405162461bcd60e51b8152600401610c2b906133e0565b6001600160a01b0382166000818152602b6020908152604091829020805460ff191685151590811790915582519384529083015242908201527f6939dfd500375b74c4a98d82db6e7fa9fa1facbdeb93453f963f7e2a3bca737b906060015b60405180910390a15050565b6000546001600160a01b0316331461122a5760405162461bcd60e51b8152600401610c2b906133e0565b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461127f5760405162461bcd60e51b8152600401610c2b906133e0565b6001600160a01b0381166000908152600c602052604090205460ff16156112e85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c2b565b6001600160a01b03811660009081526008602052604090205415611342576001600160a01b03811660009081526008602052604090205461132890610d3e565b6001600160a01b0382166000908152600960205260409020555b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6001600160a01b0381166000908152600c602052604081205460ff16156113e557506001600160a01b031660009081526009602052604090205490565b6001600160a01b038216600090815260086020526040902054610bfb90610d3e565b6000546001600160a01b031633146114315760405162461bcd60e51b8152600401610c2b906133e0565b600080546040516001600160a01b039091169060008051602061365f833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146114935760405162461bcd60e51b8152600401610c2b906133e0565b60026014819055601581905560168190556017819055600460188190556019819055601a819055601b55601c819055601d556001601e819055601f8190556114da906117e4565b6a52b7d2dcc80cd2e4000000602655565b6000546001600160a01b031633146115155760405162461bcd60e51b8152600401610c2b906133e0565b6003805460ff19169055565b6000546001600160a01b0316331461154b5760405162461bcd60e51b8152600401610c2b906133e0565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b606060128054610b67906133a5565b6000546001600160a01b031633146115a65760405162461bcd60e51b8152600401610c2b906133e0565b6000601481905560158190556016819055601781905560188190556019819055601a819055601b819055601c819055601d819055601e819055601f8190556115ed906117e4565b6b033b2e3c9fd0803ce8000000602655565b6000610bf73384610d2f8560405180606001604052806025815260200161367f60259139336000908152600a602090815260408083206001600160a01b038d16845290915290205491906120e7565b6001546001600160a01b031633146116b45760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610c2b565b60025442116117105760405162461bcd60e51b815260206004820152602260248201527f436f6e7472616374206c6f636b206475726174696f6e206973206e6f74206f7660448201526132b960f11b6064820152608401610c2b565b600154600080546040516001600160a01b03938416939091169160008051602061365f83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000546001600160a01b031633146117895760405162461bcd60e51b8152600401610c2b906133e0565b601486905560158690556016859055601785905560188490556019849055601a839055601b839055601c829055601d829055601e819055601f8190556000610fd084610fca87818b8b612144565b6000610bf7338484611d42565b6000546001600160a01b0316331461180e5760405162461bcd60e51b8152600401610c2b906133e0565b602880548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061185790831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461188c5760405162461bcd60e51b8152600401610c2b906133e0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118d85760405162461bcd60e51b8152600401610c2b906133e0565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561190781426134a9565b600255600080546040516001600160a01b039091169060008051602061365f833981519152908390a350565b6000546001600160a01b0316331461195d5760405162461bcd60e51b8152600401610c2b906133e0565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146119a85760405162461bcd60e51b8152600401610c2b906133e0565b6026819055600e546119bc90612710611b5d565b81116119fd5760405162461bcd60e51b815260206004820152601060248201526f151bdbc81b1bddc81d1e081b1a5b5a5d60821b6044820152606401610c2b565b50565b6000546001600160a01b03163314611a2a5760405162461bcd60e51b8152600401610c2b906133e0565b6001600160a01b038116611a8f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c2b565b600080546040516001600160a01b038085169392169160008051602061365f83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b025760405162461bcd60e51b8152600401610c2b906133e0565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b4e5760405162461bcd60e51b8152600401610c2b906133e0565b6003805460ff19166001179055565b6000610dbb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121f2565b600082611bae57506000610bfb565b6000611bba83856134c1565b905082611bc785836134e0565b14610dbb5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c2b565b6001600160a01b038316611c805760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c2b565b6001600160a01b038216611ce15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c2b565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6003548390839060ff1680611d6f57506001600160a01b03821660009081526004602052604090205460ff165b80611d9257506001600160a01b03811660009081526004602052604090205460ff165b611dc95760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610c2b565b6001600160a01b038516611e2d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c2b565b6001600160a01b038416611e8f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c2b565b60008311611ef15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c2b565b611efb8585612220565b611f068585856122a4565b6000546001600160a01b03868116911614801590611f3257506000546001600160a01b03858116911614155b15611f9a57602654831115611f9a5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c2b565b6000611fa5306113a8565b6027546028549192508210159060ff16158015611fc95750602854610100900460ff165b801561200757507f0000000000000000000000001835e7845df57f97904f1f182099a3b8d82254736001600160a01b0316876001600160a01b031614155b15612020578015612020576027549150612020826123a6565b6000600190507f0000000000000000000000001835e7845df57f97904f1f182099a3b8d82254736001600160a01b0316876001600160a01b0316141561208957612089602054601455602154601655602254601855602354601a55602454601c55602554601e55565b6001600160a01b0388166000908152600b602052604090205460ff16806120c857506001600160a01b0387166000908152600b602052604090205460ff165b156120d1575060005b6120dd8888888461254a565b5050505050505050565b6000818484111561210b5760405162461bcd60e51b8152600401610c2b91906130ae565b5060006121188486613461565b95945050505050565b600080600061212e612764565b909250905061213d8282611b5d565b9250505090565b60008061215183856134a9565b905083811015610dbb5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c2b565b60008060008060008060008060006121ba8a6128e6565b92509250925060008060006121d88d86866121d3612121565b612922565b919f909e50909c50959a5093985091965092945050505050565b600081836122135760405162461bcd60e51b8152600401610c2b91906130ae565b50600061211884866134e0565b6001600160a01b0382166000908152602b602052604090205460ff1615801561226257506001600160a01b0381166000908152602b602052604090205460ff16155b610ca25760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610c2b565b60006122b382610fca856113a8565b6001600160a01b03851660009081526029602052604090205490915060ff161580156122f857506001600160a01b03831660009081526029602052604090205460ff16155b1561231f57602a5481111561231f5760405162461bcd60e51b8152600401610c2b90613502565b7f0000000000000000000000001835e7845df57f97904f1f182099a3b8d82254736001600160a01b0316846001600160a01b031614801561237957506001600160a01b03831660009081526029602052604090205460ff16155b156123a057602a548111156123a05760405162461bcd60e51b8152600401610c2b90613502565b50505050565b6028805460ff19166001179055601a546018546016546000926123ce929091610fca91612144565b905060006123f660026123f0846123f060165488611b9f90919063ffffffff16565b90611b5d565b905060006124048483612972565b905047612410826129b4565b600061241c4783612972565b9050600061243e60026123f0886123f060165487611b9f90919063ffffffff16565b905061244a8582612ba1565b60408051868152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a160006124a6876123f060185486611b9f90919063ffffffff16565b905060006124be836124b88685612972565b90612972565b6005546040519192506001600160a01b03169083156108fc029084906000818181858888f193505050501580156124f9573d6000803e3d6000fd5b506006546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612534573d6000803e3d6000fd5b50506028805460ff191690555050505050505050565b80612572576125726000601481905560168190556018819055601a819055601c819055601e55565b600061258e60646123f0601e5486611b9f90919063ffffffff16565b905060006125ac60646123f0601c5487611b9f90919063ffffffff16565b90506125bc816124b88685612972565b6001600160a01b0387166000908152600c602052604090205490945060ff16801561260057506001600160a01b0385166000908152600c602052604090205460ff16155b1561261557612610868686612ca7565b6126c1565b6001600160a01b0386166000908152600c602052604090205460ff1615801561265657506001600160a01b0385166000908152600c602052604090205460ff165b1561266657612610868686612e14565b6001600160a01b0386166000908152600c602052604090205460ff1680156126a657506001600160a01b0385166000908152600c602052604090205460ff165b156126b657612610868686612ebd565b6126c1868686612f30565b6126e46000601481905560168190556018819055601a819055601c819055601e55565b811561271557612715867f000000000000000000000000000000000000000000000000000000000000dead84612f30565b8015612733576007546127339087906001600160a01b031683612f30565b61275c601554601455601754601655601954601855601b54601a55601d54601c55601f54601e55565b505050505050565b600f54600e546000918291825b600d548110156128b6578260086000600d848154811061279357612793613415565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806127fe57508160096000600d84815481106127d7576127d7613415565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561281457600f54600e54945094505050509091565b61285a60086000600d848154811061282e5761282e613415565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612972565b92506128a260096000600d848154811061287657612876613415565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612972565b9150806128ae8161348e565b915050612771565b50600e54600f546128c691611b5d565b8210156128dd57600f54600e549350935050509091565b90939092509050565b6000806000806128f585612f74565b9050600061290286612fbc565b90506000612914826124b88986612972565b979296509094509092505050565b60008080806129318886611b9f565b9050600061293f8887611b9f565b9050600061294d8888611b9f565b9050600061295f826124b88686612972565b939b939a50919850919650505050505050565b6000610dbb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120e7565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129e9576129e9613415565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8b919061354a565b81600181518110612a9e57612a9e613415565b60200260200101906001600160a01b031690816001600160a01b031681525050612ae9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c1e565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612b3e9085906000908690309042906004016135ab565b600060405180830381600087803b158015612b5857600080fd5b505af1158015612b6c573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516111f49291906135e7565b612bcc307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c1e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719823085600080612c136000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612c7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ca09190613608565b5050505050565b600080600080600080612cb9876121a3565b6001600160a01b038f16600090815260096020526040902054959b50939950919750955093509150612ceb9088612972565b6001600160a01b038a16600090815260096020908152604080832093909355600890522054612d1a9087612972565b6001600160a01b03808b1660009081526008602052604080822093909355908a1681522054612d499086612144565b6001600160a01b038916600090815260086020526040902055612d6b81613001565b612d75848361308a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612dba91815260200190565b60405180910390a38015612e095760405181815230906001600160a01b038b16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b505050505050505050565b600080600080600080612e26876121a3565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150612e589087612972565b6001600160a01b03808b16600090815260086020908152604080832094909455918b16815260099091522054612e8e9084612144565b6001600160a01b038916600090815260096020908152604080832093909355600890522054612d499086612144565b600080600080600080612ecf876121a3565b6001600160a01b038f16600090815260096020526040902054959b50939950919750955093509150612f019088612972565b6001600160a01b038a16600090815260096020908152604080832093909355600890522054612e589087612972565b600080600080600080612f42876121a3565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150612d1a9087612972565b6000612fa0601c54601e546064612f8b9190613461565b612f959190613461565b6123f0846064611b9f565b9150610bfb60646123f060145485611b9f90919063ffffffff16565b6000612fd3601c54601e546064612f8b9190613461565b9150610bfb60646123f0601a54601854601654612ff091906134a9565b612ffa91906134a9565b8590611b9f565b600061300b612121565b905060006130198383611b9f565b306000908152600860205260409020549091506130369082612144565b30600090815260086020908152604080832093909355600c9052205460ff161561308557306000908152600960205260409020546130749084612144565b306000908152600960205260409020555b505050565b600f546130979083612972565b600f556010546130a79082612144565b6010555050565b600060208083528351808285015260005b818110156130db578581018301518582016040015282016130bf565b818111156130ed576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146119fd57600080fd5b803561312381613103565b919050565b6000806040838503121561313b57600080fd5b823561314681613103565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561317d57600080fd5b823567ffffffffffffffff8082111561319557600080fd5b818501915085601f8301126131a957600080fd5b8135818111156131bb576131bb613154565b8060051b604051601f19603f830116810181811085821117156131e0576131e0613154565b6040529182528482019250838101850191888311156131fe57600080fd5b938501935b828510156132235761321485613118565b84529385019392850192613203565b98975050505050505050565b60006020828403121561324157600080fd5b8135610dbb81613103565b60006020828403121561325e57600080fd5b5035919050565b60008060006060848603121561327a57600080fd5b833561328581613103565b9250602084013561329581613103565b929592945050506040919091013590565b60008060008060008060c087890312156132bf57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b8035801515811461312357600080fd5b6000806040838503121561330c57600080fd5b8235915061331c602084016132e9565b90509250929050565b6000806040838503121561333857600080fd5b823561334381613103565b915061331c602084016132e9565b60006020828403121561336357600080fd5b610dbb826132e9565b6000806040838503121561337f57600080fd5b823561338a81613103565b9150602083013561339a81613103565b809150509250929050565b600181811c908216806133b957607f821691505b602082108114156133da57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8114156134585761345861342b565b60010192915050565b6000828210156134735761347361342b565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156134a2576134a261342b565b5060010190565b600082198211156134bc576134bc61342b565b500190565b60008160001904831182151516156134db576134db61342b565b500290565b6000826134fd57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b60006020828403121561355c57600080fd5b8151610dbb81613103565b600081518084526020808501945080840160005b838110156135a05781516001600160a01b03168752958201959082019060010161357b565b509495945050505050565b85815284602082015260a0604082015260006135ca60a0830186613567565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006136006040830184613567565b949350505050565b60008060006060848603121561361d57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d0a8f6b3c1575960fe58acd00a83a4f5d0aec480292cfcfa07337e32b80110a264736f6c634300080b0033

Deployed Bytecode Sourcemap

16004:25019:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19584:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20496:161;;;;;;;;;;-1:-1:-1;20496:161:0;;;;;:::i;:::-;;:::i;:::-;;;1376:14:1;;1369:22;1351:41;;1339:2;1324:18;20496:161:0;1211:187:1;15809:186:0;;;;;;;;;;-1:-1:-1;15809:186:0;;;;;:::i;:::-;;:::i;:::-;;21617:87;;;;;;;;;;-1:-1:-1;21686:10:0;;21617:87;;;2807:25:1;;;2795:2;2780:18;21617:87:0;2661:177:1;18265:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3034:32:1;;;3016:51;;3004:2;2989:18;18265:51:0;2843:230:1;19861:95:0;;;;;;;;;;-1:-1:-1;19941:7:0;;19861:95;;40508:46;;;;;;;;;;-1:-1:-1;40508:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37027:153;;;;;;;;;;-1:-1:-1;37027:153:0;;;;;:::i;:::-;;:::i;17498:32::-;;;;;;;;;;;;;;;;20665:313;;;;;;;;;;-1:-1:-1;20665:313:0;;;;;:::i;:::-;;:::i;16546:81::-;;;;;;;;;;;;;;;22286:253;;;;;;;;;;-1:-1:-1;22286:253:0;;;;;:::i;:::-;;:::i;19770:83::-;;;;;;;;;;-1:-1:-1;19836:9:0;;19770:83;;19836:9;;;;4326:36:1;;4314:2;4299:18;19770:83:0;4184:184:1;22890:479:0;;;;;;;;;;-1:-1:-1;22890:479:0;;;;;:::i;:::-;;:::i;36229:587::-;;;;;;;;;;-1:-1:-1;36229:587:0;;;;;:::i;:::-;;:::i;20986:218::-;;;;;;;;;;-1:-1:-1;20986:218:0;;;;;:::i;:::-;;:::i;17306:26::-;;;;;;;;;;;;;;;;35091:117;;;;;;;;;;-1:-1:-1;35091:117:0;;;;;:::i;:::-;;:::i;40346:130::-;;;;;;;;;;-1:-1:-1;40346:130:0;;;;;:::i;:::-;;:::i;21842:436::-;;;;;;;;;;-1:-1:-1;21842:436:0;;;;;:::i;:::-;;:::i;40645:197::-;;;;;;;;;;-1:-1:-1;40645:197:0;;;;;:::i;:::-;;:::i;15308:26::-;;;;;;;;;;-1:-1:-1;15308:26:0;;;;;;;;17599:32;;;;;;;;;;;;;;;;18323:38;;;;;;;;;;;;;;;18402:41;;;;;;;;;;-1:-1:-1;18402:41:0;;;;;;;;;;;40193:144;;;;;;;;;;-1:-1:-1;40193:144:0;;;;;:::i;:::-;;:::i;22547:335::-;;;;;;;;;;-1:-1:-1;22547:335:0;;;;;:::i;:::-;;:::i;34950:129::-;;;;;;;;;;-1:-1:-1;34950:129:0;;;;;:::i;:::-;-1:-1:-1;;;;;35044:27:0;35014:4;35044:27;;;:18;:27;;;;;;;;;34950:129;6656:90;;;;;;;;;;-1:-1:-1;6723:15:0;6656:90;;6554;;;;;;;;;;-1:-1:-1;6627:9:0;;6554:90;;17393:32;;;;;;;;;;;;;;;;19964:198;;;;;;;;;;-1:-1:-1;19964:198:0;;;;;:::i;:::-;;:::i;6146:148::-;;;;;;;;;;;;;:::i;39297:64::-;;;;;;;;;;;;;;;;18142:46;;;;;;;;;;;;;;;;21489:120;;;;;;;;;;-1:-1:-1;21489:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21581:20:0;21557:4;21581:20;;;:11;:20;;;;;;;;;21489:120;38352:585;;;;;;;;;;;;;:::i;15728:73::-;;;;;;;;;;;;;:::i;5921:79::-;;;;;;;;;;-1:-1:-1;5959:7:0;5986:6;-1:-1:-1;;;;;5986:6:0;5921:79;;37194:147;;;;;;;;;;-1:-1:-1;37194:147:0;;;;;:::i;:::-;;:::i;19675:87::-;;;;;;;;;;;;;:::i;37819:521::-;;;;;;;;;;;;;:::i;21212:269::-;;;;;;;;;;-1:-1:-1;21212:269:0;;;;;:::i;:::-;;:::i;16132:93::-;;;;;;;;;;-1:-1:-1;16132:93:0;;;;-1:-1:-1;;;;;16132:93:0;;;6992:308;;;;;;;;;;;;;:::i;35348:873::-;;;;;;;;;;-1:-1:-1;35348:873:0;;;;;:::i;:::-;;:::i;20170:167::-;;;;;;;;;;-1:-1:-1;20170:167:0;;;;;:::i;:::-;;:::i;17702:30::-;;;;;;;;;;;;;;;;21716:112;;;;;;;;;;-1:-1:-1;21801:19:0;;21716:112;;17799:27;;;;;;;;;;;;;;;;37630:171;;;;;;;;;;-1:-1:-1;37630:171:0;;;;;:::i;:::-;;:::i;16261:93::-;;;;;;;;;;-1:-1:-1;16261:93:0;;;;-1:-1:-1;;;;;16261:93:0;;;16391:83;;;;;;;;;;-1:-1:-1;16391:83:0;;;;-1:-1:-1;;;;;16391:83:0;;;37349:147;;;;;;;;;;-1:-1:-1;37349:147:0;;;;;:::i;:::-;;:::i;6754:226::-;;;;;;;;;;-1:-1:-1;6754:226:0;;;;;:::i;:::-;;:::i;20345:143::-;;;;;;;;;;-1:-1:-1;20345:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20453:18:0;;;20426:7;20453:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20345:143;35220:116;;;;;;;;;;-1:-1:-1;35220:116:0;;;;;:::i;:::-;;:::i;36826:187::-;;;;;;;;;;-1:-1:-1;36826:187:0;;;;;:::i;:::-;;:::i;6302:244::-;;;;;;;;;;-1:-1:-1;6302:244:0;;;;;:::i;:::-;;:::i;37504:116::-;;;;;;;;;;-1:-1:-1;37504:116:0;;;;;:::i;:::-;;:::i;15648:72::-;;;;;;;;;;;;;:::i;19584:83::-;19621:13;19654:5;19647:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19584:83;:::o;20496:161::-;20571:4;20588:39;323:10;20611:7;20620:6;20588:8;:39::i;:::-;-1:-1:-1;20645:4:0;20496:161;;;;;:::o;15809:186::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;;;;;;;;;15896:7:::1;15892:96;15913:6;:13;15909:1;:17;;;15892:96;;;15972:4;15948:10;:21;15959:6;15966:1;15959:9;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;15948:21:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;15948:21:0;:28;;-1:-1:-1;;15948:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15928:3;::::1;::::0;::::1;:::i;:::-;;;;15892:96;;;;15809:186:::0;:::o;37027:153::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;37130:19:::1;:42:::0;37027:153::o;20665:313::-;20763:4;20780:36;20790:6;20798:9;20809:6;20780:9;:36::i;:::-;20827:121;20836:6;323:10;20858:89;20896:6;20858:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20858:19:0;;;;;;:11;:19;;;;;;;;323:10;20858:33;;;;;;;;;;:37;:89::i;:::-;20827:8;:121::i;:::-;-1:-1:-1;20966:4:0;20665:313;;;;;:::o;22286:253::-;22352:7;22391;;22380;:18;;22372:73;;;;-1:-1:-1;;;22372:73:0;;7833:2:1;22372:73:0;;;7815:21:1;7872:2;7852:18;;;7845:30;7911:34;7891:18;;;7884:62;-1:-1:-1;;;7962:18:1;;;7955:40;8012:19;;22372:73:0;7631:406:1;22372:73:0;22456:19;22479:10;:8;:10::i;:::-;22456:33;-1:-1:-1;22507:24:0;:7;22456:33;22507:11;:24::i;:::-;22500:31;22286:253;-1:-1:-1;;;22286:253:0:o;22890:479::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22972:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22964:60;;;::::0;-1:-1:-1;;;22964:60:0;;8244:2:1;22964:60:0::1;::::0;::::1;8226:21:1::0;8283:2;8263:18;;;8256:30;8322:29;8302:18;;;8295:57;8369:18;;22964:60:0::1;8042:351:1::0;22964:60:0::1;23040:9;23035:327;23059:9;:16:::0;23055:20;::::1;23035:327;;;23117:7;-1:-1:-1::0;;;;;23101:23:0::1;:9;23111:1;23101:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23101:12:0::1;:23;23097:254;;;23160:9;23170:16:::0;;:20:::1;::::0;23189:1:::1;::::0;23170:20:::1;:::i;:::-;23160:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23145:9:::1;:12:::0;;-1:-1:-1;;;;;23160:31:0;;::::1;::::0;23155:1;;23145:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23145:46:0::1;-1:-1:-1::0;;;;;23145:46:0;;::::1;;::::0;;23210:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23249:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23249:28:0::1;::::0;;23296:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23296:15:0;;;;;-1:-1:-1;;;;;;23296:15:0::1;::::0;;;;;15892:96:::1;15809:186:::0;:::o;23097:254::-:1;23077:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23035:327;;36229:587:::0;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;36428:11:::1;:20:::0;;;36459:17:::1;:32:::0;;;36502:17:::1;:32:::0;;;36545:17:::1;:32:::0;;;36588:12:::1;:22:::0;;;-1:-1:-1;36640:60:0::1;36565:12:::0;36640:42:::1;36522:12:::0;36640:42;36442:6;36479:12;36640:10:::1;:24::i;:::-;:28:::0;::::1;:42::i;:60::-;36621:79:::0;-1:-1:-1;36722:38:0::1;36752:7:::0;36722:25:::1;36621:79:::0;36735:11;36722:12:::1;:25::i;:38::-;36711:49;;36789:2;36779:8;:12;;36771:37;;;::::0;-1:-1:-1;;;36771:37:0;;9002:2:1;36771:37:0::1;::::0;::::1;8984:21:1::0;9041:2;9021:18;;;9014:30;-1:-1:-1;;;9060:18:1;;;9053:42;9112:18;;36771:37:0::1;8800:336:1::0;36771:37:0::1;36417:399;36229:587:::0;;;;;;:::o;20986:218::-;323:10;21074:4;21123:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21123:34:0;;;;;;;;;;21074:4;;21091:83;;21114:7;;21123:50;;21162:10;21123:38;:50::i;35091:117::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35166:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;35166:34:0::1;35196:4;35166:34;::::0;;35091:117::o;40346:130::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;40436:22:::1;:32:::0;40346:130::o;21842:436::-;21932:7;21971;;21960;:18;;21952:62;;;;-1:-1:-1;;;21952:62:0;;9343:2:1;21952:62:0;;;9325:21:1;9382:2;9362:18;;;9355:30;9421:33;9401:18;;;9394:61;9472:18;;21952:62:0;9141:355:1;21952:62:0;22030:17;22025:246;;22065:15;22089:19;22100:7;22089:10;:19::i;:::-;-1:-1:-1;22064:44:0;;-1:-1:-1;22123:14:0;;-1:-1:-1;;;;;22123:14:0;22025:246;22172:23;22203:19;22214:7;22203:10;:19::i;:::-;-1:-1:-1;22170:52:0;;-1:-1:-1;22237:22:0;;-1:-1:-1;;;;;22237:22:0;40645:197;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40735:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;;:31;;-1:-1:-1;;40735:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;40782:52;;9697:51:1;;;9764:18;;;9757:50;40818:15:0::1;9823:18:1::0;;;9816:34;40782:52:0::1;::::0;9685:2:1;9670:18;40782:52:0::1;;;;;;;;40645:197:::0;;:::o;40193:144::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40289:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;40289:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40193:144::o;22547:335::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22632:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22631:21;22623:61;;;::::0;-1:-1:-1;;;22623:61:0;;8244:2:1;22623:61:0::1;::::0;::::1;8226:21:1::0;8283:2;8263:18;;;8256:30;8322:29;8302:18;;;8295:57;8369:18;;22623:61:0::1;8042:351:1::0;22623:61:0::1;-1:-1:-1::0;;;;;22698:16:0;::::1;22717:1;22698:16:::0;;;:7:::1;:16;::::0;;;;;:20;22695:108:::1;;-1:-1:-1::0;;;;;22774:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22754:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22735:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22695:108:::1;-1:-1:-1::0;;;;;22813:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22813:27:0::1;22836:4;22813:27:::0;;::::1;::::0;;;22851:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22851:23:0::1;::::0;;::::1;::::0;;22547:335::o;19964:198::-;-1:-1:-1;;;;;20054:20:0;;20030:7;20054:20;;;:11;:20;;;;;;;;20050:49;;;-1:-1:-1;;;;;;20083:16:0;;;;;:7;:16;;;;;;;19964:198::o;20050:49::-;-1:-1:-1;;;;;20137:16:0;;;;;;:7;:16;;;;;;20117:37;;:19;:37::i;6146:148::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;6253:1:::1;6237:6:::0;;6216:40:::1;::::0;-1:-1:-1;;;;;6237:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6216:40:0;6253:1;;6216:40:::1;6284:1;6267:19:::0;;-1:-1:-1;;;;;;6267:19:0::1;::::0;;6146:148::o;38352:585::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;38425:1:::1;38415:7;:11:::0;;;38437:15:::1;:25:::0;;;38475:13:::1;:17:::0;;;38503:21:::1;:37:::0;;;38569:1:::1;38553:13;:17:::0;;;38581:21:::1;:37:::0;;;38631:13:::1;:17:::0;;;38659:21:::1;:37:::0;38709:11:::1;:15:::0;;;38735:19:::1;:33:::0;38800:1:::1;38789:8;:12:::0;;;38812:16:::1;:27:::0;;;38852:30:::1;::::0;:24:::1;:30::i;:::-;38908:21;38893:12;:36:::0;38352:585::o;15728:73::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;15779:6:::1;:14:::0;;-1:-1:-1;;15779:14:0::1;::::0;;15728:73::o;37194:147::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;37288:16:::1;:45:::0;;-1:-1:-1;;;;;;37288:45:0::1;-1:-1:-1::0;;;;;37288:45:0;;;::::1;::::0;;;::::1;::::0;;37194:147::o;19675:87::-;19714:13;19747:7;19740:14;;;;;:::i;37819:521::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;37893:1:::1;37883:7;:11:::0;;;37905:15:::1;:19:::0;;;37937:13:::1;:17:::0;;;37965:21:::1;:25:::0;;;38003:13:::1;:17:::0;;;38031:21:::1;:25:::0;;;38069:13:::1;:17:::0;;;38097:21:::1;:25:::0;;;38135:11:::1;:15:::0;;;38161:19:::1;:23:::0;;;38197:8:::1;:12:::0;;;38220:16:::1;:20:::0;;;38253:31:::1;::::0;:24:::1;:31::i;:::-;38310:22;38295:12;:37:::0;37819:521::o;21212:269::-;21305:4;21322:129;323:10;21345:7;21354:96;21393:15;21354:96;;;;;;;;;;;;;;;;;323:10;21354:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21354:34:0;;;;;;;;;;;;:38;:96::i;6992:308::-;7044:14;;-1:-1:-1;;;;;7044:14:0;7062:10;7044:28;7036:76;;;;-1:-1:-1;;;7036:76:0;;10063:2:1;7036:76:0;;;10045:21:1;10102:2;10082:18;;;10075:30;10141:34;10121:18;;;10114:62;-1:-1:-1;;;10192:18:1;;;10185:33;10235:19;;7036:76:0;9861:399:1;7036:76:0;7149:9;;7131:15;:27;7123:75;;;;-1:-1:-1;;;7123:75:0;;10467:2:1;7123:75:0;;;10449:21:1;10506:2;10486:18;;;10479:30;10545:34;10525:18;;;10518:62;-1:-1:-1;;;10596:18:1;;;10589:32;10638:19;;7123:75:0;10265:398:1;7123:75:0;7243:14;;;7235:6;;7214:44;;-1:-1:-1;;;;;7243:14:0;;;;7235:6;;;;-1:-1:-1;;;;;;;;;;;7214:44:0;;7278:14;;;7269:23;;-1:-1:-1;;;;;;7269:23:0;-1:-1:-1;;;;;7278:14:0;;;7269:23;;;;;;6992:308::o;35348:873::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;35547:7:::1;:16:::0;;;35574:15:::1;:24:::0;;;35611:13:::1;:28:::0;;;35650:21:::1;:36:::0;;;35699:13:::1;:28:::0;;;35738:21:::1;:36:::0;;;35787:13:::1;:28:::0;;;35826:21:::1;:36:::0;;;35875:11:::1;:24:::0;;;35910:19:::1;:32:::0;;;35955:8:::1;:18:::0;;;35984:16:::1;:26:::0;;;-1:-1:-1;36042:60:0::1;35803:12:::0;36042:42:::1;35715:12:::0;36042:42;35557:6;35627:12;36042:10:::1;:24::i;20170:167::-:0;20248:4;20265:42;323:10;20289:9;20300:6;20265:9;:42::i;37630:171::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;37707:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;37707:32:0;;::::1;;::::0;;37755:38:::1;::::0;::::1;::::0;::::1;::::0;37731:8;1376:14:1;1369:22;1351:41;;1339:2;1324:18;;1211:187;37755:38:0::1;;;;;;;;37630:171:::0;:::o;37349:147::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;37443:16:::1;:45:::0;;-1:-1:-1;;;;;;37443:45:0::1;-1:-1:-1::0;;;;;37443:45:0;;;::::1;::::0;;;::::1;::::0;;37349:147::o;6754:226::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;6835:6:::1;::::0;;;6818:23;;-1:-1:-1;;;;;;6818:23:0;;::::1;-1:-1:-1::0;;;;;6835:6:0;::::1;6818:23;::::0;;;6852:19:::1;::::0;;6894:22:::1;6912:4:::0;6894:15:::1;:22;:::i;:::-;6882:9;:34:::0;6969:1:::1;6953:6:::0;;6932:40:::1;::::0;-1:-1:-1;;;;;6953:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6932:40:0;6969:1;;6932:40:::1;6754:226:::0;:::o;35220:116::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35293:27:0::1;35323:5;35293:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35293:35:0::1;::::0;;35220:116::o;36826:187::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;36909:12:::1;:26:::0;;;36966:7:::1;::::0;:18:::1;::::0;36978:5:::1;36966:11;:18::i;:::-;36954:11;:30;36946:59;;;::::0;-1:-1:-1;;;36946:59:0;;11003:2:1;36946:59:0::1;::::0;::::1;10985:21:1::0;11042:2;11022:18;;;11015:30;-1:-1:-1;;;11061:18:1;;;11054:46;11117:18;;36946:59:0::1;10801:340:1::0;36946:59:0::1;36826:187:::0;:::o;6302:244::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6391:22:0;::::1;6383:73;;;::::0;-1:-1:-1;;;6383:73:0;;11348:2:1;6383:73:0::1;::::0;::::1;11330:21:1::0;11387:2;11367:18;;;11360:30;11426:34;11406:18;;;11399:62;-1:-1:-1;;;11477:18:1;;;11470:36;11523:19;;6383:73:0::1;11146:402:1::0;6383:73:0::1;6493:6;::::0;;6472:38:::1;::::0;-1:-1:-1;;;;;6472:38:0;;::::1;::::0;6493:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6472:38:0;::::1;6521:6;:17:::0;;-1:-1:-1;;;;;;6521:17:0::1;-1:-1:-1::0;;;;;6521:17:0;;;::::1;::::0;;;::::1;::::0;;6302:244::o;37504:116::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;37587:14:::1;:25:::0;;-1:-1:-1;;;;;;37587:25:0::1;-1:-1:-1::0;;;;;37587:25:0;;;::::1;::::0;;;::::1;::::0;;37504:116::o;15648:72::-;6055:6;;-1:-1:-1;;;;;6055:6:0;323:10;6055:22;6047:67;;;;-1:-1:-1;;;6047:67:0;;;;;;;:::i;:::-;15699:6:::1;:13:::0;;-1:-1:-1;;15699:13:0::1;15708:4;15699:13;::::0;;15648:72::o;2080:132::-;2138:7;2165:39;2169:1;2172;2165:39;;;;;;;;;;;;;;;;;:3;:39::i;1824:246::-;1882:7;1906:6;1902:47;;-1:-1:-1;1936:1:0;1929:8;;1902:47;1959:9;1971:5;1975:1;1971;:5;:::i;:::-;1959:17;-1:-1:-1;2004:1:0;1995:5;1999:1;1959:17;1995:5;:::i;:::-;:10;1987:56;;;;-1:-1:-1;;;1987:56:0;;12150:2:1;1987:56:0;;;12132:21:1;12189:2;12169:18;;;12162:30;12228:34;12208:18;;;12201:62;-1:-1:-1;;;12279:18:1;;;12272:31;12320:19;;1987:56:0;11948:397:1;23377:337:0;-1:-1:-1;;;;;23470:19:0;;23462:68;;;;-1:-1:-1;;;23462:68:0;;12552:2:1;23462:68:0;;;12534:21:1;12591:2;12571:18;;;12564:30;12630:34;12610:18;;;12603:62;-1:-1:-1;;;12681:18:1;;;12674:34;12725:19;;23462:68:0;12350:400:1;23462:68:0;-1:-1:-1;;;;;23549:21:0;;23541:68;;;;-1:-1:-1;;;23541:68:0;;12957:2:1;23541:68:0;;;12939:21:1;12996:2;12976:18;;;12969:30;13035:34;13015:18;;;13008:62;-1:-1:-1;;;13086:18:1;;;13079:32;13128:19;;23541:68:0;12755:398:1;23541:68:0;-1:-1:-1;;;;;23622:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23674:32;;2807:25:1;;;23674:32:0;;2780:18:1;23674:32:0;;;;;;;23377:337;;;:::o;23722:1349::-;15450:6;;23796:4;;23802:2;;15450:6;;;:26;;-1:-1:-1;;;;;;15460:16:0;;;;;;:10;:16;;;;;;;;15450:26;:44;;;-1:-1:-1;;;;;;15480:14:0;;;;;;:10;:14;;;;;;;;15450:44;15442:65;;;;-1:-1:-1;;;15442:65:0;;13360:2:1;15442:65:0;;;13342:21:1;13399:1;13379:18;;;13372:29;-1:-1:-1;;;13417:18:1;;;13410:38;13465:18;;15442:65:0;13158:331:1;15442:65:0;-1:-1:-1;;;;;23831:18:0;::::1;23823:68;;;::::0;-1:-1:-1;;;23823:68:0;;13696:2:1;23823:68:0::1;::::0;::::1;13678:21:1::0;13735:2;13715:18;;;13708:30;13774:34;13754:18;;;13747:62;-1:-1:-1;;;13825:18:1;;;13818:35;13870:19;;23823:68:0::1;13494:401:1::0;23823:68:0::1;-1:-1:-1::0;;;;;23910:16:0;::::1;23902:64;;;::::0;-1:-1:-1;;;23902:64:0;;14102:2:1;23902:64:0::1;::::0;::::1;14084:21:1::0;14141:2;14121:18;;;14114:30;14180:34;14160:18;;;14153:62;-1:-1:-1;;;14231:18:1;;;14224:33;14274:19;;23902:64:0::1;13900:399:1::0;23902:64:0::1;23994:1;23985:6;:10;23977:64;;;::::0;-1:-1:-1;;;23977:64:0;;14506:2:1;23977:64:0::1;::::0;::::1;14488:21:1::0;14545:2;14525:18;;;14518:30;14584:34;14564:18;;;14557:62;-1:-1:-1;;;14635:18:1;;;14628:39;14684:19;;23977:64:0::1;14304:405:1::0;23977:64:0::1;24054:27;24072:4;24078:2;24054:17;:27::i;:::-;24092:31;24106:4;24112:2;24116:6;24092:13;:31::i;:::-;5959:7:::0;5986:6;-1:-1:-1;;;;;24139:15:0;;::::1;5986:6:::0;;24139:15:::1;::::0;::::1;::::0;:32:::1;;-1:-1:-1::0;5959:7:0;5986:6;-1:-1:-1;;;;;24158:13:0;;::::1;5986:6:::0;;24158:13:::1;;24139:32;24136:149;;;24216:12;;24206:6;:22;;24198:75;;;::::0;-1:-1:-1;;;24198:75:0;;14916:2:1;24198:75:0::1;::::0;::::1;14898:21:1::0;14955:2;14935:18;;;14928:30;14994:34;14974:18;;;14967:62;-1:-1:-1;;;15045:18:1;;;15038:38;15093:19;;24198:75:0::1;14714:404:1::0;24198:75:0::1;24297:28;24328:24;24346:4;24328:9;:24::i;:::-;24418:19;::::0;24463:16:::1;::::0;24297:55;;-1:-1:-1;24394:43:0;::::1;;::::0;24463:16:::1;;24462:17;:42:::0;::::1;;;-1:-1:-1::0;24483:21:0::1;::::0;::::1;::::0;::::1;;;24462:42;:67;;;;;24516:13;-1:-1:-1::0;;;;;24508:21:0::1;:4;-1:-1:-1::0;;;;;24508:21:0::1;;;24462:67;24458:278;;;24550:23;24546:179;;;24631:19;;24608:42;;24669:36;24684:20;24669:14;:36::i;:::-;24756:12;24771:4;24756:19;;24793:13;-1:-1:-1::0;;;;;24789:17:0::1;:2;-1:-1:-1::0;;;;;24789:17:0::1;;24786:39;;;24810:12;34717:11:::0;;34707:7;:21;34755:17;;34739:13;:33;34799:17;;34783:13;:33;34843:17;;34827:13;:33;34885:15;;34871:11;:29;34922:12;;34911:8;:23;34660:282;24810:12:::1;-1:-1:-1::0;;;;;24922:24:0;::::1;;::::0;;;:18:::1;:24;::::0;;;;;::::1;;::::0;:50:::1;;-1:-1:-1::0;;;;;;24950:22:0;::::1;;::::0;;;:18:::1;:22;::::0;;;;;::::1;;24922:50;24919:96;;;-1:-1:-1::0;24998:5:0::1;24919:96;25025:38;25040:4;25045:2;25048:6;25055:7;25025:14;:38::i;:::-;23812:1259;;;23722:1349:::0;;;;;:::o;1624:192::-;1710:7;1746:12;1738:6;;;;1730:29;;;;-1:-1:-1;;;1730:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1770:9:0;1782:5;1786:1;1782;:5;:::i;:::-;1770:17;1624:192;-1:-1:-1;;;;;1624:192:0:o;32544:163::-;32585:7;32606:15;32623;32642:19;:17;:19::i;:::-;32605:56;;-1:-1:-1;32605:56:0;-1:-1:-1;32679:20:0;32605:56;;32679:11;:20::i;:::-;32672:27;;;;32544:163;:::o;1293:179::-;1351:7;;1383:5;1387:1;1383;:5;:::i;:::-;1371:17;;1412:1;1407;:6;;1399:46;;;;-1:-1:-1;;;1399:46:0;;15325:2:1;1399:46:0;;;15307:21:1;15364:2;15344:18;;;15337:30;15403:29;15383:18;;;15376:57;15450:18;;1399:46:0;15123:351:1;31342:419:0;31401:7;31410;31419;31428;31437;31446;31467:23;31492:12;31506:18;31528:20;31540:7;31528:11;:20::i;:::-;31466:82;;;;;;31560:15;31577:23;31602:12;31618:50;31630:7;31639:4;31645:10;31657;:8;:10::i;:::-;31618:11;:50::i;:::-;31559:109;;;;-1:-1:-1;31559:109:0;;-1:-1:-1;31719:15:0;;-1:-1:-1;31736:4:0;;-1:-1:-1;31742:10:0;;-1:-1:-1;31342:419:0;;-1:-1:-1;;;;;31342:419:0:o;2220:278::-;2306:7;2341:12;2334:5;2326:28;;;;-1:-1:-1;;;2326:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2365:9:0;2377:5;2381:1;2377;:5;:::i;40850:166::-;-1:-1:-1;;;;;40941:20:0;;;;;;:14;:20;;;;;;;;40940:21;:44;;;;-1:-1:-1;;;;;;40966:18:0;;;;;;:14;:18;;;;;;;;40965:19;40940:44;40932:76;;;;-1:-1:-1;;;40932:76:0;;15681:2:1;40932:76:0;;;15663:21:1;15720:2;15700:18;;;15693:30;-1:-1:-1;;;15739:18:1;;;15732:49;15798:18;;40932:76:0;15479:343:1;39638:546:0;39738:18;39759:25;39777:6;39759:13;39769:2;39759:9;:13::i;:25::-;-1:-1:-1;;;;;39799:26:0;;;;;;:20;:26;;;;;;39738:46;;-1:-1:-1;39799:26:0;;39798:27;:56;;;;-1:-1:-1;;;;;;39830:24:0;;;;;;:20;:24;;;;;;;;39829:25;39798:56;39795:189;;;39904:22;;39890:10;:36;;39882:89;;;;-1:-1:-1;;;39882:89:0;;;;;;;:::i;:::-;40004:13;-1:-1:-1;;;;;39998:19:0;:4;-1:-1:-1;;;;;39998:19:0;;:48;;;;-1:-1:-1;;;;;;40022:24:0;;;;;;:20;:24;;;;;;;;40021:25;39998:48;39995:181;;;40096:22;;40082:10;:36;;40074:89;;;;-1:-1:-1;;;40074:89:0;;;;;;;:::i;:::-;39727:457;39638:546;;;:::o;25079:1055::-;18930:16;:23;;-1:-1:-1;;18930:23:0;18949:4;18930:23;;;25229:13:::1;::::0;25210::::1;::::0;25192::::1;::::0;18930:16;;25192:51:::1;::::0;25229:13;;25192:32:::1;::::0;:17:::1;:32::i;:51::-;25170:73;;25254:27;25284:63;25345:1;25284:56;25328:11;25284:39;25309:13;;25284:20;:24;;:39;;;;:::i;:::-;:43:::0;::::1;:56::i;:63::-;25254:93:::0;-1:-1:-1;25358:22:0::1;25383:45;:20:::0;25254:93;25383:24:::1;:45::i;:::-;25358:70:::0;-1:-1:-1;25464:21:0::1;25496:32;25358:70:::0;25496:16:::1;:32::i;:::-;25540:18;25561:41;:21;25587:14:::0;25561:25:::1;:41::i;:::-;25540:62;;25613:23;25639:53;25690:1;25639:46;25673:11;25639:29;25654:13;;25639:10;:14;;:29;;;;:::i;:53::-;25613:79;;25703:50;25716:19;25737:15;25703:12;:50::i;:::-;25769:73;::::0;;16438:25:1;;;16494:2;16479:18;;16472:34;;;16522:18;;;16515:34;;;25769:73:0::1;::::0;16426:2:1;16411:18;25769:73:0::1;;;;;;;25855:23;25881:46;25915:11;25881:29;25896:13;;25881:10;:14;;:29;;;;:::i;:46::-;25855:72:::0;-1:-1:-1;25938:23:0::1;25964:52;26000:15:::0;25964:31:::1;:10:::0;25855:72;25964:14:::1;:31::i;:::-;:35:::0;::::1;:52::i;:::-;26029:16;::::0;:42:::1;::::0;25938:78;;-1:-1:-1;;;;;;26029:16:0::1;::::0;:42;::::1;;;::::0;26055:15;;26029:16:::1;:42:::0;:16;:42;26055:15;26029:16;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;26082:16:0::1;::::0;:42:::1;::::0;-1:-1:-1;;;;;26082:16:0;;::::1;::::0;:42;::::1;;;::::0;26108:15;;26082:16:::1;:42:::0;:16;:42;26108:15;26082:16;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;18976:16:0;:24;;-1:-1:-1;;18976:24:0;;;-1:-1:-1;;;;;;;;25079:1055:0:o;27359:1173::-;27470:7;27466:32;;27481:14;34187:1;34177:7;:11;;;34199:13;:17;;;34227:13;:17;;;34255:13;:17;;;34283:11;:15;;;34309:8;:12;34121:208;27481:14;27510:18;27531:29;27556:3;27531:20;27542:8;;27531:6;:10;;:20;;;;:::i;:29::-;27510:50;;27571:21;27595:32;27623:3;27595:23;27606:11;;27595:6;:10;;:23;;;;:::i;:32::-;27571:56;-1:-1:-1;27649:41:0;27571:56;27649:22;:6;27660:10;27649;:22::i;:41::-;-1:-1:-1;;;;;27715:19:0;;;;;;:11;:19;;;;;;27640:50;;-1:-1:-1;27715:19:0;;:46;;;;-1:-1:-1;;;;;;27739:22:0;;;;;;:11;:22;;;;;;;;27738:23;27715:46;27711:507;;;27788:48;27810:6;27818:9;27829:6;27788:21;:48::i;:::-;27711:507;;;-1:-1:-1;;;;;27859:19:0;;;;;;:11;:19;;;;;;;;27858:20;:46;;;;-1:-1:-1;;;;;;27882:22:0;;;;;;:11;:22;;;;;;;;27858:46;27854:364;;;27931:46;27951:6;27959:9;27970:6;27931:19;:46::i;27854:364::-;-1:-1:-1;;;;;27999:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;28022:22:0;;;;;;:11;:22;;;;;;;;27999:45;27995:223;;;28071:48;28093:6;28101:9;28112:6;28071:21;:48::i;27995:223::-;28162:44;28180:6;28188:9;28199:6;28162:17;:44::i;:::-;28230:14;34187:1;34177:7;:11;;;34199:13;:17;;;34227:13;:17;;;34255:13;:17;;;34283:11;:15;;;34309:8;:12;34121:208;28230:14;28260;;28257:105;;28300:50;28318:6;28326:11;28339:10;28300:17;:50::i;:::-;28382:17;;28379:114;;28451:14;;28425:56;;28443:6;;-1:-1:-1;;;;;28451:14:0;28467:13;28425:17;:56::i;:::-;28507:15;34401;;34391:7;:25;34443:21;;34427:13;:37;34491:21;;34475:13;:37;34539:21;;34523:13;:37;34585:19;;34571:11;:33;34626:16;;34615:8;:27;34341:309;28507:15;27455:1077;;27359:1173;;;;:::o;32715:561::-;32812:7;;32848;;32765;;;;;32872:289;32896:9;:16;32892:20;;32872:289;;;32962:7;32938;:21;32946:9;32956:1;32946:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32946:12:0;32938:21;;;;;;;;;;;;;:31;;:66;;;32997:7;32973;:21;32981:9;32991:1;32981:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32981:12:0;32973:21;;;;;;;;;;;;;:31;32938:66;32934:97;;;33014:7;;33023;;33006:25;;;;;;;32715:561;;:::o;32934:97::-;33056:34;33068:7;:21;33076:9;33086:1;33076:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33076:12:0;33068:21;;;;;;;;;;;;;33056:7;;:11;:34::i;:::-;33046:44;;33115:34;33127:7;:21;33135:9;33145:1;33135:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33135:12:0;33127:21;;;;;;;;;;;;;33115:7;;:11;:34::i;:::-;33105:44;-1:-1:-1;32914:3:0;;;;:::i;:::-;;;;32872:289;;;-1:-1:-1;33197:7:0;;33185;;:20;;:11;:20::i;:::-;33175:7;:30;33171:61;;;33215:7;;33224;;33207:25;;;;;;32715:561;;:::o;33171:61::-;33251:7;;33260;;-1:-1:-1;32715:561:0;-1:-1:-1;32715:561:0:o;31769:330::-;31829:7;31838;31847;31867:12;31882:24;31898:7;31882:15;:24::i;:::-;31867:39;;31917:18;31938:30;31960:7;31938:21;:30::i;:::-;31917:51;-1:-1:-1;31979:23:0;32005:33;31917:51;32005:17;:7;32017:4;32005:11;:17::i;:33::-;31979:59;32074:4;;-1:-1:-1;32080:10:0;;-1:-1:-1;31769:330:0;;-1:-1:-1;;;31769:330:0:o;32107:429::-;32222:7;;;;32278:24;:7;32290:11;32278;:24::i;:::-;32260:42;-1:-1:-1;32313:12:0;32328:21;:4;32337:11;32328:8;:21::i;:::-;32313:36;-1:-1:-1;32360:18:0;32381:27;:10;32396:11;32381:14;:27::i;:::-;32360:48;-1:-1:-1;32419:23:0;32445:33;32360:48;32445:17;:7;32457:4;32445:11;:17::i;:33::-;32497:7;;;;-1:-1:-1;32523:4:0;;-1:-1:-1;32107:429:0;;-1:-1:-1;;;;;;;32107:429:0:o;1480:136::-;1538:7;1565:43;1569:1;1572;1565:43;;;;;;;;;;;;;;;;;:3;:43::i;26154:666::-;26304:16;;;26318:1;26304:16;;;;;;;;26280:21;;26304:16;;;;;;;;;;-1:-1:-1;26304:16:0;26280:40;;26349:4;26331;26336:1;26331:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;26331:23:0;;;-1:-1:-1;;;;;26331:23:0;;;;;26375:15;-1:-1:-1;;;;;26375:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26365:4;26370:1;26365:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;26365:32:0;;;-1:-1:-1;;;;;26365:32:0;;;;;26410:62;26427:4;26442:15;26460:11;26410:8;:62::i;:::-;26511:240;;-1:-1:-1;;;26511:240:0;;-1:-1:-1;;;;;26511:15:0;:66;;;;:240;;26592:11;;26618:1;;26662:4;;26689;;26725:15;;26511:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26777:35;26794:11;26807:4;26777:35;;;;;;;:::i;26838:513::-;26986:62;27003:4;27018:15;27036:11;26986:8;:62::i;:::-;27091:15;-1:-1:-1;;;;;27091:31:0;;27130:9;27163:4;27183:11;27209:1;27252;27295:7;5959;5986:6;-1:-1:-1;;;;;5986:6:0;;5921:79;27295:7;27091:252;;;;;;-1:-1:-1;;;;;;27091:252:0;;;-1:-1:-1;;;;;18565:15:1;;;27091:252:0;;;18547:34:1;18597:18;;;18590:34;;;;18640:18;;;18633:34;;;;18683:18;;;18676:34;18747:15;;;18726:19;;;18719:44;27317:15:0;18779:19:1;;;18772:35;18481:19;;27091:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26838:513;;:::o;29809:643::-;29912:15;29929:23;29954:12;29968:23;29993:12;30007:18;30029:19;30040:7;30029:10;:19::i;:::-;-1:-1:-1;;;;;30074:15:0;;;;;;:7;:15;;;;;;29911:137;;-1:-1:-1;29911:137:0;;-1:-1:-1;29911:137:0;;-1:-1:-1;29911:137:0;-1:-1:-1;29911:137:0;-1:-1:-1;29911:137:0;-1:-1:-1;30074:28:0;;30094:7;30074:19;:28::i;:::-;-1:-1:-1;;;;;30056:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30131:7;:15;;;;:28;;30151:7;30131:19;:28::i;:::-;-1:-1:-1;;;;;30113:15:0;;;;;;;:7;:15;;;;;;:46;;;;30191:18;;;;;;;:39;;30214:15;30191:22;:39::i;:::-;-1:-1:-1;;;;;30170:18:0;;;;;;:7;:18;;;;;:60;30244:26;30259:10;30244:14;:26::i;:::-;30281:23;30293:4;30299;30281:11;:23::i;:::-;30337:9;-1:-1:-1;;;;;30320:44:0;30329:6;-1:-1:-1;;;;;30320:44:0;;30348:15;30320:44;;;;2807:25:1;;2795:2;2780:18;;2661:177;30320:44:0;;;;;;;;30378:12;;30375:70;;30399:43;;2807:25:1;;;30424:4:0;;-1:-1:-1;;;;;30399:43:0;;;;;2795:2:1;2780:18;30399:43:0;;;;;;;30375:70;29900:552;;;;;;29809:643;;;:::o;29138:663::-;29239:15;29256:23;29281:12;29295:23;29320:12;29334:18;29356:19;29367:7;29356:10;:19::i;:::-;-1:-1:-1;;;;;29401:15:0;;;;;;:7;:15;;;;;;29238:137;;-1:-1:-1;29238:137:0;;-1:-1:-1;29238:137:0;;-1:-1:-1;29238:137:0;-1:-1:-1;29238:137:0;-1:-1:-1;29238:137:0;-1:-1:-1;29401:28:0;;29238:137;29401:19;:28::i;:::-;-1:-1:-1;;;;;29383:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;29461:18;;;;;:7;:18;;;;;:39;;29484:15;29461:22;:39::i;:::-;-1:-1:-1;;;;;29440:18:0;;;;;;:7;:18;;;;;;;;:60;;;;29532:7;:18;;;;:39;;29555:15;29532:22;:39::i;30460:719::-;30563:15;30580:23;30605:12;30619:23;30644:12;30658:18;30680:19;30691:7;30680:10;:19::i;:::-;-1:-1:-1;;;;;30725:15:0;;;;;;:7;:15;;;;;;30562:137;;-1:-1:-1;30562:137:0;;-1:-1:-1;30562:137:0;;-1:-1:-1;30562:137:0;-1:-1:-1;30562:137:0;-1:-1:-1;30562:137:0;-1:-1:-1;30725:28:0;;30745:7;30725:19;:28::i;:::-;-1:-1:-1;;;;;30707:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30782:7;:15;;;;:28;;30802:7;30782:19;:28::i;28540:588::-;28645:15;28662:23;28687:12;28701:23;28726:12;28740:18;28762:19;28773:7;28762:10;:19::i;:::-;-1:-1:-1;;;;;28810:15:0;;;;;;:7;:15;;;;;;28644:137;;-1:-1:-1;28644:137:0;;-1:-1:-1;28644:137:0;;-1:-1:-1;28644:137:0;-1:-1:-1;28644:137:0;-1:-1:-1;28644:137:0;-1:-1:-1;28810:28:0;;28644:137;28810:19;:28::i;33655:201::-;33719:7;33755:46;33789:11;;33780:8;;33776:3;:12;;;;:::i;:::-;:24;;;;:::i;:::-;33755:16;:7;33767:3;33755:11;:16::i;:46::-;33745:56;;33819:29;33844:3;33819:20;33831:7;;33819;:11;;:20;;;;:::i;33868:241::-;33938:7;33974:46;34008:11;;33999:8;;33995:3;:12;;;;:::i;33974:46::-;33964:56;;34038:63;34097:3;34038:54;34078:13;;34064;;34050;;:27;;;;:::i;:::-;:41;;;;:::i;:::-;34038:7;;:11;:54::i;33288:355::-;33351:19;33374:10;:8;:10::i;:::-;33351:33;-1:-1:-1;33395:18:0;33416:27;:10;33351:33;33416:14;:27::i;:::-;33495:4;33479:22;;;;:7;:22;;;;;;33395:48;;-1:-1:-1;33479:38:0;;33395:48;33479:26;:38::i;:::-;33470:4;33454:22;;;;:7;:22;;;;;;;;:63;;;;33531:11;:26;;;;;;33528:107;;;33613:4;33597:22;;;;:7;:22;;;;;;:38;;33624:10;33597:26;:38::i;:::-;33588:4;33572:22;;;;:7;:22;;;;;:63;33528:107;33340:303;;33288:355;:::o;31187:147::-;31265:7;;:17;;31277:4;31265:11;:17::i;:::-;31255:7;:27;31306:10;;:20;;31321:4;31306:14;:20::i;:::-;31293:10;:33;-1:-1:-1;;31187:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:134;820:20;;849:31;820:20;849:31;:::i;:::-;752:134;;;:::o;891:315::-;959:6;967;1020:2;1008:9;999:7;995:23;991:32;988:52;;;1036:1;1033;1026:12;988:52;1075:9;1062:23;1094:31;1119:5;1094:31;:::i;:::-;1144:5;1196:2;1181:18;;;;1168:32;;-1:-1:-1;;;891:315:1:o;1403:127::-;1464:10;1459:3;1455:20;1452:1;1445:31;1495:4;1492:1;1485:15;1519:4;1516:1;1509:15;1535:1121;1619:6;1650:2;1693;1681:9;1672:7;1668:23;1664:32;1661:52;;;1709:1;1706;1699:12;1661:52;1749:9;1736:23;1778:18;1819:2;1811:6;1808:14;1805:34;;;1835:1;1832;1825:12;1805:34;1873:6;1862:9;1858:22;1848:32;;1918:7;1911:4;1907:2;1903:13;1899:27;1889:55;;1940:1;1937;1930:12;1889:55;1976:2;1963:16;1998:2;1994;1991:10;1988:36;;;2004:18;;:::i;:::-;2050:2;2047:1;2043:10;2082:2;2076:9;2145:2;2141:7;2136:2;2132;2128:11;2124:25;2116:6;2112:38;2200:6;2188:10;2185:22;2180:2;2168:10;2165:18;2162:46;2159:72;;;2211:18;;:::i;:::-;2247:2;2240:22;2297:18;;;2331:15;;;;-1:-1:-1;2373:11:1;;;2369:20;;;2401:19;;;2398:39;;;2433:1;2430;2423:12;2398:39;2457:11;;;;2477:148;2493:6;2488:3;2485:15;2477:148;;;2559:23;2578:3;2559:23;:::i;:::-;2547:36;;2510:12;;;;2603;;;;2477:148;;;2644:6;1535:1121;-1:-1:-1;;;;;;;;1535:1121:1:o;3078:247::-;3137:6;3190:2;3178:9;3169:7;3165:23;3161:32;3158:52;;;3206:1;3203;3196:12;3158:52;3245:9;3232:23;3264:31;3289:5;3264:31;:::i;3330:180::-;3389:6;3442:2;3430:9;3421:7;3417:23;3413:32;3410:52;;;3458:1;3455;3448:12;3410:52;-1:-1:-1;3481:23:1;;3330:180;-1:-1:-1;3330:180:1:o;3515:456::-;3592:6;3600;3608;3661:2;3649:9;3640:7;3636:23;3632:32;3629:52;;;3677:1;3674;3667:12;3629:52;3716:9;3703:23;3735:31;3760:5;3735:31;:::i;:::-;3785:5;-1:-1:-1;3842:2:1;3827:18;;3814:32;3855:33;3814:32;3855:33;:::i;:::-;3515:456;;3907:7;;-1:-1:-1;;;3961:2:1;3946:18;;;;3933:32;;3515:456::o;4373:523::-;4477:6;4485;4493;4501;4509;4517;4570:3;4558:9;4549:7;4545:23;4541:33;4538:53;;;4587:1;4584;4577:12;4538:53;-1:-1:-1;;4610:23:1;;;4680:2;4665:18;;4652:32;;-1:-1:-1;4731:2:1;4716:18;;4703:32;;4782:2;4767:18;;4754:32;;-1:-1:-1;4833:3:1;4818:19;;4805:33;;-1:-1:-1;4885:3:1;4870:19;4857:33;;-1:-1:-1;4373:523:1;-1:-1:-1;4373:523:1:o;4901:160::-;4966:20;;5022:13;;5015:21;5005:32;;4995:60;;5051:1;5048;5041:12;5066:248;5131:6;5139;5192:2;5180:9;5171:7;5167:23;5163:32;5160:52;;;5208:1;5205;5198:12;5160:52;5244:9;5231:23;5221:33;;5273:35;5304:2;5293:9;5289:18;5273:35;:::i;:::-;5263:45;;5066:248;;;;;:::o;5319:315::-;5384:6;5392;5445:2;5433:9;5424:7;5420:23;5416:32;5413:52;;;5461:1;5458;5451:12;5413:52;5500:9;5487:23;5519:31;5544:5;5519:31;:::i;:::-;5569:5;-1:-1:-1;5593:35:1;5624:2;5609:18;;5593:35;:::i;5863:180::-;5919:6;5972:2;5960:9;5951:7;5947:23;5943:32;5940:52;;;5988:1;5985;5978:12;5940:52;6011:26;6027:9;6011:26;:::i;6048:388::-;6116:6;6124;6177:2;6165:9;6156:7;6152:23;6148:32;6145:52;;;6193:1;6190;6183:12;6145:52;6232:9;6219:23;6251:31;6276:5;6251:31;:::i;:::-;6301:5;-1:-1:-1;6358:2:1;6343:18;;6330:32;6371:33;6330:32;6371:33;:::i;:::-;6423:7;6413:17;;;6048:388;;;;;:::o;6441:380::-;6520:1;6516:12;;;;6563;;;6584:61;;6638:4;6630:6;6626:17;6616:27;;6584:61;6691:2;6683:6;6680:14;6660:18;6657:38;6654:161;;;6737:10;6732:3;6728:20;6725:1;6718:31;6772:4;6769:1;6762:15;6800:4;6797:1;6790:15;6654:161;;6441:380;;;:::o;6826:356::-;7028:2;7010:21;;;7047:18;;;7040:30;7106:34;7101:2;7086:18;;7079:62;7173:2;7158:18;;6826:356::o;7187:127::-;7248:10;7243:3;7239:20;7236:1;7229:31;7279:4;7276:1;7269:15;7303:4;7300:1;7293:15;7319:127;7380:10;7375:3;7371:20;7368:1;7361:31;7411:4;7408:1;7401:15;7435:4;7432:1;7425:15;7451:175;7488:3;7532:4;7525:5;7521:16;7561:4;7552:7;7549:17;7546:43;;;7569:18;;:::i;:::-;7618:1;7605:15;;7451:175;-1:-1:-1;;7451:175:1:o;8398:125::-;8438:4;8466:1;8463;8460:8;8457:34;;;8471:18;;:::i;:::-;-1:-1:-1;8508:9:1;;8398:125::o;8528:127::-;8589:10;8584:3;8580:20;8577:1;8570:31;8620:4;8617:1;8610:15;8644:4;8641:1;8634:15;8660:135;8699:3;-1:-1:-1;;8720:17:1;;8717:43;;;8740:18;;:::i;:::-;-1:-1:-1;8787:1:1;8776:13;;8660:135::o;10668:128::-;10708:3;10739:1;10735:6;10732:1;10729:13;10726:39;;;10745:18;;:::i;:::-;-1:-1:-1;10781:9:1;;10668:128::o;11553:168::-;11593:7;11659:1;11655;11651:6;11647:14;11644:1;11641:21;11636:1;11629:9;11622:17;11618:45;11615:71;;;11666:18;;:::i;:::-;-1:-1:-1;11706:9:1;;11553:168::o;11726:217::-;11766:1;11792;11782:132;;11836:10;11831:3;11827:20;11824:1;11817:31;11871:4;11868:1;11861:15;11899:4;11896:1;11889:15;11782:132;-1:-1:-1;11928:9:1;;11726:217::o;15827:404::-;16029:2;16011:21;;;16068:2;16048:18;;;16041:30;16107:34;16102:2;16087:18;;16080:62;-1:-1:-1;;;16173:2:1;16158:18;;16151:38;16221:3;16206:19;;15827:404::o;16560:251::-;16630:6;16683:2;16671:9;16662:7;16658:23;16654:32;16651:52;;;16699:1;16696;16689:12;16651:52;16731:9;16725:16;16750:31;16775:5;16750:31;:::i;16816:461::-;16869:3;16907:5;16901:12;16934:6;16929:3;16922:19;16960:4;16989:2;16984:3;16980:12;16973:19;;17026:2;17019:5;17015:14;17047:1;17057:195;17071:6;17068:1;17065:13;17057:195;;;17136:13;;-1:-1:-1;;;;;17132:39:1;17120:52;;17192:12;;;;17227:15;;;;17168:1;17086:9;17057:195;;;-1:-1:-1;17268:3:1;;16816:461;-1:-1:-1;;;;;16816:461:1:o;17282:582::-;17581:6;17570:9;17563:25;17624:6;17619:2;17608:9;17604:18;17597:34;17667:3;17662:2;17651:9;17647:18;17640:31;17544:4;17688:57;17740:3;17729:9;17725:19;17717:6;17688:57;:::i;:::-;-1:-1:-1;;;;;17781:32:1;;;;17776:2;17761:18;;17754:60;-1:-1:-1;17845:3:1;17830:19;17823:35;17680:65;17282:582;-1:-1:-1;;;17282:582:1:o;17869:332::-;18076:6;18065:9;18058:25;18119:2;18114;18103:9;18099:18;18092:30;18039:4;18139:56;18191:2;18180:9;18176:18;18168:6;18139:56;:::i;:::-;18131:64;17869:332;-1:-1:-1;;;;17869:332:1:o;18818:306::-;18906:6;18914;18922;18975:2;18963:9;18954:7;18950:23;18946:32;18943:52;;;18991:1;18988;18981:12;18943:52;19020:9;19014:16;19004:26;;19070:2;19059:9;19055:18;19049:25;19039:35;;19114:2;19103:9;19099:18;19093:25;19083:35;;18818:306;;;;;:::o

Swarm Source

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