ETH Price: $3,395.79 (+1.83%)
Gas: 3.7 Gwei

Token

Voltron Inu (VTRON)
 

Overview

Max Total Supply

100,000,000 VTRON

Holders

78

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
15,618 VTRON

Value
$0.00
0xd115af8778f983c72f3c1d08ab6f95025f9e149c
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:
VTRON

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IERC20 {

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}
    
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;

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(address(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;
    }
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

   
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }


    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

library Address {
  
    function isContract(address account) internal view returns (bool) {
        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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract VTRON is Context, IERC20, Ownable {

    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;
    using Address for address;
    using SafeERC20 for IERC20;
    
    address constant dead = 0x000000000000000000000000000000000000dEaD;
    
    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;
    mapping (address => bool) public blacklisted;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isWalletLimitExempt;

    address public router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    
    uint256 private constant MAX = ~uint256(0);
    
    uint256 private _tFeeTotal;

    string public constant _name ="Voltron Inu";
    string public constant _symbol = "VTRON";
    uint8 private constant _decimals = 18;

    uint256 public _tTotal = 100_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public numTokensSellToAddToLiquidity = 1000 * 10**_decimals;

    uint256 public _maxTxAmount = _tTotal.mul(15).div(1000);  //1.5%
    uint256 public _walletMax = _tTotal.mul(30).div(1000);  //3%

    bool public EnableTransactionLimit = true;
    bool public checkWalletLimit = true;

    uint256 private _taxFee = 0;                           
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _liquidityFee = 1;
    uint256 private _previousLiquidtyFee = _liquidityFee;
    
    uint256 private _MarketingFee = 1;
    uint256 private _previousMarketingFee = _MarketingFee;

    uint256 private _DevelopmentFee = 2;
    uint256 private _previousDevelopmentFee = _DevelopmentFee;

    uint256 public AmountForLiquidity;
    uint256 public AmountForMarketing;
    uint256 public AmountForDevelopment;

    IUniswapV2Router02 public UniswapV2Router;
    address public UniswapV2Pair;

    address public MarketingWallet = address(0xE0BB21891a9A50a405A77CD38c87fB779E5C4cf4);
    address public DeveloperWallet = address(0x033708cDfA162efE674A5738Ec929aeb0CB1A42E);
    address public LiquidityReciever;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;    
    
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    struct BuyFee{
        uint256 setTaxFee;
        uint256 setLiquidityFee;
        uint256 setMarketingFee; 
        uint256 setDevelopmentFee;    
    }

    struct SellFee{
        uint256 setTaxFee;
        uint256 setLiquidityFee;
        uint256 setMarketingFee;
        uint256 setDevelopmentFee;
    }

    BuyFee public buyFee;
    SellFee public sellFee;

    constructor ()  {       
        
        _rOwned[_msgSender()] = _rTotal;

        buyFee.setTaxFee = 0;
        buyFee.setLiquidityFee = 10;
        buyFee.setMarketingFee = 10;
        buyFee.setDevelopmentFee = 20;

        sellFee.setTaxFee = 0;
        sellFee.setLiquidityFee = 10;
        sellFee.setMarketingFee = 10;
        sellFee.setDevelopmentFee = 20;
                
        IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(router);
            // Create a uniswap pair for this new token
        UniswapV2Pair = IUniswapV2Factory(_UniswapV2Router.factory())
            .createPair(address(this), _UniswapV2Router.WETH());

        // set the rest of the contract variables
        UniswapV2Router = _UniswapV2Router;

        LiquidityReciever = msg.sender;
        
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(dead)] = true;

        isWalletLimitExempt[_msgSender()] = true;
        isWalletLimitExempt[UniswapV2Pair] = true;
        isWalletLimitExempt[address(this)] = true;

        isTxLimitExempt[_msgSender()] = true;
        isTxLimitExempt[address(this)] = true;

        // excludeFromReward(address(dead));

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(
        newAddress != address(UniswapV2Router),
        "The router already has that address"
        );
        IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(newAddress);
            // Create a uniswap pair for this new token
        UniswapV2Pair = IUniswapV2Factory(_UniswapV2Router.factory())
            .createPair(address(this), _UniswapV2Router.WETH());

        // set the rest of the contract variables
        UniswapV2Router = _UniswapV2Router;
    }

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

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

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

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

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

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

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public returns(uint256) {
        require(tAmount <= _tTotal, "Amt 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, "Amt must be less than tot refl");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

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

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function excludeFromFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = false;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setMFeeWallet(address payable newFeeWallet) external onlyOwner {
        require(newFeeWallet != address(0), "ZERO ADDRESS");
        MarketingWallet = newFeeWallet;
    }

    function setDFeeWallet(address payable newFeeWallet) external onlyOwner {
        require(newFeeWallet != address(0), "ZERO ADDRESS");
        DeveloperWallet = newFeeWallet;
    }

    function setLFeeWallet(address payable newFeeWallet) external onlyOwner {
        require(newFeeWallet != address(0), "ZERO ADDRESS");
        LiquidityReciever = newFeeWallet;
    }

    //to recieve ETH from UniswapV2Router when swaping
    receive() external payable {}

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

    function _getValues(uint256 tAmount) private 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 returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);

    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**3
        );
    }

    function calculateLiquidityFee(uint256 _amount) private returns (uint256) {

        AmountForLiquidity += _amount.mul(_liquidityFee).div(10**3);
        AmountForMarketing += _amount.mul(_MarketingFee).div(10**3);
        AmountForDevelopment += _amount.mul(_DevelopmentFee).div(10**3);

        return _amount.mul(_liquidityFee + _MarketingFee + _DevelopmentFee).div(
            10**3
        );
    }
  
    function removeAllFee() private {
        uint subtotal = _taxFee.add(_DevelopmentFee).add(_liquidityFee).add(_MarketingFee);
        if(subtotal == 0) return; 
        
        _previousTaxFee = _taxFee;
        _previousLiquidtyFee = _liquidityFee;
        _previousMarketingFee = _MarketingFee;
        _previousDevelopmentFee = _DevelopmentFee;

        _taxFee = 0;
        _liquidityFee = 0;
        _MarketingFee = 0;
        _DevelopmentFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidtyFee;
        _MarketingFee = _previousMarketingFee;
        _DevelopmentFee = _previousDevelopmentFee;
    }

    function setBuy() private {
        _taxFee = buyFee.setTaxFee;
        _liquidityFee = buyFee.setLiquidityFee;
        _MarketingFee = buyFee.setMarketingFee;
        _DevelopmentFee = buyFee.setDevelopmentFee;
    }
    
    function setSell() private {
        _taxFee = sellFee.setTaxFee;
        _liquidityFee = sellFee.setLiquidityFee;
        _MarketingFee = sellFee.setMarketingFee;
        _DevelopmentFee = sellFee.setDevelopmentFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function setSwapTokenLimit(uint _value) public onlyOwner {
        numTokensSellToAddToLiquidity = _value;
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from zero address");
        require(to != address(0), "ERC20: transfer to zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!blacklisted[from] || !blacklisted[to],"Error: Blacklist Bots/Contracts not Allowed!!");

        if(!isTxLimitExempt[from] && !isTxLimitExempt[to] && EnableTransactionLimit) {
            require(amount <= _maxTxAmount, "Error: Transfer amount exceeds the maxTxAmount.");
        }

        if(checkWalletLimit && !isWalletLimitExempt[to]) {
            require(balanceOf(to).add(amount) <= _walletMax,"Error: Transfer Amount exceeds Wallet Limit.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            !inSwapAndLiquify &&
            to == UniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            if(overMinTokenBalance){
                swapAndLiquify();
            }

        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //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() private lockTheSwap {
        if(AmountForLiquidity > 0) swapAndLiquidate(AmountForLiquidity);
        if(AmountForMarketing > 0) sendToMarketing(AmountForMarketing);
        if(AmountForDevelopment > 0) sendToDevelopment(AmountForDevelopment);
    }

    function sendToMarketing(uint _token) private {
        uint initalBalance = address(this).balance;
        swapTokensForETH(_token);
        uint recieveBalance = address(this).balance.sub(initalBalance);
        payable(MarketingWallet).transfer(recieveBalance);
        AmountForMarketing = AmountForMarketing.sub(_token);
    }

    function sendToDevelopment(uint _token) private {
        uint initalBalance = address(this).balance;
        swapTokensForETH(_token);
        uint recieveBalance = address(this).balance.sub(initalBalance);
        payable(DeveloperWallet).transfer(recieveBalance);
        AmountForDevelopment = AmountForDevelopment.sub(_token);
    }

    function swapAndLiquidate(uint _token) private {
        uint half = _token.div(2);
        uint otherhalf = _token.sub(half);
        uint initalBalance = address(this).balance;
        swapTokensForETH(otherhalf);
        uint recieveBalance = address(this).balance.sub(initalBalance);
        addLiquidity(half,recieveBalance);
        AmountForLiquidity = AmountForLiquidity.sub(_token);
    }
        
    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),
            block.timestamp
        );
    }
    
    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
            LiquidityReciever,
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        
            removeAllFee();

            if (takeFee){

                if (sender == UniswapV2Pair) {
                    setBuy();
                }
                if (recipient == UniswapV2Pair) {
                    setSell();
                }

            } 
        
        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]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            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);
    }

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

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

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

    function _tokenTransferNoFee(address sender, address recipient, uint256 amount) private {
        uint256 currentRate =  _getRate();  
        uint256 rAmount = amount.mul(currentRate);   

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rAmount); 
        
        if (_isExcluded[sender]) {
            _tOwned[sender] = _tOwned[sender].sub(amount);
        } 
        if (_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient].add(amount);
        } 
        emit Transfer(sender, recipient, amount);
    }

    function recoverFunds() public onlyOwner {
        (bool os,) = payable(msg.sender).call{value: address(this).balance}("");
        require(os);
    }

    function recoverERC20(address tokenAddress, uint256 tokenAmount) public onlyOwner {
        if(tokenAddress == address(this)) {
            _tokenTransferNoFee(address(this),owner(),tokenAmount);
        } 
        else {
            IERC20(tokenAddress).transfer(owner(), tokenAmount);
        }
    }

    //To Block Bots to trade
    function blacklistBot(address _adr,bool _status) public onlyOwner {
        // require(Address.isContract(_adr),"Error: BlackList Applicable For Bot/Contracts!!");
        blacklisted[_adr] = _status;
    }

    function setMaxWalletLimit(uint256 newLimit) external onlyOwner() {
        _walletMax = newLimit;
    }

    function setTxLimit(uint256 newLimit) external onlyOwner() {
        _maxTxAmount = newLimit;
    }

    function ExcludeWalletLimit(address _adr,bool _status) public onlyOwner {
        require(isWalletLimitExempt[_adr] != _status,"Not Changed!!");
        isWalletLimitExempt[_adr] = _status;
    }

    function ExcludeTxLimit(address _adr,bool _status) public onlyOwner {
        require(isTxLimitExempt[_adr] != _status,"Not Changed!!");
        isTxLimitExempt[_adr] = _status;
    }

    function enableTxLimit(bool _status) public onlyOwner {
        EnableTransactionLimit = _status;
    }

    function enableWalletLimit(bool _status) public onlyOwner {
        checkWalletLimit = _status;
    }

    function setBuyFee(
        uint _newReflection,
        uint _newLiquidity,
        uint _newMarketing,
        uint _newDevelopment
    ) public onlyOwner {
        buyFee.setTaxFee = _newReflection;
        buyFee.setLiquidityFee = _newLiquidity;
        buyFee.setMarketingFee = _newMarketing;
        buyFee.setDevelopmentFee = _newDevelopment;
    }

    function setSellFee(
        uint _newReflection,
        uint _newLiquidity,
        uint _newMarketing,
        uint _newDevelopment
    ) public onlyOwner {
        sellFee.setTaxFee = _newReflection;
        sellFee.setLiquidityFee = _newLiquidity;
        sellFee.setMarketingFee = _newMarketing;
        sellFee.setDevelopmentFee = _newDevelopment;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"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":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":"AmountForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DeveloperWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EnableTransactionLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LiquidityReciever","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"blacklistBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"setTaxFee","type":"uint256"},{"internalType":"uint256","name":"setLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"setMarketingFee","type":"uint256"},{"internalType":"uint256","name":"setDevelopmentFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverFunds","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":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"setTaxFee","type":"uint256"},{"internalType":"uint256","name":"setLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"setMarketingFee","type":"uint256"},{"internalType":"uint256","name":"setDevelopmentFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newReflection","type":"uint256"},{"internalType":"uint256","name":"_newLiquidity","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"},{"internalType":"uint256","name":"_newDevelopment","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeWallet","type":"address"}],"name":"setDFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeWallet","type":"address"}],"name":"setLFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeWallet","type":"address"}],"name":"setMFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newReflection","type":"uint256"},{"internalType":"uint256","name":"_newLiquidity","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"},{"internalType":"uint256","name":"_newDevelopment","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setSwapTokenLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1781556200003890601290620007c2565b62000048906305f5e100620008ad565b600c8190556200005b90600019620008e9565b6200006990600019620008cf565b600d556200007a6012600a620007c2565b62000088906103e8620008ad565b600e55620000c36103e8620000af600f600c546200058f60201b62001e1f1790919060201c565b620005ef60201b62001e6b1790919060201c565b600f55620000ea6103e8620000af601e600c546200058f60201b62001e1f1790919060201c565b6010556011805461ff001960ff19909116600190811791909116610100179091556000601281905560135560148190556015819055601681905560175560026018819055601955601f80546001600160a01b031990811673e0bb21891a9a50a405a77cd38c87fb779e5c4cf4179091556020805490911673033708cdfa162efe674a5738ec929aeb0cb1a42e1790556021805460ff60a81b1916600160a81b1790553480156200019957600080fd5b506000620001a662000639565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d54600160006200020162000639565b6001600160a01b03908116825260208083019390935260409182016000908120949094556022849055600a6023819055602481905560146025819055602695909555602781905560288190556029949094559254815163c45a015560e01b81529151931692839263c45a01559260048082019391829003018186803b1580156200028a57600080fd5b505afa1580156200029f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c591906200067b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030e57600080fd5b505afa15801562000323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034991906200067b565b6040518363ffffffff1660e01b815260040162000368929190620006a4565b602060405180830381600087803b1580156200038357600080fd5b505af115801562000398573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003be91906200067b565b601e80546001600160a01b039283166001600160a01b031991821617909155601d80549284169282169290921790915560218054909116331790556001600460006200040962000639565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252812080548316600190811790915561dead82527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd805490931681179092556009906200048862000639565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601e549091168152600990925280822080548416600190811790915530835290822080549093168117909255600890620004ef62000639565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260089092529020805490911660011790556200053962000639565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c5460405162000580919062000755565b60405180910390a3506200092c565b600082620005a057506000620005e9565b6000620005ae8385620008ad565b905082620005bd85836200075e565b14620005e65760405162461bcd60e51b8152600401620005dd9062000714565b60405180910390fd5b90505b92915050565b6000620005e683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200063d60201b60201c565b3390565b60008183620006615760405162461bcd60e51b8152600401620005dd9190620006be565b5060006200067084866200075e565b9150505b9392505050565b6000602082840312156200068d578081fd5b81516001600160a01b0381168114620005e6578182fd5b6001600160a01b0392831681529116602082015260400190565b6000602080835283518082850152825b81811015620006ec57858101830151858201604001528201620006ce565b81811115620006fe5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b90815260200190565b60008262000770576200077062000916565b500490565b80825b6001808611620007895750620007b9565b8187048211156200079e576200079e62000900565b80861615620007ac57918102915b9490941c93800262000778565b94509492505050565b6000620005e660001960ff851684600082620007e15750600162000674565b81620007f05750600062000674565b8160018114620008095760028114620008145762000848565b600191505062000674565b60ff84111562000828576200082862000900565b6001841b91508482111562000841576200084162000900565b5062000674565b5060208310610133831016604e8410600b841016171562000880575081810a838111156200087a576200087a62000900565b62000674565b6200088f848484600162000775565b808604821115620008a457620008a462000900565b02949350505050565b6000816000190483118215151615620008ca57620008ca62000900565b500290565b600082821015620008e457620008e462000900565b500390565b600082620008fb57620008fb62000916565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b613a79806200093c6000396000f3fe6080604052600436106103c75760003560e01c8063807c2d9c116101f2578063c867d60b1161010d578063e653da08116100a0578063f872858a1161006f578063f872858a14610aa7578063f887ea4014610abc578063f8f6329014610ad1578063fa0e16fc14610ae6576103ce565b8063e653da0814610a27578063ea2f0b3714610a47578063ee828db314610a67578063f2fde38b14610a87576103ce565b8063d28d8852116100dc578063d28d8852146109b2578063dbac26e9146109c7578063dd62ed3e146109e7578063e4a9ada214610a07576103ce565b8063c867d60b14610948578063d0dd0b3214610968578063d12a768814610988578063d20c50d51461099d576103ce565b806395d89b4111610185578063b09f126611610154578063b09f1266146108e9578063b79550be146108fe578063c33dc0ca14610913578063c49b9a8014610928576103ce565b806395d89b411461087f578063a457c2d714610894578063a9059cbb146108b4578063af465a27146108d4576103ce565b80638980f11f116101c15780638980f11f1461080a5780638b42507f1461082a5780638c5a133d1461084a5780638da5cb5b1461086a576103ce565b8063807c2d9c146107a05780638236802e146107b557806385261485146107d557806388f82020146107ea576103ce565b80633bd5d173116102e25780635c85974f1161027557806370a082311161024457806370a0823114610736578063715018a614610756578063728d41c91461076b5780637d1db4a51461078b576103ce565b80635c85974f146106b657806365b8dbc0146106d65780636bca1890146106f65780636f499ae014610716576103ce565b80634974d88f116102b15780634974d88f146106415780634a74bb021461066157806352390c02146106765780635342acb414610696576103ce565b80633bd5d173146105cc578063437823ec146105ec5780634549b0391461060c578063470624021461062c576103ce565b806323b872dd1161035a578063313ce56711610329578063313ce5671461054a5780633685d4191461056c57806338ec0b111461058c57806339509351146105ac576103ce565b806323b872dd146104d05780632598cdb2146104f05780632b14ca56146105055780632d8381191461052a576103ce565b806310bb8a7a1161039657806310bb8a7a1461046257806313114a9d1461048457806313ea1d891461049957806318160ddd146104bb576103ce565b8063055add0d146103d357806306fdde03146103fe578063095ea7b3146104205780630bd11c461461044d576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610afb565b6040516103f591906132ef565b60405180910390f35b34801561040a57600080fd5b50610413610b0a565b6040516103f5919061337c565b34801561042c57600080fd5b5061044061043b3660046131ef565b610b2f565b6040516103f59190613371565b34801561045957600080fd5b506103e8610b4d565b34801561046e57600080fd5b50610477610b5c565b6040516103f59190613892565b34801561049057600080fd5b50610477610b62565b3480156104a557600080fd5b506104b96104b43660046131c2565b610b68565b005b3480156104c757600080fd5b50610477610c10565b3480156104dc57600080fd5b506104406104eb366004613182565b610c16565b3480156104fc57600080fd5b506103e8610c9d565b34801561051157600080fd5b5061051a610cac565b6040516103f5949392919061390b565b34801561053657600080fd5b50610477610545366004613252565b610cbb565b34801561055657600080fd5b5061055f610cfe565b6040516103f59190613926565b34801561057857600080fd5b506104b9610587366004613112565b610d03565b34801561059857600080fd5b506104b96105a73660046131c2565b610ece565b3480156105b857600080fd5b506104406105c73660046131ef565b610f6d565b3480156105d857600080fd5b506104b96105e7366004613252565b610fbb565b3480156105f857600080fd5b506104b9610607366004613112565b611076565b34801561061857600080fd5b5061047761062736600461326a565b6110cf565b34801561063857600080fd5b5061051a61112c565b34801561064d57600080fd5b506104b961065c36600461321a565b61113b565b34801561066d57600080fd5b5061044061118a565b34801561068257600080fd5b506104b9610691366004613112565b61119a565b3480156106a257600080fd5b506104406106b1366004613112565b6112c8565b3480156106c257600080fd5b506104b96106d1366004613252565b6112e6565b3480156106e257600080fd5b506104b96106f1366004613112565b611320565b34801561070257600080fd5b506104b9610711366004613112565b61151a565b34801561072257600080fd5b506104b9610731366004613252565b611597565b34801561074257600080fd5b50610477610751366004613112565b6115d1565b34801561076257600080fd5b506104b9611633565b34801561077757600080fd5b506104b9610786366004613252565b6116b2565b34801561079757600080fd5b506104776116ec565b3480156107ac57600080fd5b506104776116f2565b3480156107c157600080fd5b506104b96107d03660046131c2565b6116f8565b3480156107e157600080fd5b50610440611758565b3480156107f657600080fd5b50610440610805366004613112565b611761565b34801561081657600080fd5b506104b96108253660046131ef565b61177f565b34801561083657600080fd5b50610440610845366004613112565b611868565b34801561085657600080fd5b506104b96108653660046132bb565b61187d565b34801561087657600080fd5b506103e86118c6565b34801561088b57600080fd5b506104136118d5565b3480156108a057600080fd5b506104406108af3660046131ef565b6118f4565b3480156108c057600080fd5b506104406108cf3660046131ef565b61195c565b3480156108e057600080fd5b50610477611970565b3480156108f557600080fd5b50610413611976565b34801561090a57600080fd5b506104b9611997565b34801561091f57600080fd5b50610477611a38565b34801561093457600080fd5b506104b961094336600461321a565b611a3e565b34801561095457600080fd5b50610440610963366004613112565b611ac5565b34801561097457600080fd5b506104b9610983366004613112565b611ada565b34801561099457600080fd5b50610477611b57565b3480156109a957600080fd5b506103e8611b5d565b3480156109be57600080fd5b50610413611b6c565b3480156109d357600080fd5b506104406109e2366004613112565b611b93565b3480156109f357600080fd5b50610477610a0236600461314a565b611ba8565b348015610a1357600080fd5b506104b9610a22366004613112565b611bd3565b348015610a3357600080fd5b506104b9610a423660046132bb565b611c50565b348015610a5357600080fd5b506104b9610a62366004613112565b611c99565b348015610a7357600080fd5b506104b9610a8236600461321a565b611cef565b348015610a9357600080fd5b506104b9610aa2366004613112565b611d37565b348015610ab357600080fd5b50610440611ded565b348015610ac857600080fd5b506103e8611dfb565b348015610add57600080fd5b506103e8611e0a565b348015610af257600080fd5b50610477611e19565b601d546001600160a01b031681565b60408051808201909152600b81526a566f6c74726f6e20496e7560a81b602082015290565b6000610b43610b3c611ead565b8484611eb1565b5060015b92915050565b6021546001600160a01b031681565b601a5481565b600b5490565b610b70611ead565b6000546001600160a01b03908116911614610ba65760405162461bcd60e51b8152600401610b9d906136d4565b60405180910390fd5b6001600160a01b03821660009081526008602052604090205460ff1615158115151415610be55760405162461bcd60e51b8152600401610b9d90613542565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b600c5490565b6000610c23848484611f65565b610c9384610c2f611ead565b610c8e856040518060600160405280602881526020016139f7602891396001600160a01b038a16600090815260036020526040812090610c6d611ead565b6001600160a01b0316815260208101919091526040016000205491906121d1565b611eb1565b5060019392505050565b601f546001600160a01b031681565b60265460275460285460295484565b6000600d54821115610cdf5760405162461bcd60e51b8152600401610b9d9061360d565b6000610ce961220b565b9050610cf58382611e6b565b9150505b919050565b601290565b610d0b611ead565b6000546001600160a01b03908116911614610d385760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b03811660009081526005602052604090205460ff16610d705760405162461bcd60e51b8152600401610b9d906135e3565b60005b600654811015610eca57816001600160a01b031660068281548110610da857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610eb85760068054610dd39060019061398b565b81548110610df157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b039092169183908110610e2b57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610e9157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610eca565b80610ec2816139a2565b915050610d73565b5050565b610ed6611ead565b6000546001600160a01b03908116911614610f035760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b03821660009081526009602052604090205460ff1615158115151415610f425760405162461bcd60e51b8152600401610b9d90613542565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000610b43610f7a611ead565b84610c8e8560036000610f8b611ead565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061222e565b6000610fc5611ead565b6001600160a01b03811660009081526005602052604090205490915060ff16156110015760405162461bcd60e51b8152600401610b9d90613811565b600061100c8361225d565b505050506001600160a01b038416600090815260016020526040902054919250611038919050826122ac565b6001600160a01b038316600090815260016020526040902055600d5461105e90826122ac565b600d55600b5461106e908461222e565b600b55505050565b61107e611ead565b6000546001600160a01b039081169116146110ab5760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600c548311156110f35760405162461bcd60e51b8152600401610b9d9061344d565b816111125760006111038461225d565b50939550610b47945050505050565b600061111d8461225d565b50929550610b47945050505050565b60225460235460245460255484565b611143611ead565b6000546001600160a01b039081169116146111705760405162461bcd60e51b8152600401610b9d906136d4565b601180549115156101000261ff0019909216919091179055565b602154600160a81b900460ff1681565b6111a2611ead565b6000546001600160a01b039081169116146111cf5760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b03811660009081526005602052604090205460ff16156112085760405162461bcd60e51b8152600401610b9d90613406565b6001600160a01b03811660009081526001602052604090205415611262576001600160a01b03811660009081526001602052604090205461124890610cbb565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b6112ee611ead565b6000546001600160a01b0390811691161461131b5760405162461bcd60e51b8152600401610b9d906136d4565b600f55565b611328611ead565b6000546001600160a01b039081169116146113555760405162461bcd60e51b8152600401610b9d906136d4565b601d546001600160a01b03828116911614156113835760405162461bcd60e51b8152600401610b9d90613569565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156113c157600080fd5b505afa1580156113d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f9919061312e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561144157600080fd5b505afa158015611455573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611479919061312e565b6040518363ffffffff1660e01b8152600401611496929190613303565b602060405180830381600087803b1580156114b057600080fd5b505af11580156114c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e8919061312e565b601e80546001600160a01b039283166001600160a01b031991821617909155601d805493909216921691909117905550565b611522611ead565b6000546001600160a01b0390811691161461154f5760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b0381166115755760405162461bcd60e51b8152600401610b9d90613752565b602180546001600160a01b0319166001600160a01b0392909216919091179055565b61159f611ead565b6000546001600160a01b039081169116146115cc5760405162461bcd60e51b8152600401610b9d906136d4565b600e55565b6001600160a01b03811660009081526005602052604081205460ff161561161157506001600160a01b038116600090815260026020526040902054610cf9565b6001600160a01b038216600090815260016020526040902054610b4790610cbb565b61163b611ead565b6000546001600160a01b039081169116146116685760405162461bcd60e51b8152600401610b9d906136d4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6116ba611ead565b6000546001600160a01b039081169116146116e75760405162461bcd60e51b8152600401610b9d906136d4565b601055565b600f5481565b60105481565b611700611ead565b6000546001600160a01b0390811691161461172d5760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60115460ff1681565b6001600160a01b031660009081526005602052604090205460ff1690565b611787611ead565b6000546001600160a01b039081169116146117b45760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b0382163014156117dc576117d7306117d16118c6565b836122ee565b610eca565b816001600160a01b031663a9059cbb6117f36118c6565b836040518363ffffffff1660e01b815260040161181192919061331d565b602060405180830381600087803b15801561182b57600080fd5b505af115801561183f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118639190613236565b505050565b60086020526000908152604090205460ff1681565b611885611ead565b6000546001600160a01b039081169116146118b25760405162461bcd60e51b8152600401610b9d906136d4565b602293909355602391909155602455602555565b6000546001600160a01b031690565b6040805180820190915260058152642b2a2927a760d91b602082015290565b6000610b43611901611ead565b84610c8e85604051806060016040528060258152602001613a1f602591396003600061192b611ead565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906121d1565b6000610b43611969611ead565b8484611f65565b600c5481565b604051806040016040528060058152602001642b2a2927a760d91b81525081565b61199f611ead565b6000546001600160a01b039081169116146119cc5760405162461bcd60e51b8152600401610b9d906136d4565b6000336001600160a01b0316476040516119e5906132ec565b60006040518083038185875af1925050503d8060008114611a22576040519150601f19603f3d011682016040523d82523d6000602084013e611a27565b606091505b5050905080611a3557600080fd5b50565b601c5481565b611a46611ead565b6000546001600160a01b03908116911614611a735760405162461bcd60e51b8152600401610b9d906136d4565b6021805460ff60a81b1916600160a81b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611aba908390613371565b60405180910390a150565b60096020526000908152604090205460ff1681565b611ae2611ead565b6000546001600160a01b03908116911614611b0f5760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b038116611b355760405162461bcd60e51b8152600401610b9d90613752565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b600e5481565b601e546001600160a01b031681565b6040518060400160405280600b81526020016a566f6c74726f6e20496e7560a81b81525081565b60076020526000908152604090205460ff1681565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b611bdb611ead565b6000546001600160a01b03908116911614611c085760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b038116611c2e5760405162461bcd60e51b8152600401610b9d90613752565b602080546001600160a01b0319166001600160a01b0392909216919091179055565b611c58611ead565b6000546001600160a01b03908116911614611c855760405162461bcd60e51b8152600401610b9d906136d4565b602693909355602791909155602855602955565b611ca1611ead565b6000546001600160a01b03908116911614611cce5760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b03166000908152600460205260409020805460ff19169055565b611cf7611ead565b6000546001600160a01b03908116911614611d245760405162461bcd60e51b8152600401610b9d906136d4565b6011805460ff1916911515919091179055565b611d3f611ead565b6000546001600160a01b03908116911614611d6c5760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b038116611d925760405162461bcd60e51b8152600401610b9d90613484565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b601154610100900460ff1681565b600a546001600160a01b031681565b6020546001600160a01b031681565b601b5481565b600082611e2e57506000610b47565b6000611e3a838561396c565b905082611e47858361394c565b14611e645760405162461bcd60e51b8152600401610b9d90613693565b9392505050565b6000611e6483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061247c565b3390565b6001600160a01b038316611ed75760405162461bcd60e51b8152600401610b9d9061385d565b6001600160a01b038216611efd5760405162461bcd60e51b8152600401610b9d906133cf565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611f58908590613892565b60405180910390a3505050565b6001600160a01b038316611f8b5760405162461bcd60e51b8152600401610b9d90613501565b6001600160a01b038216611fb15760405162461bcd60e51b8152600401610b9d906135ac565b60008111611fd15760405162461bcd60e51b8152600401610b9d90613709565b6001600160a01b03831660009081526007602052604090205460ff16158061201257506001600160a01b03821660009081526007602052604090205460ff16155b61202e5760405162461bcd60e51b8152600401610b9d906137c4565b6001600160a01b03831660009081526008602052604090205460ff1615801561207057506001600160a01b03821660009081526008602052604090205460ff16155b801561207e575060115460ff165b156120a557600f548111156120a55760405162461bcd60e51b8152600401610b9d90613644565b601154610100900460ff1680156120d557506001600160a01b03821660009081526009602052604090205460ff16155b1561210e576010546120f0826120ea856115d1565b9061222e565b111561210e5760405162461bcd60e51b8152600401610b9d90613778565b6000612119306115d1565b600e5460215491925082101590600160a01b900460ff1615801561214a5750601e546001600160a01b038581169116145b801561215f5750602154600160a81b900460ff165b15612172578015612172576121726124aa565b6001600160a01b03851660009081526004602052604090205460019060ff16806121b457506001600160a01b03851660009081526004602052604090205460ff165b156121bd575060005b6121c986868684612505565b505050505050565b600081848411156121f55760405162461bcd60e51b8152600401610b9d919061337c565b506000612202848661398b565b95945050505050565b60008060006122186126b6565b90925090506122278282611e6b565b9250505090565b60008061223b8385613934565b905083811015611e645760405162461bcd60e51b8152600401610b9d906134ca565b60008060008060008060008060006122748a612873565b92509250925060008060006122928d868661228d61220b565b6128b5565b919f909e50909c50959a5093985091965092945050505050565b6000611e6483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121d1565b60006122f861220b565b905060006123068383611e1f565b6001600160a01b03861660009081526001602052604090205490915061232c90826122ac565b6001600160a01b03808716600090815260016020526040808220939093559086168152205461235b908261222e565b6001600160a01b0380861660009081526001602090815260408083209490945591881681526005909152205460ff16156123cc576001600160a01b0385166000908152600260205260409020546123b290846122ac565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526005602052604090205460ff161561242a576001600160a01b038416600090815260026020526040902054612410908461222e565b6001600160a01b0385166000908152600260205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161246d9190613892565b60405180910390a35050505050565b6000818361249d5760405162461bcd60e51b8152600401610b9d919061337c565b506000612202848661394c565b6021805460ff60a01b1916600160a01b179055601a54156124d0576124d0601a54612905565b601b54156124e3576124e3601b5461295b565b601c54156124f6576124f6601c546129c2565b6021805460ff60a01b19169055565b61250d612a29565b801561254f57601e546001600160a01b038581169116141561253157612531612a89565b601e546001600160a01b038481169116141561254f5761254f612aa3565b6001600160a01b03841660009081526005602052604090205460ff16801561259057506001600160a01b03831660009081526005602052604090205460ff16155b156125a5576125a0848484612abd565b6126a3565b6001600160a01b03841660009081526005602052604090205460ff161580156125e657506001600160a01b03831660009081526005602052604090205460ff165b156125f6576125a0848484612be1565b6001600160a01b03841660009081526005602052604090205460ff1615801561263857506001600160a01b03831660009081526005602052604090205460ff16155b15612648576125a0848484612c8a565b6001600160a01b03841660009081526005602052604090205460ff16801561268857506001600160a01b03831660009081526005602052604090205460ff165b15612698576125a0848484612cce565b6126a3848484612c8a565b806126b0576126b0612d41565b50505050565b600d54600c546000918291825b600654811015612841578260016000600684815481106126f357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061276c575081600260006006848154811061274557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561278357600d54600c549450945050505061286f565b6127d760016000600684815481106127ab57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122ac565b925061282d600260006006848154811061280157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122ac565b915080612839816139a2565b9150506126c3565b50600c54600d5461285191611e6b565b82101561286957600d54600c5493509350505061286f565b90925090505b9091565b60008060008061288285612d5b565b9050600061288f86612d7e565b905060006128a7826128a189866122ac565b906122ac565b979296509094509092505050565b60008080806128c48886611e1f565b905060006128d28887611e1f565b905060006128e08888611e1f565b905060006128f2826128a186866122ac565b939b939a50919850919650505050505050565b6000612912826002611e6b565b9050600061292083836122ac565b90504761292c82612e38565b600061293847836122ac565b90506129448482612fb5565b601a5461295190866122ac565b601a555050505050565b4761296582612e38565b600061297147836122ac565b601f546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156129ac573d6000803e3d6000fd5b50601b546129ba90846122ac565b601b55505050565b476129cc82612e38565b60006129d847836122ac565b6020546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612a13573d6000803e3d6000fd5b50601c54612a2190846122ac565b601c55505050565b6000612a4e6016546120ea6014546120ea60185460125461222e90919063ffffffff16565b905080612a5b5750612a87565b506012805460135560148054601555601680546017556018805460195560009384905591839055829055555b565b602254601255602354601455602454601655602554601855565b602654601255602754601455602854601655602954601855565b600080600080600080612acf8761225d565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612b0190886122ac565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612b3090876122ac565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054612b5f908661222e565b6001600160a01b038916600090815260016020526040902055612b8181613066565b612b8b84836130ee565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612bce9190613892565b60405180910390a3505050505050505050565b600080600080600080612bf38761225d565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150612c2590876122ac565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260029091522054612c5b908461222e565b6001600160a01b038916600090815260026020908152604080832093909355600190522054612b5f908661222e565b600080600080600080612c9c8761225d565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150612b3090876122ac565b600080600080600080612ce08761225d565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612d1290886122ac565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612c2590876122ac565b601354601255601554601455601754601655601954601855565b6000610b476103e8612d7860125485611e1f90919063ffffffff16565b90611e6b565b6000612d9b6103e8612d7860145485611e1f90919063ffffffff16565b601a6000828254612dac9190613934565b9091555050601654612dc7906103e890612d78908590611e1f565b601b6000828254612dd89190613934565b9091555050601854612df3906103e890612d78908590611e1f565b601c6000828254612e049190613934565b92505081905550610b476103e8612d78601854601654601454612e279190613934565b612e319190613934565b8590611e1f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e7b57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612ecf57600080fd5b505afa158015612ee3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f07919061312e565b81600181518110612f2857634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601d54612f4e9130911684611eb1565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f8790859060009086903090429060040161389b565b600060405180830381600087803b158015612fa157600080fd5b505af11580156121c9573d6000803e3d6000fd5b601d54612fcd9030906001600160a01b031684611eb1565b601d5460215460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261300d9230928992600092839216904290600401613336565b6060604051808303818588803b15801561302657600080fd5b505af115801561303a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061305f919061328e565b5050505050565b600061307061220b565b9050600061307e8383611e1f565b3060009081526001602052604090205490915061309b908261222e565b3060009081526001602090815260408083209390935560059052205460ff161561186357306000908152600260205260409020546130d9908461222e565b30600090815260026020526040902055505050565b600d546130fb90836122ac565b600d55600b5461310b908261222e565b600b555050565b600060208284031215613123578081fd5b8135611e64816139d3565b60006020828403121561313f578081fd5b8151611e64816139d3565b6000806040838503121561315c578081fd5b8235613167816139d3565b91506020830135613177816139d3565b809150509250929050565b600080600060608486031215613196578081fd5b83356131a1816139d3565b925060208401356131b1816139d3565b929592945050506040919091013590565b600080604083850312156131d4578182fd5b82356131df816139d3565b91506020830135613177816139e8565b60008060408385031215613201578182fd5b823561320c816139d3565b946020939093013593505050565b60006020828403121561322b578081fd5b8135611e64816139e8565b600060208284031215613247578081fd5b8151611e64816139e8565b600060208284031215613263578081fd5b5035919050565b6000806040838503121561327c578182fd5b823591506020830135613177816139e8565b6000806000606084860312156132a2578283fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156132d0578081fd5b5050823594602084013594506040840135936060013592509050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b818110156133a85785810183015185820160400152820161338c565b818111156133b95783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601e908201527f45524332303a20617070726f766520746f207a65726f20616464726573730000604082015260600190565b60208082526027908201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604082015266081c995dd85c9960ca1b606082015260800190565b6020808252601c908201527f416d74206d757374206265206c657373207468616e20737570706c7900000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526021908201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252600d908201526c4e6f74204368616e676564212160981b604082015260600190565b60208082526023908201527f54686520726f7574657220616c7265616479206861732074686174206164647260408201526265737360e81b606082015260800190565b6020808252601f908201527f45524332303a207472616e7366657220746f207a65726f206164647265737300604082015260600190565b60208082526010908201526f105b1c9958591e48195e18db1d59195960821b604082015260600190565b6020808252601e908201527f416d74206d757374206265206c657373207468616e20746f74207265666c0000604082015260600190565b6020808252602f908201527f4572726f723a205472616e7366657220616d6f756e742065786365656473207460408201526e34329036b0bc2a3c20b6b7bab73a1760891b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252600c908201526b5a45524f204144445245535360a01b604082015260600190565b6020808252602c908201527f4572726f723a205472616e7366657220416d6f756e742065786365656473205760408201526b30b63632ba102634b6b4ba1760a11b606082015260800190565b6020808252602d908201527f4572726f723a20426c61636b6c69737420426f74732f436f6e7472616374732060408201526c6e6f7420416c6c6f776564212160981b606082015260800190565b6020808252602c908201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460408201526b3434b990333ab731ba34b7b760a11b606082015260800190565b6020808252818101527f45524332303a20617070726f76652066726f6d207a65726f2061646472657373604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156138ea5784516001600160a01b0316835293830193918301916001016138c5565b50506001600160a01b03969096166060850152505050608001529392505050565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60008219821115613947576139476139bd565b500190565b60008261396757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613986576139866139bd565b500290565b60008282101561399d5761399d6139bd565b500390565b60006000198214156139b6576139b66139bd565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611a3557600080fd5b8015158114611a3557600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122059b66db47bee22d4c64fd05b46f9837be1bc45d2d942a53c05512cfc28b88a7364736f6c63430008000033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c8063807c2d9c116101f2578063c867d60b1161010d578063e653da08116100a0578063f872858a1161006f578063f872858a14610aa7578063f887ea4014610abc578063f8f6329014610ad1578063fa0e16fc14610ae6576103ce565b8063e653da0814610a27578063ea2f0b3714610a47578063ee828db314610a67578063f2fde38b14610a87576103ce565b8063d28d8852116100dc578063d28d8852146109b2578063dbac26e9146109c7578063dd62ed3e146109e7578063e4a9ada214610a07576103ce565b8063c867d60b14610948578063d0dd0b3214610968578063d12a768814610988578063d20c50d51461099d576103ce565b806395d89b4111610185578063b09f126611610154578063b09f1266146108e9578063b79550be146108fe578063c33dc0ca14610913578063c49b9a8014610928576103ce565b806395d89b411461087f578063a457c2d714610894578063a9059cbb146108b4578063af465a27146108d4576103ce565b80638980f11f116101c15780638980f11f1461080a5780638b42507f1461082a5780638c5a133d1461084a5780638da5cb5b1461086a576103ce565b8063807c2d9c146107a05780638236802e146107b557806385261485146107d557806388f82020146107ea576103ce565b80633bd5d173116102e25780635c85974f1161027557806370a082311161024457806370a0823114610736578063715018a614610756578063728d41c91461076b5780637d1db4a51461078b576103ce565b80635c85974f146106b657806365b8dbc0146106d65780636bca1890146106f65780636f499ae014610716576103ce565b80634974d88f116102b15780634974d88f146106415780634a74bb021461066157806352390c02146106765780635342acb414610696576103ce565b80633bd5d173146105cc578063437823ec146105ec5780634549b0391461060c578063470624021461062c576103ce565b806323b872dd1161035a578063313ce56711610329578063313ce5671461054a5780633685d4191461056c57806338ec0b111461058c57806339509351146105ac576103ce565b806323b872dd146104d05780632598cdb2146104f05780632b14ca56146105055780632d8381191461052a576103ce565b806310bb8a7a1161039657806310bb8a7a1461046257806313114a9d1461048457806313ea1d891461049957806318160ddd146104bb576103ce565b8063055add0d146103d357806306fdde03146103fe578063095ea7b3146104205780630bd11c461461044d576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610afb565b6040516103f591906132ef565b60405180910390f35b34801561040a57600080fd5b50610413610b0a565b6040516103f5919061337c565b34801561042c57600080fd5b5061044061043b3660046131ef565b610b2f565b6040516103f59190613371565b34801561045957600080fd5b506103e8610b4d565b34801561046e57600080fd5b50610477610b5c565b6040516103f59190613892565b34801561049057600080fd5b50610477610b62565b3480156104a557600080fd5b506104b96104b43660046131c2565b610b68565b005b3480156104c757600080fd5b50610477610c10565b3480156104dc57600080fd5b506104406104eb366004613182565b610c16565b3480156104fc57600080fd5b506103e8610c9d565b34801561051157600080fd5b5061051a610cac565b6040516103f5949392919061390b565b34801561053657600080fd5b50610477610545366004613252565b610cbb565b34801561055657600080fd5b5061055f610cfe565b6040516103f59190613926565b34801561057857600080fd5b506104b9610587366004613112565b610d03565b34801561059857600080fd5b506104b96105a73660046131c2565b610ece565b3480156105b857600080fd5b506104406105c73660046131ef565b610f6d565b3480156105d857600080fd5b506104b96105e7366004613252565b610fbb565b3480156105f857600080fd5b506104b9610607366004613112565b611076565b34801561061857600080fd5b5061047761062736600461326a565b6110cf565b34801561063857600080fd5b5061051a61112c565b34801561064d57600080fd5b506104b961065c36600461321a565b61113b565b34801561066d57600080fd5b5061044061118a565b34801561068257600080fd5b506104b9610691366004613112565b61119a565b3480156106a257600080fd5b506104406106b1366004613112565b6112c8565b3480156106c257600080fd5b506104b96106d1366004613252565b6112e6565b3480156106e257600080fd5b506104b96106f1366004613112565b611320565b34801561070257600080fd5b506104b9610711366004613112565b61151a565b34801561072257600080fd5b506104b9610731366004613252565b611597565b34801561074257600080fd5b50610477610751366004613112565b6115d1565b34801561076257600080fd5b506104b9611633565b34801561077757600080fd5b506104b9610786366004613252565b6116b2565b34801561079757600080fd5b506104776116ec565b3480156107ac57600080fd5b506104776116f2565b3480156107c157600080fd5b506104b96107d03660046131c2565b6116f8565b3480156107e157600080fd5b50610440611758565b3480156107f657600080fd5b50610440610805366004613112565b611761565b34801561081657600080fd5b506104b96108253660046131ef565b61177f565b34801561083657600080fd5b50610440610845366004613112565b611868565b34801561085657600080fd5b506104b96108653660046132bb565b61187d565b34801561087657600080fd5b506103e86118c6565b34801561088b57600080fd5b506104136118d5565b3480156108a057600080fd5b506104406108af3660046131ef565b6118f4565b3480156108c057600080fd5b506104406108cf3660046131ef565b61195c565b3480156108e057600080fd5b50610477611970565b3480156108f557600080fd5b50610413611976565b34801561090a57600080fd5b506104b9611997565b34801561091f57600080fd5b50610477611a38565b34801561093457600080fd5b506104b961094336600461321a565b611a3e565b34801561095457600080fd5b50610440610963366004613112565b611ac5565b34801561097457600080fd5b506104b9610983366004613112565b611ada565b34801561099457600080fd5b50610477611b57565b3480156109a957600080fd5b506103e8611b5d565b3480156109be57600080fd5b50610413611b6c565b3480156109d357600080fd5b506104406109e2366004613112565b611b93565b3480156109f357600080fd5b50610477610a0236600461314a565b611ba8565b348015610a1357600080fd5b506104b9610a22366004613112565b611bd3565b348015610a3357600080fd5b506104b9610a423660046132bb565b611c50565b348015610a5357600080fd5b506104b9610a62366004613112565b611c99565b348015610a7357600080fd5b506104b9610a8236600461321a565b611cef565b348015610a9357600080fd5b506104b9610aa2366004613112565b611d37565b348015610ab357600080fd5b50610440611ded565b348015610ac857600080fd5b506103e8611dfb565b348015610add57600080fd5b506103e8611e0a565b348015610af257600080fd5b50610477611e19565b601d546001600160a01b031681565b60408051808201909152600b81526a566f6c74726f6e20496e7560a81b602082015290565b6000610b43610b3c611ead565b8484611eb1565b5060015b92915050565b6021546001600160a01b031681565b601a5481565b600b5490565b610b70611ead565b6000546001600160a01b03908116911614610ba65760405162461bcd60e51b8152600401610b9d906136d4565b60405180910390fd5b6001600160a01b03821660009081526008602052604090205460ff1615158115151415610be55760405162461bcd60e51b8152600401610b9d90613542565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b600c5490565b6000610c23848484611f65565b610c9384610c2f611ead565b610c8e856040518060600160405280602881526020016139f7602891396001600160a01b038a16600090815260036020526040812090610c6d611ead565b6001600160a01b0316815260208101919091526040016000205491906121d1565b611eb1565b5060019392505050565b601f546001600160a01b031681565b60265460275460285460295484565b6000600d54821115610cdf5760405162461bcd60e51b8152600401610b9d9061360d565b6000610ce961220b565b9050610cf58382611e6b565b9150505b919050565b601290565b610d0b611ead565b6000546001600160a01b03908116911614610d385760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b03811660009081526005602052604090205460ff16610d705760405162461bcd60e51b8152600401610b9d906135e3565b60005b600654811015610eca57816001600160a01b031660068281548110610da857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610eb85760068054610dd39060019061398b565b81548110610df157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b039092169183908110610e2b57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610e9157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610eca565b80610ec2816139a2565b915050610d73565b5050565b610ed6611ead565b6000546001600160a01b03908116911614610f035760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b03821660009081526009602052604090205460ff1615158115151415610f425760405162461bcd60e51b8152600401610b9d90613542565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000610b43610f7a611ead565b84610c8e8560036000610f8b611ead565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061222e565b6000610fc5611ead565b6001600160a01b03811660009081526005602052604090205490915060ff16156110015760405162461bcd60e51b8152600401610b9d90613811565b600061100c8361225d565b505050506001600160a01b038416600090815260016020526040902054919250611038919050826122ac565b6001600160a01b038316600090815260016020526040902055600d5461105e90826122ac565b600d55600b5461106e908461222e565b600b55505050565b61107e611ead565b6000546001600160a01b039081169116146110ab5760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600c548311156110f35760405162461bcd60e51b8152600401610b9d9061344d565b816111125760006111038461225d565b50939550610b47945050505050565b600061111d8461225d565b50929550610b47945050505050565b60225460235460245460255484565b611143611ead565b6000546001600160a01b039081169116146111705760405162461bcd60e51b8152600401610b9d906136d4565b601180549115156101000261ff0019909216919091179055565b602154600160a81b900460ff1681565b6111a2611ead565b6000546001600160a01b039081169116146111cf5760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b03811660009081526005602052604090205460ff16156112085760405162461bcd60e51b8152600401610b9d90613406565b6001600160a01b03811660009081526001602052604090205415611262576001600160a01b03811660009081526001602052604090205461124890610cbb565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b6112ee611ead565b6000546001600160a01b0390811691161461131b5760405162461bcd60e51b8152600401610b9d906136d4565b600f55565b611328611ead565b6000546001600160a01b039081169116146113555760405162461bcd60e51b8152600401610b9d906136d4565b601d546001600160a01b03828116911614156113835760405162461bcd60e51b8152600401610b9d90613569565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156113c157600080fd5b505afa1580156113d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f9919061312e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561144157600080fd5b505afa158015611455573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611479919061312e565b6040518363ffffffff1660e01b8152600401611496929190613303565b602060405180830381600087803b1580156114b057600080fd5b505af11580156114c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e8919061312e565b601e80546001600160a01b039283166001600160a01b031991821617909155601d805493909216921691909117905550565b611522611ead565b6000546001600160a01b0390811691161461154f5760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b0381166115755760405162461bcd60e51b8152600401610b9d90613752565b602180546001600160a01b0319166001600160a01b0392909216919091179055565b61159f611ead565b6000546001600160a01b039081169116146115cc5760405162461bcd60e51b8152600401610b9d906136d4565b600e55565b6001600160a01b03811660009081526005602052604081205460ff161561161157506001600160a01b038116600090815260026020526040902054610cf9565b6001600160a01b038216600090815260016020526040902054610b4790610cbb565b61163b611ead565b6000546001600160a01b039081169116146116685760405162461bcd60e51b8152600401610b9d906136d4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6116ba611ead565b6000546001600160a01b039081169116146116e75760405162461bcd60e51b8152600401610b9d906136d4565b601055565b600f5481565b60105481565b611700611ead565b6000546001600160a01b0390811691161461172d5760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60115460ff1681565b6001600160a01b031660009081526005602052604090205460ff1690565b611787611ead565b6000546001600160a01b039081169116146117b45760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b0382163014156117dc576117d7306117d16118c6565b836122ee565b610eca565b816001600160a01b031663a9059cbb6117f36118c6565b836040518363ffffffff1660e01b815260040161181192919061331d565b602060405180830381600087803b15801561182b57600080fd5b505af115801561183f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118639190613236565b505050565b60086020526000908152604090205460ff1681565b611885611ead565b6000546001600160a01b039081169116146118b25760405162461bcd60e51b8152600401610b9d906136d4565b602293909355602391909155602455602555565b6000546001600160a01b031690565b6040805180820190915260058152642b2a2927a760d91b602082015290565b6000610b43611901611ead565b84610c8e85604051806060016040528060258152602001613a1f602591396003600061192b611ead565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906121d1565b6000610b43611969611ead565b8484611f65565b600c5481565b604051806040016040528060058152602001642b2a2927a760d91b81525081565b61199f611ead565b6000546001600160a01b039081169116146119cc5760405162461bcd60e51b8152600401610b9d906136d4565b6000336001600160a01b0316476040516119e5906132ec565b60006040518083038185875af1925050503d8060008114611a22576040519150601f19603f3d011682016040523d82523d6000602084013e611a27565b606091505b5050905080611a3557600080fd5b50565b601c5481565b611a46611ead565b6000546001600160a01b03908116911614611a735760405162461bcd60e51b8152600401610b9d906136d4565b6021805460ff60a81b1916600160a81b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611aba908390613371565b60405180910390a150565b60096020526000908152604090205460ff1681565b611ae2611ead565b6000546001600160a01b03908116911614611b0f5760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b038116611b355760405162461bcd60e51b8152600401610b9d90613752565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b600e5481565b601e546001600160a01b031681565b6040518060400160405280600b81526020016a566f6c74726f6e20496e7560a81b81525081565b60076020526000908152604090205460ff1681565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b611bdb611ead565b6000546001600160a01b03908116911614611c085760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b038116611c2e5760405162461bcd60e51b8152600401610b9d90613752565b602080546001600160a01b0319166001600160a01b0392909216919091179055565b611c58611ead565b6000546001600160a01b03908116911614611c855760405162461bcd60e51b8152600401610b9d906136d4565b602693909355602791909155602855602955565b611ca1611ead565b6000546001600160a01b03908116911614611cce5760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b03166000908152600460205260409020805460ff19169055565b611cf7611ead565b6000546001600160a01b03908116911614611d245760405162461bcd60e51b8152600401610b9d906136d4565b6011805460ff1916911515919091179055565b611d3f611ead565b6000546001600160a01b03908116911614611d6c5760405162461bcd60e51b8152600401610b9d906136d4565b6001600160a01b038116611d925760405162461bcd60e51b8152600401610b9d90613484565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b601154610100900460ff1681565b600a546001600160a01b031681565b6020546001600160a01b031681565b601b5481565b600082611e2e57506000610b47565b6000611e3a838561396c565b905082611e47858361394c565b14611e645760405162461bcd60e51b8152600401610b9d90613693565b9392505050565b6000611e6483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061247c565b3390565b6001600160a01b038316611ed75760405162461bcd60e51b8152600401610b9d9061385d565b6001600160a01b038216611efd5760405162461bcd60e51b8152600401610b9d906133cf565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611f58908590613892565b60405180910390a3505050565b6001600160a01b038316611f8b5760405162461bcd60e51b8152600401610b9d90613501565b6001600160a01b038216611fb15760405162461bcd60e51b8152600401610b9d906135ac565b60008111611fd15760405162461bcd60e51b8152600401610b9d90613709565b6001600160a01b03831660009081526007602052604090205460ff16158061201257506001600160a01b03821660009081526007602052604090205460ff16155b61202e5760405162461bcd60e51b8152600401610b9d906137c4565b6001600160a01b03831660009081526008602052604090205460ff1615801561207057506001600160a01b03821660009081526008602052604090205460ff16155b801561207e575060115460ff165b156120a557600f548111156120a55760405162461bcd60e51b8152600401610b9d90613644565b601154610100900460ff1680156120d557506001600160a01b03821660009081526009602052604090205460ff16155b1561210e576010546120f0826120ea856115d1565b9061222e565b111561210e5760405162461bcd60e51b8152600401610b9d90613778565b6000612119306115d1565b600e5460215491925082101590600160a01b900460ff1615801561214a5750601e546001600160a01b038581169116145b801561215f5750602154600160a81b900460ff165b15612172578015612172576121726124aa565b6001600160a01b03851660009081526004602052604090205460019060ff16806121b457506001600160a01b03851660009081526004602052604090205460ff165b156121bd575060005b6121c986868684612505565b505050505050565b600081848411156121f55760405162461bcd60e51b8152600401610b9d919061337c565b506000612202848661398b565b95945050505050565b60008060006122186126b6565b90925090506122278282611e6b565b9250505090565b60008061223b8385613934565b905083811015611e645760405162461bcd60e51b8152600401610b9d906134ca565b60008060008060008060008060006122748a612873565b92509250925060008060006122928d868661228d61220b565b6128b5565b919f909e50909c50959a5093985091965092945050505050565b6000611e6483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121d1565b60006122f861220b565b905060006123068383611e1f565b6001600160a01b03861660009081526001602052604090205490915061232c90826122ac565b6001600160a01b03808716600090815260016020526040808220939093559086168152205461235b908261222e565b6001600160a01b0380861660009081526001602090815260408083209490945591881681526005909152205460ff16156123cc576001600160a01b0385166000908152600260205260409020546123b290846122ac565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526005602052604090205460ff161561242a576001600160a01b038416600090815260026020526040902054612410908461222e565b6001600160a01b0385166000908152600260205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161246d9190613892565b60405180910390a35050505050565b6000818361249d5760405162461bcd60e51b8152600401610b9d919061337c565b506000612202848661394c565b6021805460ff60a01b1916600160a01b179055601a54156124d0576124d0601a54612905565b601b54156124e3576124e3601b5461295b565b601c54156124f6576124f6601c546129c2565b6021805460ff60a01b19169055565b61250d612a29565b801561254f57601e546001600160a01b038581169116141561253157612531612a89565b601e546001600160a01b038481169116141561254f5761254f612aa3565b6001600160a01b03841660009081526005602052604090205460ff16801561259057506001600160a01b03831660009081526005602052604090205460ff16155b156125a5576125a0848484612abd565b6126a3565b6001600160a01b03841660009081526005602052604090205460ff161580156125e657506001600160a01b03831660009081526005602052604090205460ff165b156125f6576125a0848484612be1565b6001600160a01b03841660009081526005602052604090205460ff1615801561263857506001600160a01b03831660009081526005602052604090205460ff16155b15612648576125a0848484612c8a565b6001600160a01b03841660009081526005602052604090205460ff16801561268857506001600160a01b03831660009081526005602052604090205460ff165b15612698576125a0848484612cce565b6126a3848484612c8a565b806126b0576126b0612d41565b50505050565b600d54600c546000918291825b600654811015612841578260016000600684815481106126f357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061276c575081600260006006848154811061274557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561278357600d54600c549450945050505061286f565b6127d760016000600684815481106127ab57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122ac565b925061282d600260006006848154811061280157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122ac565b915080612839816139a2565b9150506126c3565b50600c54600d5461285191611e6b565b82101561286957600d54600c5493509350505061286f565b90925090505b9091565b60008060008061288285612d5b565b9050600061288f86612d7e565b905060006128a7826128a189866122ac565b906122ac565b979296509094509092505050565b60008080806128c48886611e1f565b905060006128d28887611e1f565b905060006128e08888611e1f565b905060006128f2826128a186866122ac565b939b939a50919850919650505050505050565b6000612912826002611e6b565b9050600061292083836122ac565b90504761292c82612e38565b600061293847836122ac565b90506129448482612fb5565b601a5461295190866122ac565b601a555050505050565b4761296582612e38565b600061297147836122ac565b601f546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156129ac573d6000803e3d6000fd5b50601b546129ba90846122ac565b601b55505050565b476129cc82612e38565b60006129d847836122ac565b6020546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612a13573d6000803e3d6000fd5b50601c54612a2190846122ac565b601c55505050565b6000612a4e6016546120ea6014546120ea60185460125461222e90919063ffffffff16565b905080612a5b5750612a87565b506012805460135560148054601555601680546017556018805460195560009384905591839055829055555b565b602254601255602354601455602454601655602554601855565b602654601255602754601455602854601655602954601855565b600080600080600080612acf8761225d565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612b0190886122ac565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612b3090876122ac565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054612b5f908661222e565b6001600160a01b038916600090815260016020526040902055612b8181613066565b612b8b84836130ee565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612bce9190613892565b60405180910390a3505050505050505050565b600080600080600080612bf38761225d565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150612c2590876122ac565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260029091522054612c5b908461222e565b6001600160a01b038916600090815260026020908152604080832093909355600190522054612b5f908661222e565b600080600080600080612c9c8761225d565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150612b3090876122ac565b600080600080600080612ce08761225d565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612d1290886122ac565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612c2590876122ac565b601354601255601554601455601754601655601954601855565b6000610b476103e8612d7860125485611e1f90919063ffffffff16565b90611e6b565b6000612d9b6103e8612d7860145485611e1f90919063ffffffff16565b601a6000828254612dac9190613934565b9091555050601654612dc7906103e890612d78908590611e1f565b601b6000828254612dd89190613934565b9091555050601854612df3906103e890612d78908590611e1f565b601c6000828254612e049190613934565b92505081905550610b476103e8612d78601854601654601454612e279190613934565b612e319190613934565b8590611e1f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e7b57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612ecf57600080fd5b505afa158015612ee3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f07919061312e565b81600181518110612f2857634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601d54612f4e9130911684611eb1565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f8790859060009086903090429060040161389b565b600060405180830381600087803b158015612fa157600080fd5b505af11580156121c9573d6000803e3d6000fd5b601d54612fcd9030906001600160a01b031684611eb1565b601d5460215460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261300d9230928992600092839216904290600401613336565b6060604051808303818588803b15801561302657600080fd5b505af115801561303a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061305f919061328e565b5050505050565b600061307061220b565b9050600061307e8383611e1f565b3060009081526001602052604090205490915061309b908261222e565b3060009081526001602090815260408083209390935560059052205460ff161561186357306000908152600260205260409020546130d9908461222e565b30600090815260026020526040902055505050565b600d546130fb90836122ac565b600d55600b5461310b908261222e565b600b555050565b600060208284031215613123578081fd5b8135611e64816139d3565b60006020828403121561313f578081fd5b8151611e64816139d3565b6000806040838503121561315c578081fd5b8235613167816139d3565b91506020830135613177816139d3565b809150509250929050565b600080600060608486031215613196578081fd5b83356131a1816139d3565b925060208401356131b1816139d3565b929592945050506040919091013590565b600080604083850312156131d4578182fd5b82356131df816139d3565b91506020830135613177816139e8565b60008060408385031215613201578182fd5b823561320c816139d3565b946020939093013593505050565b60006020828403121561322b578081fd5b8135611e64816139e8565b600060208284031215613247578081fd5b8151611e64816139e8565b600060208284031215613263578081fd5b5035919050565b6000806040838503121561327c578182fd5b823591506020830135613177816139e8565b6000806000606084860312156132a2578283fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156132d0578081fd5b5050823594602084013594506040840135936060013592509050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b818110156133a85785810183015185820160400152820161338c565b818111156133b95783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601e908201527f45524332303a20617070726f766520746f207a65726f20616464726573730000604082015260600190565b60208082526027908201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604082015266081c995dd85c9960ca1b606082015260800190565b6020808252601c908201527f416d74206d757374206265206c657373207468616e20737570706c7900000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526021908201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252600d908201526c4e6f74204368616e676564212160981b604082015260600190565b60208082526023908201527f54686520726f7574657220616c7265616479206861732074686174206164647260408201526265737360e81b606082015260800190565b6020808252601f908201527f45524332303a207472616e7366657220746f207a65726f206164647265737300604082015260600190565b60208082526010908201526f105b1c9958591e48195e18db1d59195960821b604082015260600190565b6020808252601e908201527f416d74206d757374206265206c657373207468616e20746f74207265666c0000604082015260600190565b6020808252602f908201527f4572726f723a205472616e7366657220616d6f756e742065786365656473207460408201526e34329036b0bc2a3c20b6b7bab73a1760891b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252600c908201526b5a45524f204144445245535360a01b604082015260600190565b6020808252602c908201527f4572726f723a205472616e7366657220416d6f756e742065786365656473205760408201526b30b63632ba102634b6b4ba1760a11b606082015260800190565b6020808252602d908201527f4572726f723a20426c61636b6c69737420426f74732f436f6e7472616374732060408201526c6e6f7420416c6c6f776564212160981b606082015260800190565b6020808252602c908201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460408201526b3434b990333ab731ba34b7b760a11b606082015260800190565b6020808252818101527f45524332303a20617070726f76652066726f6d207a65726f2061646472657373604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156138ea5784516001600160a01b0316835293830193918301916001016138c5565b50506001600160a01b03969096166060850152505050608001529392505050565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60008219821115613947576139476139bd565b500190565b60008261396757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613986576139866139bd565b500290565b60008282101561399d5761399d6139bd565b500390565b60006000198214156139b6576139b66139bd565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611a3557600080fd5b8015158114611a3557600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122059b66db47bee22d4c64fd05b46f9837be1bc45d2d942a53c05512cfc28b88a7364736f6c63430008000033

Deployed Bytecode Sourcemap

12272:25579:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14356:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16793:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18286:161::-;;;;;;;;;;-1:-1:-1;18286:161:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14623:32::-;;;;;;;;;;;;;:::i;14232:33::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19407:87::-;;;;;;;;;;;;;:::i;36685:186::-;;;;;;;;;;-1:-1:-1;36685:186:0;;;;;:::i;:::-;;:::i;:::-;;17651:95;;;;;;;;;;;;;:::i;18455:313::-;;;;;;;;;;-1:-1:-1;18455:313:0;;;;;:::i;:::-;;:::i;14441:84::-;;;;;;;;;;;;;:::i;15416:22::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;20323:241::-;;;;;;;;;;-1:-1:-1;20323:241:0;;;;;:::i;:::-;;:::i;17560:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20925:468::-;;;;;;;;;;-1:-1:-1;20925:468:0;;;;;:::i;:::-;;:::i;36479:198::-;;;;;;;;;;-1:-1:-1;36479:198:0;;;;;:::i;:::-;;:::i;18776:218::-;;;;;;;;;;-1:-1:-1;18776:218:0;;;;;:::i;:::-;;:::i;19502:377::-;;;;;;;;;;-1:-1:-1;19502:377:0;;;;;:::i;:::-;;:::i;21405:113::-;;;;;;;;;;-1:-1:-1;21405:113:0;;;;;:::i;:::-;;:::i;19887:428::-;;;;;;;;;;-1:-1:-1;19887:428:0;;;;;:::i;:::-;;:::i;15389:20::-;;;;;;;;;;;;;:::i;36992:103::-;;;;;;;;;;-1:-1:-1;36992:103:0;;;;;:::i;:::-;;:::i;14692:40::-;;;;;;;;;;;;;:::i;20572:345::-;;;;;;;;;;-1:-1:-1;20572:345:0;;;;;:::i;:::-;;:::i;26727:123::-;;;;;;;;;;-1:-1:-1;26727:123:0;;;;;:::i;:::-;;:::i;36370:101::-;;;;;;;;;;-1:-1:-1;36370:101:0;;;;;:::i;:::-;;:::i;16884:573::-;;;;;;;;;;-1:-1:-1;16884:573:0;;;;;:::i;:::-;;:::i;22211:185::-;;;;;;;;;;-1:-1:-1;22211:185:0;;;;;:::i;:::-;;:::i;26858:114::-;;;;;;;;;;-1:-1:-1;26858:114:0;;;;;:::i;:::-;;:::i;17754:198::-;;;;;;;;;;-1:-1:-1;17754:198:0;;;;;:::i;:::-;;:::i;9477:148::-;;;;;;;;;;;;;:::i;36256:106::-;;;;;;;;;;-1:-1:-1;36256:106:0;;;;;:::i;:::-;;:::i;13576:55::-;;;;;;;;;;;;;:::i;13646:53::-;;;;;;;;;;;;;:::i;36039:209::-;;;;;;;;;;-1:-1:-1;36039:209:0;;;;;:::i;:::-;;:::i;13714:41::-;;;;;;;;;;;;;:::i;19279:120::-;;;;;;;;;;-1:-1:-1;19279:120:0;;;;;:::i;:::-;;:::i;35692:309::-;;;;;;;;;;-1:-1:-1;35692:309:0;;;;;:::i;:::-;;:::i;12955:48::-;;;;;;;;;;-1:-1:-1;12955:48:0;;;;;:::i;:::-;;:::i;37103:365::-;;;;;;;;;;-1:-1:-1;37103:365:0;;;;;:::i;:::-;;:::i;9263:79::-;;;;;;;;;;;;;:::i;17465:87::-;;;;;;;;;;;;;:::i;19002:269::-;;;;;;;;;;-1:-1:-1;19002:269:0;;;;;:::i;:::-;;:::i;17960:167::-;;;;;;;;;;-1:-1:-1;17960:167:0;;;;;:::i;:::-;;:::i;13383:52::-;;;;;;;;;;;;;:::i;13290:40::-;;;;;;;;;;;;;:::i;35531:153::-;;;;;;;;;;;;;:::i;14312:35::-;;;;;;;;;;;;;:::i;21650:171::-;;;;;;;;;;-1:-1:-1;21650:171:0;;;;;:::i;:::-;;:::i;13010:52::-;;;;;;;;;;-1:-1:-1;13010:52:0;;;;;:::i;:::-;;:::i;21829:183::-;;;;;;;;;;-1:-1:-1;21829:183:0;;;;;:::i;:::-;;:::i;13500:67::-;;;;;;;;;;;;;:::i;14404:28::-;;;;;;;;;;;;;:::i;13240:43::-;;;;;;;;;;;;;:::i;12904:44::-;;;;;;;;;;-1:-1:-1;12904:44:0;;;;;:::i;:::-;;:::i;18135:143::-;;;;;;;;;;-1:-1:-1;18135:143:0;;;;;:::i;:::-;;:::i;22020:183::-;;;;;;;;;;-1:-1:-1;22020:183:0;;;;;:::i;:::-;;:::i;37476:370::-;;;;;;;;;;-1:-1:-1;37476:370:0;;;;;:::i;:::-;;:::i;21530:112::-;;;;;;;;;;-1:-1:-1;21530:112:0;;;;;:::i;:::-;;:::i;36879:105::-;;;;;;;;;;-1:-1:-1;36879:105:0;;;;;:::i;:::-;;:::i;9633:244::-;;;;;;;;;;-1:-1:-1;9633:244:0;;;;;:::i;:::-;;:::i;13762:35::-;;;;;;;;;;;;;:::i;13071:66::-;;;;;;;;;;;;;:::i;14532:84::-;;;;;;;;;;;;;:::i;14272:33::-;;;;;;;;;;;;;:::i;14356:41::-;;;-1:-1:-1;;;;;14356:41:0;;:::o;16793:83::-;16863:5;;;;;;;;;;;;-1:-1:-1;;;16863:5:0;;;;16793:83;:::o;18286:161::-;18361:4;18378:39;18387:12;:10;:12::i;:::-;18401:7;18410:6;18378:8;:39::i;:::-;-1:-1:-1;18435:4:0;18286:161;;;;;:::o;14623:32::-;;;-1:-1:-1;;;;;14623:32:0;;:::o;14232:33::-;;;;:::o;19407:87::-;19476:10;;19407:87;:::o;36685:186::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;36772:21:0;::::1;;::::0;;;:15:::1;:21;::::0;;;;;::::1;;:32;;::::0;::::1;;;;36764:57;;;;-1:-1:-1::0;;;36764:57:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36832:21:0;;;::::1;;::::0;;;:15:::1;:21;::::0;;;;:31;;-1:-1:-1;;36832:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36685:186::o;17651:95::-;17731:7;;17651:95;:::o;18455:313::-;18553:4;18570:36;18580:6;18588:9;18599:6;18570:9;:36::i;:::-;18617:121;18626:6;18634:12;:10;:12::i;:::-;18648:89;18686:6;18648:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18648:19:0;;;;;;:11;:19;;;;;;18668:12;:10;:12::i;:::-;-1:-1:-1;;;;;18648:33:0;;;;;;;;;;;;-1:-1:-1;18648:33:0;;;:89;:37;:89::i;:::-;18617:8;:121::i;:::-;-1:-1:-1;18756:4:0;18455:313;;;;;:::o;14441:84::-;;;-1:-1:-1;;;;;14441:84:0;;:::o;15416:22::-;;;;;;;;;;:::o;20323:241::-;20389:7;20428;;20417;:18;;20409:61;;;;-1:-1:-1;;;20409:61:0;;;;;;;:::i;:::-;20481:19;20504:10;:8;:10::i;:::-;20481:33;-1:-1:-1;20532:24:0;:7;20481:33;20532:11;:24::i;:::-;20525:31;;;20323:241;;;;:::o;17560:83::-;13372:2;17560:83;:::o;20925:468::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21007:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20999:49;;;;-1:-1:-1::0;;;20999:49:0::1;;;;;;;:::i;:::-;21064:9;21059:327;21083:9;:16:::0;21079:20;::::1;21059:327;;;21141:7;-1:-1:-1::0;;;;;21125:23:0::1;:9;21135:1;21125:12;;;;;;-1:-1:-1::0;;;21125:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21125:12:0::1;:23;21121:254;;;21184:9;21194:16:::0;;:20:::1;::::0;21213:1:::1;::::0;21194:20:::1;:::i;:::-;21184:31;;;;;;-1:-1:-1::0;;;21184:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;21169:9:::1;:12:::0;;-1:-1:-1;;;;;21184:31:0;;::::1;::::0;21179:1;;21169:12;::::1;;;-1:-1:-1::0;;;21169:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21169:46:0::1;-1:-1:-1::0;;;;;21169:46:0;;::::1;;::::0;;21234:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;21273:11:::1;:20:::0;;;;:28;;-1:-1:-1;;21273:28:0::1;::::0;;21320:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;21320:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;21320:15:0;;;;;-1:-1:-1;;;;;;21320:15:0::1;::::0;;;;;21354:5:::1;;21121:254;21101:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21059:327;;;;20925:468:::0;:::o;36479:198::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36570:25:0;::::1;;::::0;;;:19:::1;:25;::::0;;;;;::::1;;:36;;::::0;::::1;;;;36562:61;;;;-1:-1:-1::0;;;36562:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36634:25:0;;;::::1;;::::0;;;:19:::1;:25;::::0;;;;:35;;-1:-1:-1;;36634:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36479:198::o;18776:218::-;18864:4;18881:83;18890:12;:10;:12::i;:::-;18904:7;18913:50;18952:10;18913:11;:25;18925:12;:10;:12::i;:::-;-1:-1:-1;;;;;18913:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;18913:25:0;;;:34;;;;;;;;;;;:38;:50::i;19502:377::-;19554:14;19571:12;:10;:12::i;:::-;-1:-1:-1;;;;;19603:19:0;;;;;;:11;:19;;;;;;19554:29;;-1:-1:-1;19603:19:0;;19602:20;19594:77;;;;-1:-1:-1;;;19594:77:0;;;;;;;:::i;:::-;19683:15;19707:19;19718:7;19707:10;:19::i;:::-;-1:-1:-1;;;;;;;;;19755:15:0;;;;;;:7;:15;;;;;;19682:44;;-1:-1:-1;19755:28:0;;:15;-1:-1:-1;19682:44:0;19755:19;:28::i;:::-;-1:-1:-1;;;;;19737:15:0;;;;;;:7;:15;;;;;:46;19804:7;;:20;;19816:7;19804:11;:20::i;:::-;19794:7;:30;19848:10;;:23;;19863:7;19848:14;:23::i;:::-;19835:10;:36;-1:-1:-1;;;19502:377:0:o;21405:113::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21476:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;21476:34:0::1;21506:4;21476:34;::::0;;21405:113::o;19887:428::-;19972:7;20011;;20000;:18;;19992:59;;;;-1:-1:-1;;;19992:59:0;;;;;;;:::i;:::-;20067:17;20062:246;;20102:15;20126:19;20137:7;20126:10;:19::i;:::-;-1:-1:-1;20101:44:0;;-1:-1:-1;20160:14:0;;-1:-1:-1;;;;;20160:14:0;20062:246;20209:23;20240:19;20251:7;20240:10;:19::i;:::-;-1:-1:-1;20207:52:0;;-1:-1:-1;20274:22:0;;-1:-1:-1;;;;;20274:22:0;15389:20;;;;;;;;;;:::o;36992:103::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;37061:16:::1;:26:::0;;;::::1;;;;-1:-1:-1::0;;37061:26:0;;::::1;::::0;;;::::1;::::0;;36992:103::o;14692:40::-;;;-1:-1:-1;;;14692:40:0;;;;;:::o;20572:345::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20655:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20654:21;20646:73;;;;-1:-1:-1::0;;;20646:73:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20733:16:0;::::1;20752:1;20733:16:::0;;;:7:::1;:16;::::0;;;;;:20;20730:108:::1;;-1:-1:-1::0;;;;;20809:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;20789:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;20770:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;20730:108:::1;-1:-1:-1::0;;;;;20848:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;20848:27:0::1;20871:4;20848:27:::0;;::::1;::::0;;;20886:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;20886:23:0::1;::::0;;::::1;::::0;;20572:345::o;26727:123::-;-1:-1:-1;;;;;26815:27:0;26791:4;26815:27;;;:18;:27;;;;;;;;;26727:123::o;36370:101::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;36440:12:::1;:23:::0;36370:101::o;16884:573::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;17003:15:::1;::::0;-1:-1:-1;;;;;16981:38:0;;::::1;17003:15:::0;::::1;16981:38;;16963:115;;;;-1:-1:-1::0;;;16963:115:0::1;;;;;;;:::i;:::-;17089:35;17146:10;17089:68;;17259:16;-1:-1:-1::0;;;;;17259:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17241:70:0::1;;17320:4;17327:16;-1:-1:-1::0;;;;;17327:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17241:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17225:13;:126:::0;;-1:-1:-1;;;;;17225:126:0;;::::1;-1:-1:-1::0;;;;;;17225:126:0;;::::1;;::::0;;;17415:15:::1;:34:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;16884:573:0:o;22211:185::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22302:26:0;::::1;22294:51;;;;-1:-1:-1::0;;;22294:51:0::1;;;;;;;:::i;:::-;22356:17;:32:::0;;-1:-1:-1;;;;;;22356:32:0::1;-1:-1:-1::0;;;;;22356:32:0;;;::::1;::::0;;;::::1;::::0;;22211:185::o;26858:114::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;26926:29:::1;:38:::0;26858:114::o;17754:198::-;-1:-1:-1;;;;;17844:20:0;;17820:7;17844:20;;;:11;:20;;;;;;;;17840:49;;;-1:-1:-1;;;;;;17873:16:0;;;;;;:7;:16;;;;;;17866:23;;17840:49;-1:-1:-1;;;;;17927:16:0;;;;;;:7;:16;;;;;;17907:37;;:19;:37::i;9477:148::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;9584:1:::1;9568:6:::0;;9547:40:::1;::::0;-1:-1:-1;;;;;9568:6:0;;::::1;::::0;9547:40:::1;::::0;9584:1;;9547:40:::1;9615:1;9598:19:::0;;-1:-1:-1;;;;;;9598:19:0::1;::::0;;9477:148::o;36256:106::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;36333:10:::1;:21:::0;36256:106::o;13576:55::-;;;;:::o;13646:53::-;;;;:::o;36039:209::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36213:17:0;;;::::1;;::::0;;;:11:::1;:17;::::0;;;;:27;;-1:-1:-1;;36213:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36039:209::o;13714:41::-;;;;;;:::o;19279:120::-;-1:-1:-1;;;;;19371:20:0;19347:4;19371:20;;;:11;:20;;;;;;;;;19279:120::o;35692:309::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35788:29:0;::::1;35812:4;35788:29;35785:209;;;35834:54;35862:4;35868:7;:5;:7::i;:::-;35876:11;35834:19;:54::i;:::-;35785:209;;;35938:12;-1:-1:-1::0;;;;;35931:29:0::1;;35961:7;:5;:7::i;:::-;35970:11;35931:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35692:309:::0;;:::o;12955:48::-;;;;;;;;;;;;;;;:::o;37103:365::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;37276:6:::1;:33:::0;;;;37320:22;:38;;;;37369:22;:38;37418:24;:42;37103:365::o;9263:79::-;9301:7;9328:6;-1:-1:-1;;;;;9328:6:0;9263:79;:::o;17465:87::-;17537:7;;;;;;;;;;;;-1:-1:-1;;;17537:7:0;;;;17465:87;:::o;19002:269::-;19095:4;19112:129;19121:12;:10;:12::i;:::-;19135:7;19144:96;19183:15;19144:96;;;;;;;;;;;;;;;;;:11;:25;19156:12;:10;:12::i;:::-;-1:-1:-1;;;;;19144:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;19144:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;17960:167::-;18038:4;18055:42;18065:12;:10;:12::i;:::-;18079:9;18090:6;18055:9;:42::i;13383:52::-;;;;:::o;13290:40::-;;;;;;;;;;;;;;-1:-1:-1;;;13290:40:0;;;;:::o;35531:153::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;35584:7:::1;35604:10;-1:-1:-1::0;;;;;35596:24:0::1;35628:21;35596:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35583:71;;;35673:2;35665:11;;;::::0;::::1;;9460:1;35531:153::o:0;14312:35::-;;;;:::o;21650:171::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;21727:21:::1;:32:::0;;-1:-1:-1;;;;21727:32:0::1;-1:-1:-1::0;;;21727:32:0;::::1;;;;::::0;;21775:38:::1;::::0;::::1;::::0;::::1;::::0;21727:32;;21775:38:::1;:::i;:::-;;;;;;;;21650:171:::0;:::o;13010:52::-;;;;;;;;;;;;;;;:::o;21829:183::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21920:26:0;::::1;21912:51;;;;-1:-1:-1::0;;;21912:51:0::1;;;;;;;:::i;:::-;21974:15;:30:::0;;-1:-1:-1;;;;;;21974:30:0::1;-1:-1:-1::0;;;;;21974:30:0;;;::::1;::::0;;;::::1;::::0;;21829:183::o;13500:67::-;;;;:::o;14404:28::-;;;-1:-1:-1;;;;;14404:28:0;;:::o;13240:43::-;;;;;;;;;;;;;;-1:-1:-1;;;13240:43:0;;;;:::o;12904:44::-;;;;;;;;;;;;;;;:::o;18135:143::-;-1:-1:-1;;;;;18243:18:0;;;18216:7;18243:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18135:143::o;22020:183::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22111:26:0;::::1;22103:51;;;;-1:-1:-1::0;;;22103:51:0::1;;;;;;;:::i;:::-;22165:15;:30:::0;;-1:-1:-1;;;;;;22165:30:0::1;-1:-1:-1::0;;;;;22165:30:0;;;::::1;::::0;;;::::1;::::0;;22020:183::o;37476:370::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;37650:7:::1;:34:::0;;;;37695:23;:39;;;;37745:23;:39;37795:25;:43;37476:370::o;21530:112::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21599:27:0::1;21629:5;21599:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;21599:35:0::1;::::0;;21530:112::o;36879:105::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;36944:22:::1;:32:::0;;-1:-1:-1;;36944:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36879:105::o;9633:244::-;9400:12;:10;:12::i;:::-;9390:6;;-1:-1:-1;;;;;9390:6:0;;;:22;;;9382:67;;;;-1:-1:-1;;;9382:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9722:22:0;::::1;9714:73;;;;-1:-1:-1::0;;;9714:73:0::1;;;;;;;:::i;:::-;9824:6;::::0;;9803:38:::1;::::0;-1:-1:-1;;;;;9803:38:0;;::::1;::::0;9824:6;::::1;::::0;9803:38:::1;::::0;::::1;9852:6;:17:::0;;-1:-1:-1;;;;;;9852:17:0::1;-1:-1:-1::0;;;;;9852:17:0;;;::::1;::::0;;;::::1;::::0;;9633:244::o;13762:35::-;;;;;;;;;:::o;13071:66::-;;;-1:-1:-1;;;;;13071:66:0;;:::o;14532:84::-;;;-1:-1:-1;;;;;14532:84:0;;:::o;14272:33::-;;;;:::o;1331:256::-;1389:7;1419:6;1415:47;;-1:-1:-1;1449:1:0;1442:8;;1415:47;1474:9;1486:5;1490:1;1486;:5;:::i;:::-;1474:17;-1:-1:-1;1519:1:0;1510:5;1514:1;1474:17;1510:5;:::i;:::-;:10;1502:56;;;;-1:-1:-1;;;1502:56:0;;;;;;;:::i;:::-;1578:1;1331:256;-1:-1:-1;;;1331:256:0:o;1595:132::-;1653:7;1680:39;1684:1;1687;1680:39;;;;;;;;;;;;;;;;;:3;:39::i;2278:124::-;2382:10;2278:124;:::o;26980:329::-;-1:-1:-1;;;;;27073:19:0;;27065:64;;;;-1:-1:-1;;;27065:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27148:21:0;;27140:64;;;;-1:-1:-1;;;27140:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27217:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;27269:32;;;;;27247:6;;27269:32;:::i;:::-;;;;;;;;26980:329;;;:::o;27317:1575::-;-1:-1:-1;;;;;27439:18:0;;27431:64;;;;-1:-1:-1;;;27431:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27514:16:0;;27506:60;;;;-1:-1:-1;;;27506:60:0;;;;;;;:::i;:::-;27594:1;27585:6;:10;27577:64;;;;-1:-1:-1;;;27577:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27661:17:0;;;;;;:11;:17;;;;;;;;27660:18;;:38;;-1:-1:-1;;;;;;27683:15:0;;;;;;:11;:15;;;;;;;;27682:16;27660:38;27652:95;;;;-1:-1:-1;;;27652:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27764:21:0;;;;;;:15;:21;;;;;;;;27763:22;:46;;;;-1:-1:-1;;;;;;27790:19:0;;;;;;:15;:19;;;;;;;;27789:20;27763:46;:72;;;;-1:-1:-1;27813:22:0;;;;27763:72;27760:186;;;27870:12;;27860:6;:22;;27852:82;;;;-1:-1:-1;;;27852:82:0;;;;;;;:::i;:::-;27961:16;;;;;;;:44;;;;-1:-1:-1;;;;;;27982:23:0;;;;;;:19;:23;;;;;;;;27981:24;27961:44;27958:171;;;28059:10;;28030:25;28048:6;28030:13;28040:2;28030:9;:13::i;:::-;:17;;:25::i;:::-;:39;;28022:95;;;;-1:-1:-1;;;28022:95:0;;;;;;;:::i;:::-;28141:28;28172:24;28190:4;28172:9;:24::i;:::-;28268:29;;28327:16;;28141:55;;-1:-1:-1;28244:53:0;;;;-1:-1:-1;;;28327:16:0;;;;28326:17;:53;;;;-1:-1:-1;28366:13:0;;-1:-1:-1;;;;;28360:19:0;;;28366:13;;28360:19;28326:53;:91;;;;-1:-1:-1;28396:21:0;;-1:-1:-1;;;28396:21:0;;;;28326:91;28308:223;;;28447:19;28444:74;;;28486:16;:14;:16::i;:::-;-1:-1:-1;;;;;28739:24:0;;28612:12;28739:24;;;:18;:24;;;;;;28627:4;;28739:24;;;:50;;-1:-1:-1;;;;;;28767:22:0;;;;;;:18;:22;;;;;;;;28739:50;28736:96;;;-1:-1:-1;28815:5:0;28736:96;28844:38;28859:4;28864:2;28867:6;28874:7;28844:14;:38::i;:::-;27317:1575;;;;;;:::o;1131:192::-;1217:7;1253:12;1245:6;;;;1237:29;;;;-1:-1:-1;;;1237:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1277:9:0;1289:5;1293:1;1289;:5;:::i;:::-;1277:17;1131:192;-1:-1:-1;;;;;1131:192:0:o;23844:163::-;23885:7;23906:15;23923;23942:19;:17;:19::i;:::-;23905:56;;-1:-1:-1;23905:56:0;-1:-1:-1;23979:20:0;23905:56;;23979:11;:20::i;:::-;23972:27;;;;23844:163;:::o;798:181::-;856:7;;888:5;892:1;888;:5;:::i;:::-;876:17;;917:1;912;:6;;904:46;;;;-1:-1:-1;;;904:46:0;;;;;;;:::i;22652:414::-;22706:7;22715;22724;22733;22742;22751;22772:23;22797:12;22811:18;22833:20;22845:7;22833:11;:20::i;:::-;22771:82;;;;;;22865:15;22882:23;22907:12;22923:50;22935:7;22944:4;22950:10;22962;:8;:10::i;:::-;22923:11;:50::i;:::-;22864:109;;;;-1:-1:-1;22864:109:0;;-1:-1:-1;23024:15:0;;-1:-1:-1;23041:4:0;;-1:-1:-1;23047:10:0;;-1:-1:-1;22652:414:0;;-1:-1:-1;;;;;22652:414:0:o;987:136::-;1045:7;1072:43;1076:1;1079;1072:43;;;;;;;;;;;;;;;;;:3;:43::i;34917:606::-;35016:19;35039:10;:8;:10::i;:::-;35016:33;-1:-1:-1;35062:15:0;35080:23;:6;35016:33;35080:10;:23::i;:::-;-1:-1:-1;;;;;35137:15:0;;;;;;:7;:15;;;;;;35062:41;;-1:-1:-1;35137:28:0;;35062:41;35137:19;:28::i;:::-;-1:-1:-1;;;;;35119:15:0;;;;;;;:7;:15;;;;;;:46;;;;35197:18;;;;;;;:31;;35220:7;35197:22;:31::i;:::-;-1:-1:-1;;;;;35176:18:0;;;;;;;:7;:18;;;;;;;;:52;;;;35254:19;;;;;:11;:19;;;;;;;35250:97;;;-1:-1:-1;;;;;35308:15:0;;;;;;:7;:15;;;;;;:27;;35328:6;35308:19;:27::i;:::-;-1:-1:-1;;;;;35290:15:0;;;;;;:7;:15;;;;;:45;35250:97;-1:-1:-1;;;;;35362:22:0;;;;;;:11;:22;;;;;;;;35358:106;;;-1:-1:-1;;;;;35422:18:0;;;;;;:7;:18;;;;;;:30;;35445:6;35422:22;:30::i;:::-;-1:-1:-1;;;;;35401:18:0;;;;;;:7;:18;;;;;:51;35358:106;35497:9;-1:-1:-1;;;;;35480:35:0;35489:6;-1:-1:-1;;;;;35480:35:0;;35508:6;35480:35;;;;;;:::i;:::-;;;;;;;;34917:606;;;;;:::o;1735:191::-;1821:7;1856:12;1849:5;1841:28;;;;-1:-1:-1;;;1841:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1880:9:0;1892:5;1896:1;1892;:5;:::i;28900:280::-;14975:16;:23;;-1:-1:-1;;;;14975:23:0;-1:-1:-1;;;14975:23:0;;;28960:18:::1;::::0;:22;28957:63:::1;;28984:36;29001:18;;28984:16;:36::i;:::-;29034:18;::::0;:22;29031:62:::1;;29058:35;29074:18;;29058:15;:35::i;:::-;29107:20;::::0;:24;29104:68:::1;;29133:39;29151:20;;29133:17;:39::i;:::-;15021:16:::0;:24;;-1:-1:-1;;;;15021:24:0;;;28900:280::o;31510:1071::-;31631:14;:12;:14::i;:::-;31666:7;31662:232;;;31709:13;;-1:-1:-1;;;;;31699:23:0;;;31709:13;;31699:23;31695:80;;;31747:8;:6;:8::i;:::-;31810:13;;-1:-1:-1;;;;;31797:26:0;;;31810:13;;31797:26;31793:84;;;31848:9;:7;:9::i;:::-;-1:-1:-1;;;;;31919:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;31943:22:0;;;;;;:11;:22;;;;;;;;31942:23;31919:46;31915:597;;;31982:48;32004:6;32012:9;32023:6;31982:21;:48::i;:::-;31915:597;;;-1:-1:-1;;;;;32053:19:0;;;;;;:11;:19;;;;;;;;32052:20;:46;;;;-1:-1:-1;;;;;;32076:22:0;;;;;;:11;:22;;;;;;;;32052:46;32048:464;;;32115:46;32135:6;32143:9;32154:6;32115:19;:46::i;32048:464::-;-1:-1:-1;;;;;32184:19:0;;;;;;:11;:19;;;;;;;;32183:20;:47;;;;-1:-1:-1;;;;;;32208:22:0;;;;;;:11;:22;;;;;;;;32207:23;32183:47;32179:333;;;32247:44;32265:6;32273:9;32284:6;32247:17;:44::i;32179:333::-;-1:-1:-1;;;;;32313:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;32336:22:0;;;;;;:11;:22;;;;;;;;32313:45;32309:203;;;32375:48;32397:6;32405:9;32416:6;32375:21;:48::i;32309:203::-;32456:44;32474:6;32482:9;32493:6;32456:17;:44::i;:::-;32536:7;32532:41;;32558:15;:13;:15::i;:::-;31510:1071;;;;:::o;24015:561::-;24112:7;;24148;;24065;;;;;24172:289;24196:9;:16;24192:20;;24172:289;;;24262:7;24238;:21;24246:9;24256:1;24246:12;;;;;;-1:-1:-1;;;24246:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24246:12:0;24238:21;;;;;;;;;;;;;:31;;:66;;;24297:7;24273;:21;24281:9;24291:1;24281:12;;;;;;-1:-1:-1;;;24281:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24281:12:0;24273:21;;;;;;;;;;;;;:31;24238:66;24234:97;;;24314:7;;24323;;24306:25;;;;;;;;;24234:97;24356:34;24368:7;:21;24376:9;24386:1;24376:12;;;;;;-1:-1:-1;;;24376:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24376:12:0;24368:21;;;;;;;;;;;;;24356:7;;:11;:34::i;:::-;24346:44;;24415:34;24427:7;:21;24435:9;24445:1;24435:12;;;;;;-1:-1:-1;;;24435:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24435:12:0;24427:21;;;;;;;;;;;;;24415:7;;:11;:34::i;:::-;24405:44;-1:-1:-1;24214:3:0;;;;:::i;:::-;;;;24172:289;;;-1:-1:-1;24497:7:0;;24485;;:20;;:11;:20::i;:::-;24475:7;:30;24471:61;;;24515:7;;24524;;24507:25;;;;;;;;24471:61;24551:7;;-1:-1:-1;24560:7:0;-1:-1:-1;24015:561:0;;;:::o;23074:325::-;23129:7;23138;23147;23167:12;23182:24;23198:7;23182:15;:24::i;:::-;23167:39;;23217:18;23238:30;23260:7;23238:21;:30::i;:::-;23217:51;-1:-1:-1;23279:23:0;23305:33;23217:51;23305:17;:7;23317:4;23305:11;:17::i;:::-;:21;;:33::i;:::-;23279:59;23374:4;;-1:-1:-1;23380:10:0;;-1:-1:-1;23074:325:0;;-1:-1:-1;;;23074:325:0:o;23407:429::-;23522:7;;;;23578:24;:7;23590:11;23578;:24::i;:::-;23560:42;-1:-1:-1;23613:12:0;23628:21;:4;23637:11;23628:8;:21::i;:::-;23613:36;-1:-1:-1;23660:18:0;23681:27;:10;23696:11;23681:14;:27::i;:::-;23660:48;-1:-1:-1;23719:23:0;23745:33;23660:48;23745:17;:7;23757:4;23745:11;:17::i;:33::-;23797:7;;;;-1:-1:-1;23823:4:0;;-1:-1:-1;23407:429:0;;-1:-1:-1;;;;;;;23407:429:0:o;29884:405::-;29942:9;29954:13;:6;29965:1;29954:10;:13::i;:::-;29942:25;-1:-1:-1;29978:14:0;29995:16;:6;29942:25;29995:10;:16::i;:::-;29978:33;-1:-1:-1;30043:21:0;30075:27;29978:33;30075:16;:27::i;:::-;30113:19;30135:40;:21;30161:13;30135:25;:40::i;:::-;30113:62;;30186:33;30199:4;30204:14;30186:12;:33::i;:::-;30251:18;;:30;;30274:6;30251:22;:30::i;:::-;30230:18;:51;-1:-1:-1;;;;;29884:405:0:o;29188:337::-;29266:21;29298:24;29315:6;29298:16;:24::i;:::-;29333:19;29355:40;:21;29381:13;29355:25;:40::i;:::-;29414:15;;29406:49;;29333:62;;-1:-1:-1;;;;;;29414:15:0;;29406:49;;;;;29333:62;;29414:15;29406:49;29414:15;29406:49;29333:62;29414:15;29406:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29487:18:0;;:30;;29510:6;29487:22;:30::i;:::-;29466:18;:51;-1:-1:-1;;;29188:337:0:o;29533:343::-;29613:21;29645:24;29662:6;29645:16;:24::i;:::-;29680:19;29702:40;:21;29728:13;29702:25;:40::i;:::-;29761:15;;29753:49;;29680:62;;-1:-1:-1;;;;;;29761:15:0;;29753:49;;;;;29680:62;;29761:15;29753:49;29761:15;29753:49;29680:62;29761:15;29753:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29836:20:0;;:32;;29861:6;29836:24;:32::i;:::-;29813:20;:55;-1:-1:-1;;;29533:343:0:o;25542:472::-;25585:13;25601:66;25653:13;;25601:47;25634:13;;25601:28;25613:15;;25601:7;;:11;;:28;;;;:::i;:66::-;25585:82;-1:-1:-1;25681:13:0;25678:25;;25696:7;;;25678:25;-1:-1:-1;25742:7:0;;;25724:15;:25;25783:13;;;25760:20;:36;25831:13;;;25807:21;:37;25881:15;;;25855:23;:41;-1:-1:-1;25909:11:0;;;;25931:17;;;;25959;;;25987:19;25542:472;:::o;26258:222::-;26305:6;:16;26295:7;:26;26348:22;;26332:13;:38;26397:22;;26381:13;:38;26448:24;;26430:15;:42;26258:222::o;26492:227::-;26540:7;:17;26530:7;:27;26584:23;;-1:-1:-1;26568:39:0;26634:23;;26618:13;:39;26686:25;;26668:15;:43;26492:227::o;33693:566::-;33796:15;33813:23;33838:12;33852:23;33877:12;33891:18;33913:19;33924:7;33913:10;:19::i;:::-;-1:-1:-1;;;;;33961:15:0;;;;;;:7;:15;;;;;;33795:137;;-1:-1:-1;33795:137:0;;-1:-1:-1;33795:137:0;;-1:-1:-1;33795:137:0;-1:-1:-1;33795:137:0;-1:-1:-1;33795:137:0;-1:-1:-1;33961:28:0;;33981:7;33961:19;:28::i;:::-;-1:-1:-1;;;;;33943:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34018:7;:15;;;;:28;;34038:7;34018:19;:28::i;:::-;-1:-1:-1;;;;;34000:15:0;;;;;;;:7;:15;;;;;;:46;;;;34078:18;;;;;;;:39;;34101:15;34078:22;:39::i;:::-;-1:-1:-1;;;;;34057:18:0;;;;;;:7;:18;;;;;:60;34131:26;34146:10;34131:14;:26::i;:::-;34168:23;34180:4;34186;34168:11;:23::i;:::-;34224:9;-1:-1:-1;;;;;34207:44:0;34216:6;-1:-1:-1;;;;;34207:44:0;;34235:15;34207:44;;;;;;:::i;:::-;;;;;;;;33693:566;;;;;;;;;:::o;33099:586::-;33200:15;33217:23;33242:12;33256:23;33281:12;33295:18;33317:19;33328:7;33317:10;:19::i;:::-;-1:-1:-1;;;;;33365:15:0;;;;;;:7;:15;;;;;;33199:137;;-1:-1:-1;33199:137:0;;-1:-1:-1;33199:137:0;;-1:-1:-1;33199:137:0;-1:-1:-1;33199:137:0;-1:-1:-1;33199:137:0;-1:-1:-1;33365:28:0;;33199:137;33365:19;:28::i;:::-;-1:-1:-1;;;;;33347:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;33425:18;;;;;:7;:18;;;;;:39;;33448:15;33425:22;:39::i;:::-;-1:-1:-1;;;;;33404:18:0;;;;;;:7;:18;;;;;;;;:60;;;;33496:7;:18;;;;:39;;33519:15;33496:22;:39::i;32589:502::-;32688:15;32705:23;32730:12;32744:23;32769:12;32783:18;32805:19;32816:7;32805:10;:19::i;:::-;-1:-1:-1;;;;;32853:15:0;;;;;;:7;:15;;;;;;32687:137;;-1:-1:-1;32687:137:0;;-1:-1:-1;32687:137:0;;-1:-1:-1;32687:137:0;-1:-1:-1;32687:137:0;-1:-1:-1;32687:137:0;-1:-1:-1;32853:28:0;;32687:137;32853:19;:28::i;34267:642::-;34370:15;34387:23;34412:12;34426:23;34451:12;34465:18;34487:19;34498:7;34487:10;:19::i;:::-;-1:-1:-1;;;;;34535:15:0;;;;;;:7;:15;;;;;;34369:137;;-1:-1:-1;34369:137:0;;-1:-1:-1;34369:137:0;;-1:-1:-1;34369:137:0;-1:-1:-1;34369:137:0;-1:-1:-1;34369:137:0;-1:-1:-1;34535:28:0;;34555:7;34535:19;:28::i;:::-;-1:-1:-1;;;;;34517:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34592:7;:15;;;;:28;;34612:7;34592:19;:28::i;26026:224::-;26080:15;;26070:7;:25;26122:20;;26106:13;:36;26169:21;;26153:13;:37;26219:23;;26201:15;:41;26026:224::o;24957:154::-;25021:7;25048:55;25087:5;25048:20;25060:7;;25048;:11;;:20;;;;:::i;:::-;:24;;:55::i;25119:413::-;25184:7;25228:37;25259:5;25228:26;25240:13;;25228:7;:11;;:26;;;;:::i;:37::-;25206:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25310:13:0;;25298:37;;25329:5;;25298:26;;:7;;:11;:26::i;:37::-;25276:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25382:15:0;;25370:39;;25403:5;;25370:28;;:7;;:11;:28::i;:39::-;25346:20;;:63;;;;;;;:::i;:::-;;;;;;;;25429:95;25508:5;25429:60;25473:15;;25457:13;;25441;;:29;;;;:::i;:::-;:47;;;;:::i;:::-;25429:7;;:11;:60::i;30305:589::-;30455:16;;;30469:1;30455:16;;;;;;;;30431:21;;30455:16;;;;;;;;;;-1:-1:-1;30455:16:0;30431:40;;30500:4;30482;30487:1;30482:7;;;;;;-1:-1:-1;;;30482:7:0;;;;;;;;;-1:-1:-1;;;;;30482:23:0;;;:7;;;;;;;;;;:23;;;;30526:15;;:22;;;-1:-1:-1;;;30526:22:0;;;;:15;;;;;:20;;:22;;;;;30482:7;;30526:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30516:4;30521:1;30516:7;;;;;;-1:-1:-1;;;30516:7:0;;;;;;;;;-1:-1:-1;;;;;30516:32:0;;;:7;;;;;;;;;:32;30593:15;;30561:62;;30578:4;;30593:15;30611:11;30561:8;:62::i;:::-;30662:15;;:224;;-1:-1:-1;;;30662:224:0;;-1:-1:-1;;;;;30662:15:0;;;;:66;;:224;;30743:11;;30662:15;;30813:4;;30840;;30860:15;;30662:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30906:523;31086:15;;31054:62;;31071:4;;-1:-1:-1;;;;;31086:15:0;31104:11;31054:8;:62::i;:::-;31159:15;;31363:17;;31159:262;;-1:-1:-1;;;31159:262:0;;-1:-1:-1;;;;;31159:15:0;;;;:31;;31198:9;;31159:262;;31231:4;;31251:11;;31159:15;;;;31363:17;;31395:15;;31159:262;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30906:523;;:::o;24588:357::-;24651:19;24674:10;:8;:10::i;:::-;24651:33;-1:-1:-1;24695:18:0;24716:27;:10;24651:33;24716:14;:27::i;:::-;24795:4;24779:22;;;;:7;:22;;;;;;24695:48;;-1:-1:-1;24779:38:0;;24695:48;24779:26;:38::i;:::-;24770:4;24754:22;;;;:7;:22;;;;;;;;:63;;;;24831:11;:26;;;;;;24828:107;;;24913:4;24897:22;;;;:7;:22;;;;;;:38;;24924:10;24897:26;:38::i;:::-;24888:4;24872:22;;;;:7;:22;;;;;:63;24588:357;;;:::o;22497:147::-;22575:7;;:17;;22587:4;22575:11;:17::i;:::-;22565:7;:27;22616:10;;:20;;22631:4;22616:14;:20::i;:::-;22603:10;:33;-1:-1:-1;;22497:147:0:o;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;818:402::-;;;947:2;935:9;926:7;922:23;918:32;915:2;;;968:6;960;953:22;915:2;1012:9;999:23;1031:33;1058:5;1031:33;:::i;:::-;1083:5;-1:-1:-1;1140:2:1;1125:18;;1112:32;1153:35;1112:32;1153:35;:::i;:::-;1207:7;1197:17;;;905:315;;;;;:::o;1225:470::-;;;;1371:2;1359:9;1350:7;1346:23;1342:32;1339:2;;;1392:6;1384;1377:22;1339:2;1436:9;1423:23;1455:33;1482:5;1455:33;:::i;:::-;1507:5;-1:-1:-1;1564:2:1;1549:18;;1536:32;1577:35;1536:32;1577:35;:::i;:::-;1329:366;;1631:7;;-1:-1:-1;;;1685:2:1;1670:18;;;;1657:32;;1329:366::o;1700:396::-;;;1826:2;1814:9;1805:7;1801:23;1797:32;1794:2;;;1847:6;1839;1832:22;1794:2;1891:9;1878:23;1910:33;1937:5;1910:33;:::i;:::-;1962:5;-1:-1:-1;2019:2:1;2004:18;;1991:32;2032;1991;2032;:::i;2101:327::-;;;2230:2;2218:9;2209:7;2205:23;2201:32;2198:2;;;2251:6;2243;2236:22;2198:2;2295:9;2282:23;2314:33;2341:5;2314:33;:::i;:::-;2366:5;2418:2;2403:18;;;;2390:32;;-1:-1:-1;;;2188:240:1:o;2433:253::-;;2542:2;2530:9;2521:7;2517:23;2513:32;2510:2;;;2563:6;2555;2548:22;2510:2;2607:9;2594:23;2626:30;2650:5;2626:30;:::i;2691:257::-;;2811:2;2799:9;2790:7;2786:23;2782:32;2779:2;;;2832:6;2824;2817:22;2779:2;2869:9;2863:16;2888:30;2912:5;2888:30;:::i;2953:190::-;;3065:2;3053:9;3044:7;3040:23;3036:32;3033:2;;;3086:6;3078;3071:22;3033:2;-1:-1:-1;3114:23:1;;3023:120;-1:-1:-1;3023:120:1:o;3148:321::-;;;3274:2;3262:9;3253:7;3249:23;3245:32;3242:2;;;3295:6;3287;3280:22;3242:2;3336:9;3323:23;3313:33;;3396:2;3385:9;3381:18;3368:32;3409:30;3433:5;3409:30;:::i;3474:316::-;;;;3631:2;3619:9;3610:7;3606:23;3602:32;3599:2;;;3652:6;3644;3637:22;3599:2;3686:9;3680:16;3670:26;;3736:2;3725:9;3721:18;3715:25;3705:35;;3780:2;3769:9;3765:18;3759:25;3749:35;;3589:201;;;;;:::o;3795:395::-;;;;;3958:3;3946:9;3937:7;3933:23;3929:33;3926:2;;;3980:6;3972;3965:22;3926:2;-1:-1:-1;;4008:23:1;;;4078:2;4063:18;;4050:32;;-1:-1:-1;4129:2:1;4114:18;;4101:32;;4180:2;4165:18;4152:32;;-1:-1:-1;3916:274:1;-1:-1:-1;3916:274:1:o;4195:205::-;4395:3;4386:14::o;4405:203::-;-1:-1:-1;;;;;4569:32:1;;;;4551:51;;4539:2;4524:18;;4506:102::o;4613:304::-;-1:-1:-1;;;;;4843:15:1;;;4825:34;;4895:15;;4890:2;4875:18;;4868:43;4775:2;4760:18;;4742:175::o;4922:274::-;-1:-1:-1;;;;;5114:32:1;;;;5096:51;;5178:2;5163:18;;5156:34;5084:2;5069:18;;5051:145::o;5201:607::-;-1:-1:-1;;;;;5560:15:1;;;5542:34;;5607:2;5592:18;;5585:34;;;;5650:2;5635:18;;5628:34;;;;5693:2;5678:18;;5671:34;;;;5742:15;;;5736:3;5721:19;;5714:44;5522:3;5774:19;;5767:35;;;;5491:3;5476:19;;5458:350::o;5813:187::-;5978:14;;5971:22;5953:41;;5941:2;5926:18;;5908:92::o;6240:603::-;;6381:2;6410;6399:9;6392:21;6442:6;6436:13;6485:6;6480:2;6469:9;6465:18;6458:34;6510:4;6523:140;6537:6;6534:1;6531:13;6523:140;;;6632:14;;;6628:23;;6622:30;6598:17;;;6617:2;6594:26;6587:66;6552:10;;6523:140;;;6681:6;6678:1;6675:13;6672:2;;;6751:4;6746:2;6737:6;6726:9;6722:22;6718:31;6711:45;6672:2;-1:-1:-1;6827:2:1;6806:15;-1:-1:-1;;6802:29:1;6787:45;;;;6834:2;6783:54;;6361:482;-1:-1:-1;;;6361:482:1:o;6848:354::-;7050:2;7032:21;;;7089:2;7069:18;;;7062:30;7128:32;7123:2;7108:18;;7101:60;7193:2;7178:18;;7022:180::o;7207:403::-;7409:2;7391:21;;;7448:2;7428:18;;;7421:30;7487:34;7482:2;7467:18;;7460:62;-1:-1:-1;;;7553:2:1;7538:18;;7531:37;7600:3;7585:19;;7381:229::o;7615:352::-;7817:2;7799:21;;;7856:2;7836:18;;;7829:30;7895;7890:2;7875:18;;7868:58;7958:2;7943:18;;7789:178::o;7972:402::-;8174:2;8156:21;;;8213:2;8193:18;;;8186:30;8252:34;8247:2;8232:18;;8225:62;-1:-1:-1;;;8318:2:1;8303:18;;8296:36;8364:3;8349:19;;8146:228::o;8379:351::-;8581:2;8563:21;;;8620:2;8600:18;;;8593:30;8659:29;8654:2;8639:18;;8632:57;8721:2;8706:18;;8553:177::o;8735:397::-;8937:2;8919:21;;;8976:2;8956:18;;;8949:30;9015:34;9010:2;8995:18;;8988:62;-1:-1:-1;;;9081:2:1;9066:18;;9059:31;9122:3;9107:19;;8909:223::o;9137:337::-;9339:2;9321:21;;;9378:2;9358:18;;;9351:30;-1:-1:-1;;;9412:2:1;9397:18;;9390:43;9465:2;9450:18;;9311:163::o;9479:399::-;9681:2;9663:21;;;9720:2;9700:18;;;9693:30;9759:34;9754:2;9739:18;;9732:62;-1:-1:-1;;;9825:2:1;9810:18;;9803:33;9868:3;9853:19;;9653:225::o;9883:355::-;10085:2;10067:21;;;10124:2;10104:18;;;10097:30;10163:33;10158:2;10143:18;;10136:61;10229:2;10214:18;;10057:181::o;10243:340::-;10445:2;10427:21;;;10484:2;10464:18;;;10457:30;-1:-1:-1;;;10518:2:1;10503:18;;10496:46;10574:2;10559:18;;10417:166::o;10588:354::-;10790:2;10772:21;;;10829:2;10809:18;;;10802:30;10868:32;10863:2;10848:18;;10841:60;10933:2;10918:18;;10762:180::o;10947:411::-;11149:2;11131:21;;;11188:2;11168:18;;;11161:30;11227:34;11222:2;11207:18;;11200:62;-1:-1:-1;;;11293:2:1;11278:18;;11271:45;11348:3;11333:19;;11121:237::o;11363:397::-;11565:2;11547:21;;;11604:2;11584:18;;;11577:30;11643:34;11638:2;11623:18;;11616:62;-1:-1:-1;;;11709:2:1;11694:18;;11687:31;11750:3;11735:19;;11537:223::o;11765:356::-;11967:2;11949:21;;;11986:18;;;11979:30;12045:34;12040:2;12025:18;;12018:62;12112:2;12097:18;;11939:182::o;12126:405::-;12328:2;12310:21;;;12367:2;12347:18;;;12340:30;12406:34;12401:2;12386:18;;12379:62;-1:-1:-1;;;12472:2:1;12457:18;;12450:39;12521:3;12506:19;;12300:231::o;12536:336::-;12738:2;12720:21;;;12777:2;12757:18;;;12750:30;-1:-1:-1;;;12811:2:1;12796:18;;12789:42;12863:2;12848:18;;12710:162::o;12877:408::-;13079:2;13061:21;;;13118:2;13098:18;;;13091:30;13157:34;13152:2;13137:18;;13130:62;-1:-1:-1;;;13223:2:1;13208:18;;13201:42;13275:3;13260:19;;13051:234::o;13290:409::-;13492:2;13474:21;;;13531:2;13511:18;;;13504:30;13570:34;13565:2;13550:18;;13543:62;-1:-1:-1;;;13636:2:1;13621:18;;13614:43;13689:3;13674:19;;13464:235::o;13704:408::-;13906:2;13888:21;;;13945:2;13925:18;;;13918:30;13984:34;13979:2;13964:18;;13957:62;-1:-1:-1;;;14050:2:1;14035:18;;14028:42;14102:3;14087:19;;13878:234::o;14117:356::-;14319:2;14301:21;;;14338:18;;;14331:30;14397:34;14392:2;14377:18;;14370:62;14464:2;14449:18;;14291:182::o;14478:177::-;14624:25;;;14612:2;14597:18;;14579:76::o;14660:983::-;;14970:3;14959:9;14955:19;15001:6;14990:9;14983:25;15027:2;15065:6;15060:2;15049:9;15045:18;15038:34;15108:3;15103:2;15092:9;15088:18;15081:31;15132:6;15167;15161:13;15198:6;15190;15183:22;15236:3;15225:9;15221:19;15214:26;;15275:2;15267:6;15263:15;15249:29;;15296:4;15309:195;15323:6;15320:1;15317:13;15309:195;;;15388:13;;-1:-1:-1;;;;;15384:39:1;15372:52;;15479:15;;;;15444:12;;;;15420:1;15338:9;15309:195;;;-1:-1:-1;;;;;;;15560:32:1;;;;15555:2;15540:18;;15533:60;-1:-1:-1;;;15624:3:1;15609:19;15602:35;15521:3;14931:712;-1:-1:-1;;;14931:712:1:o;15648:391::-;15879:25;;;15935:2;15920:18;;15913:34;;;;15978:2;15963:18;;15956:34;16021:2;16006:18;;15999:34;15866:3;15851:19;;15833:206::o;16044:184::-;16216:4;16204:17;;;;16186:36;;16174:2;16159:18;;16141:87::o;16233:128::-;;16304:1;16300:6;16297:1;16294:13;16291:2;;;16310:18;;:::i;:::-;-1:-1:-1;16346:9:1;;16281:80::o;16366:217::-;;16432:1;16422:2;;-1:-1:-1;;;16457:31:1;;16511:4;16508:1;16501:15;16539:4;16464:1;16529:15;16422:2;-1:-1:-1;16568:9:1;;16412:171::o;16588:168::-;;16694:1;16690;16686:6;16682:14;16679:1;16676:21;16671:1;16664:9;16657:17;16653:45;16650:2;;;16701:18;;:::i;:::-;-1:-1:-1;16741:9:1;;16640:116::o;16761:125::-;;16829:1;16826;16823:8;16820:2;;;16834:18;;:::i;:::-;-1:-1:-1;16871:9:1;;16810:76::o;16891:135::-;;-1:-1:-1;;16951:17:1;;16948:2;;;16971:18;;:::i;:::-;-1:-1:-1;17018:1:1;17007:13;;16938:88::o;17031:127::-;17092:10;17087:3;17083:20;17080:1;17073:31;17123:4;17120:1;17113:15;17147:4;17144:1;17137:15;17163:133;-1:-1:-1;;;;;17240:31:1;;17230:42;;17220:2;;17286:1;17283;17276:12;17301:120;17389:5;17382:13;17375:21;17368:5;17365:32;17355:2;;17411:1;17408;17401:12

Swarm Source

ipfs://59b66db47bee22d4c64fd05b46f9837be1bc45d2d942a53c05512cfc28b88a73
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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