ETH Price: $3,083.71 (-0.16%)
Gas: 5 Gwei

Token

BlazeX (BlazeX)
 

Overview

Max Total Supply

966,445,514.568878483 BlazeX

Holders

127 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$114,253.19

Circulating Supply Market Cap

$112,421.00

Other Info

Token Contract (WITH 9 Decimals)

Balance
1.60595298 BlazeX

Value
$0.00 ( ~0 Eth) [0.0000%]
0xfd21c8ef359a343a6051cfcaae5295719b9410f0
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

BlazeX is a Telegram Bot Deployer that allows you to deploy a variety of tokens in a Telegram Bot. It offers both pre-deployment and post-deployment settings.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BlazeX

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-22
*/

// SPDX-License-Identifier: MIT
// Website: https://blazex.org
// Telegram: https://t.me/BlazeXCoin
// Deployer Bot: t.me/BlazeXDeployerBot

pragma solidity 0.8.17;

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

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

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 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 Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal returns(bool){
        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 }("");
        return success;
    }

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

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

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

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

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

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

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

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

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

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

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

contract BlazeX is Context, IERC20, Ownable {
    using Address for address;
    using Address for address payable;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    string private _name     = "BlazeX";
    string private _symbol   = "BlazeX";
    uint8  private _decimals = 9;
   
    uint256 private constant MAX = type(uint256).max;
    uint256 private _tTotal = 973.5e6 * (10 ** _decimals);
    uint256 private _tTotalSupply = 973.5e6 * (10 ** _decimals);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    uint256 public taxFeeonBuy;
    uint256 public taxFeeonSell;

    uint256 public liquidityFeeonBuy;
    uint256 public liquidityFeeonSell;

    uint256 public marketingFeeonBuy;
    uint256 public marketingFeeonSell;

    uint256 public burnFeeOnBuy;
    uint256 public burnFeeOnSell;

    uint256 private _taxFee;
    uint256 private _liquidityFee;
    uint256 private _marketingFee;

    uint256 private totalBuyFees;
    uint256 private totalSellFees;

    address public marketingWallet;

    bool public walletToWalletTransferWithoutFee;
    
    address private DEAD = 0x000000000000000000000000000000000000dEaD;

    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;

    bool private inSwapAndLiquify;
    bool public swapEnabled;
    bool public tradingEnabled;
    uint256 public swapTokensAtAmount;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MarketingWalletChanged(address marketingWallet);
    event SwapEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 bnbReceived, uint256 tokensIntoLiqudity);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 amount);
    event BuyFeesChanged(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee);
    event SellFeesChanged(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee);
    event WalletToWalletTransferWithoutFeeEnabled(bool enabled);
    
    constructor() 
    {        
        address router;
        if (block.chainid == 56) {
            router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; 
        } else if (block.chainid == 97) {
            router =  0xD99D1c33F9fC3444f8101754aBC46c52416550D1; 
        } else if (block.chainid == 1 || block.chainid == 5) {
            router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; 
        } else {
            revert();
        }

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;

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

        taxFeeonBuy = 10;
        taxFeeonSell = 10;

        liquidityFeeonBuy = 0;
        liquidityFeeonSell = 0;

        marketingFeeonBuy = 30;
        marketingFeeonSell = 30;

        burnFeeOnBuy = 10;
        burnFeeOnSell = 10;

        totalBuyFees = taxFeeonBuy + liquidityFeeonBuy + marketingFeeonBuy + burnFeeOnBuy;
        totalSellFees = taxFeeonSell + liquidityFeeonSell + marketingFeeonSell + burnFeeOnSell;

        marketingWallet = 0x8883dc32cB23BcE47F7bb7CAaE2456093553C0cE;
        
        swapEnabled = true;
        swapTokensAtAmount = _tTotal / 5000;

        maxTransactionLimitEnabled  = true;

        maxTransactionAmountBuy     = _tTotal * 15 / 1000;
        maxTransactionAmountSell    = _tTotal * 15 / 1000;

        _isExcludedFromMaxTxLimit[owner()] = true;
        _isExcludedFromMaxTxLimit[address(0)] = true;
        _isExcludedFromMaxTxLimit[address(this)] = true;
        _isExcludedFromMaxTxLimit[marketingWallet] = true;
        _isExcludedFromMaxTxLimit[DEAD] = true;

        maxWalletLimitEnabled = true;

        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[address(0xdead)] = true;
        _isExcludedFromMaxWalletLimit[marketingWallet] = true;
        _isExcludedFromMaxWalletLimit[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; //pinklock
    
        walletToWalletTransferWithoutFee = true;
        
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(this)] = true;

        _isExcluded[address(this)] = true;
        _isExcluded[address(0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE)] = true; //pinklock
        _isExcluded[address(0xdead)] = true;
        _isExcluded[address(uniswapV2Pair)] = true;

        _rOwned[owner()] = _rTotal;
        _tOwned[owner()] = _tTotal;

        maxWalletAmount             = _tTotal * 10 / 1000;

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

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

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

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

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

    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()] - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

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

    function totalReflectionDistributed() 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] - rAmount;
        _rTotal = _rTotal - rAmount;
        _tFeeTotal = _tFeeTotal + tAmount;
    }

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

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

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

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already included");
        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;
            }
        }
    }

    receive() external payable {}

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");
        if (token == address(0x0)) {
            payable(msg.sender).sendValue(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

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

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

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

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount * currentRate;
        uint256 rFee = tFee * currentRate;
        uint256 rLiquidity = tLiquidity * currentRate;
        uint256 rMarketing = tMarketing * currentRate;
        uint256 rTransferAmount = rAmount - rFee - rLiquidity - rMarketing;
        return (rAmount, rTransferAmount, rFee);
    }

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

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

        if (liquidityFeeonBuy + liquidityFeeonSell + burnFeeOnBuy + burnFeeOnSell > 0){
            liquidityAmount = tLiquidity * (liquidityFeeonBuy + liquidityFeeonSell) / (liquidityFeeonBuy + liquidityFeeonSell + burnFeeOnBuy + burnFeeOnSell);
            burnAmount = tLiquidity - liquidityAmount;
        }

        if(liquidityAmount > 0){
            uint256 currentRate =  _getRate();
            uint256 rLiquidity = liquidityAmount * currentRate;
            _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
            if(_isExcluded[address(this)])
                _tOwned[address(this)] = _tOwned[address(this)] + liquidityAmount;
        }

        if(burnAmount > 0){
            uint256 currentRate =  _getRate();
            uint256 rBurn = burnAmount * currentRate;
            _rOwned[address(0xdead)] = _rOwned[address(0xdead)] + rBurn;
            if(_isExcluded[address(0xdead)])
                _tOwned[address(0xdead)] = _tOwned[address(0xdead)] + burnAmount;

            _tTotalSupply -= burnAmount;
        }
    }

    function _takeMarketing(uint256 tMarketing) private {
        if (tMarketing > 0) {
            uint256 currentRate =  _getRate();
            uint256 rMarketing = tMarketing * currentRate;
            _rOwned[address(this)] = _rOwned[address(this)] + rMarketing;
            if(_isExcluded[address(this)])
                _tOwned[address(this)] = _tOwned[address(this)] + tMarketing;
        }
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount * _taxFee / 1000;
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount * _liquidityFee / 1000;
    }
    
    function calculateMarketingFee(uint256 _amount) private view returns (uint256) {
        return _amount * _marketingFee / 1000;
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _marketingFee == 0) return;
        
        _taxFee = 0;
        _marketingFee = 0;
        _liquidityFee = 0;
    }
    
    function setBuyFee() private{
        if(_taxFee == taxFeeonBuy && _liquidityFee == (liquidityFeeonBuy + burnFeeOnBuy) && _marketingFee == marketingFeeonBuy ) return;

        _taxFee = taxFeeonBuy;
        _marketingFee = marketingFeeonBuy;
        _liquidityFee = liquidityFeeonBuy + burnFeeOnBuy;
    }

    function setSellFee() private{
        if(_taxFee == taxFeeonSell && _liquidityFee == (liquidityFeeonSell + burnFeeOnSell) && _marketingFee == marketingFeeonSell ) return;

        _taxFee = taxFeeonSell;
        _marketingFee = marketingFeeonSell;
        _liquidityFee = liquidityFeeonSell + burnFeeOnSell;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

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

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

    function enableTrading() external onlyOwner{
        require(tradingEnabled == false, "Trading is already enabled");
        tradingEnabled = true;
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            require(tradingEnabled, "Trading is not enabled yet");
        }

        if (maxTransactionLimitEnabled) 
        {
            if ((from == uniswapV2Pair || to == uniswapV2Pair) &&
                _isExcludedFromMaxTxLimit[from] == false && 
                _isExcludedFromMaxTxLimit[to]   == false) 
            {
                if (from == uniswapV2Pair) {
                    require(
                        amount <= maxTransactionAmountBuy,  
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                } else {
                    require(
                        amount <= maxTransactionAmountSell, 
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));        
        bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            to == uniswapV2Pair &&
            swapEnabled
        ) {
            inSwapAndLiquify = true;
            
            uint256 marketingShare = marketingFeeonBuy + marketingFeeonSell;
            uint256 liquidityShare = liquidityFeeonBuy + liquidityFeeonSell;

            uint256 totalShare = marketingShare + liquidityShare;

            if(totalShare > 0) {
                if(liquidityShare > 0) {
                    uint256 liquidityTokens = (contractTokenBalance * liquidityShare) / totalShare;
                    swapAndLiquify(liquidityTokens);
                }
                
                if(marketingShare > 0) {
                    uint256 marketingTokens = (contractTokenBalance * marketingShare) / totalShare;
                    swapAndSendMarketing(marketingTokens);
                } 
            }

            inSwapAndLiquify = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount);

        if (maxWalletLimitEnabled) 
        {
            if (!_isExcludedFromMaxWalletLimit[from] && 
                !_isExcludedFromMaxWalletLimit[to] &&
                to != uniswapV2Pair
            ) {
                uint256 balance  = balanceOf(to);
                require(
                    balance + amount <= maxWalletAmount, 
                    "MaxWallet: Recipient exceeds the maxWalletAmount"
                );
            }
        }
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens / 2;
        uint256 otherHalf = tokens - half;

        uint256 initialBalance = address(this).balance;

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            half,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp);
        
        uint256 newBalance = address(this).balance - initialBalance;

        uniswapV2Router.addLiquidityETH{value: newBalance}(
            address(this),
            otherHalf,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            DEAD,
            block.timestamp
        );

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapAndSendMarketing(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp);

        uint256 newBalance = address(this).balance - initialBalance;

        payable(marketingWallet).sendValue(newBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner() {
        require(newAmount > totalSupply() / 1e5, "SwapTokensAtAmount must be greater than 0.001% of total supply");
        swapTokensAtAmount = newAmount;
        emit SwapTokensAtAmountUpdated(newAmount);
    }
    
    function setSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled = _enabled;
        emit SwapEnabledUpdated(_enabled);
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
         if (_isExcludedFromFees[sender] || 
            _isExcludedFromFees[recipient] 
            ) {
            removeAllFee();
        }else if(recipient == uniswapV2Pair){
            setSellFee();
        }else if(sender == uniswapV2Pair){
            setBuyFee();
        }else if(walletToWalletTransferWithoutFee){
            removeAllFee();
        }else{
            setSellFee();
        }

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

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeMarketing(tMarketing);
        _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, uint256 tMarketing) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeMarketing(tMarketing);           
        _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, uint256 tMarketing) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; 
        _takeMarketing(tMarketing);  
        _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, uint256 tMarketing) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeMarketing(tMarketing);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function excludeFromFees(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }
    
    function changeMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != marketingWallet, "Marketing wallet is already that address");
        require(_marketingWallet!=address(0), "Marketing wallet is the zero address");
        marketingWallet = _marketingWallet;
        emit MarketingWalletChanged(marketingWallet);
    }

    function setBuyFeePercentages(uint256 _taxFeeonBuy, uint256 _liquidityFeeonBuy, uint256 _marketingFeeonBuy, uint256 _burnFeeOnBuy) external onlyOwner {
        taxFeeonBuy = _taxFeeonBuy;
        liquidityFeeonBuy = _liquidityFeeonBuy;
        marketingFeeonBuy = _marketingFeeonBuy;
        burnFeeOnBuy = _burnFeeOnBuy;

        totalBuyFees = taxFeeonBuy + liquidityFeeonBuy + marketingFeeonBuy + burnFeeOnBuy;

        require(totalBuyFees <= 100, "Buy fees cannot be greater than 10%");

        emit BuyFeesChanged(taxFeeonBuy, liquidityFeeonBuy, marketingFeeonBuy);
    }

    function setSellFeePercentages(uint256 _taxFeeonSell, uint256 _liquidityFeeonSell, uint256 _marketingFeeonSell, uint256 _burnFeeOnSell) external onlyOwner {
        taxFeeonSell = _taxFeeonSell;
        liquidityFeeonSell = _liquidityFeeonSell;
        marketingFeeonSell = _marketingFeeonSell;
        burnFeeOnSell = _burnFeeOnSell;

        totalSellFees = taxFeeonSell + liquidityFeeonSell + marketingFeeonSell + burnFeeOnSell;

        require(totalSellFees <= 100, "Sell fees cannot be greater than 10%");

        emit SellFeesChanged(taxFeeonSell, liquidityFeeonSell, marketingFeeonSell);
    }

    function enableWalletToWalletTransferWithoutFee(bool enable) external onlyOwner {
        require(walletToWalletTransferWithoutFee != enable, "Wallet to wallet transfer without fee is already set to that value");
        walletToWalletTransferWithoutFee = enable;
        emit WalletToWalletTransferWithoutFeeEnabled(enable);
    }

    mapping(address => bool) private _isExcludedFromMaxTxLimit;
    bool    public  maxTransactionLimitEnabled;
    uint256 public  maxTransactionAmountBuy;
    uint256 public  maxTransactionAmountSell;

    event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded);
    event MaxTransactionLimitStateChanged(bool maxTransactionLimit);
    event MaxTransactionLimitAmountChanged(uint256 maxTransactionAmountBuy, uint256 maxTransactionAmountSell);

    function setEnableMaxTransactionLimit(bool enable) external onlyOwner {
        require(
            enable != maxTransactionLimitEnabled, 
            "Max transaction limit is already set to that state"
        );
        maxTransactionLimitEnabled = enable;
        emit MaxTransactionLimitStateChanged(maxTransactionLimitEnabled);
    }

    function setMaxTransactionAmounts(uint256 _maxTransactionAmountBuy, uint256 _maxTransactionAmountSell) external onlyOwner {
        require(
            _maxTransactionAmountBuy  >= totalSupply() / (10 ** decimals()) / 1000 && 
            _maxTransactionAmountSell >= totalSupply() / (10 ** decimals()) / 1000, 
            "Max Transaction limis cannot be lower than 0.1% of total supply"
        ); 
        maxTransactionAmountBuy  = _maxTransactionAmountBuy  * (10 ** decimals());
        maxTransactionAmountSell = _maxTransactionAmountSell * (10 ** decimals());
        emit MaxTransactionLimitAmountChanged(maxTransactionAmountBuy, maxTransactionAmountSell);
    }

    function setExcludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner {
        require(
            _isExcludedFromMaxTxLimit[account] != exclude, 
            "Account is already set to that state"
        );
        _isExcludedFromMaxTxLimit[account] = exclude;
        emit ExcludedFromMaxTransactionLimit(account, exclude);
    }

    function isExcludedFromMaxTransaction(address account) public view returns(bool) {
        return _isExcludedFromMaxTxLimit[account];
    }

    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    bool    public maxWalletLimitEnabled;
    uint256 public maxWalletAmount;

    event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded);
    event MaxWalletLimitStateChanged(bool maxWalletLimit);
    event MaxWalletLimitAmountChanged(uint256 maxWalletAmount);

    function setEnableMaxWalletLimit(bool enable) external onlyOwner {
        require(enable != maxWalletLimitEnabled,"Max wallet limit is already set to that state");
        maxWalletLimitEnabled = enable;

        emit MaxWalletLimitStateChanged(maxWalletLimitEnabled);
    }

    function setMaxWalletAmount(uint256 _maxWalletAmount) external onlyOwner {
        require(_maxWalletAmount >= (totalSupply() / (10 ** decimals())) / 100, "Max wallet percentage cannot be lower than 1%");
        maxWalletAmount = _maxWalletAmount * (10 ** decimals());

        emit MaxWalletLimitAmountChanged(maxWalletAmount);
    }

    function excludeFromMaxWallet(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxWalletLimit[account] != exclude,"Account is already set to that state");
        require(account != address(this), "Can't set this address.");

        _isExcludedFromMaxWalletLimit[account] = exclude;

        emit ExcludedFromMaxWalletLimit(account, exclude);
    }

    function isExcludedFromMaxWalletLimit(address account) public view returns(bool) {
        return _isExcludedFromMaxWalletLimit[account];
    }
}

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":false,"internalType":"uint256","name":"taxFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"BuyFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountSell","type":"uint256"}],"name":"MaxTransactionLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTransactionLimit","type":"bool"}],"name":"MaxTransactionLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxWalletLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxWalletLimit","type":"bool"}],"name":"MaxWalletLimitStateChanged","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":"taxFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"SellFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"WalletToWalletTransferWithoutFeeEnabled","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableWalletToWalletTransferWithoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxWallet","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":"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":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFeeonBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeonBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeonBuy","type":"uint256"},{"internalType":"uint256","name":"_burnFeeOnBuy","type":"uint256"}],"name":"setBuyFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setExcludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmountBuy","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmountSell","type":"uint256"}],"name":"setMaxTransactionAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFeeonSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeonSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeonSell","type":"uint256"},{"internalType":"uint256","name":"_burnFeeOnSell","type":"uint256"}],"name":"setSellFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletToWalletTransferWithoutFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526006608090815265084d8c2f4cab60d31b60a052600790620000279082620009db565b50604080518082019091526006815265084d8c2f4cab60d31b6020820152600890620000549082620009db565b506009805460ff1916811781556200006e90600a62000bbc565b6200007e90633a066e6062000bd4565b600a908155600954620000979160ff9091169062000bbc565b620000a790633a066e6062000bd4565b600b55600a54620000bb9060001962000c04565b620000c99060001962000c1b565b600c55601c80546001600160a01b03191661dead179055348015620000ed57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000466038036200015657507310ed43c718714eb63d5aa57b78b54704e256024e620001b2565b466061036200017b575073d99d1c33f9fc3444f8101754abc46c52416550d1620001b2565b46600114806200018b5750466005145b15620001ad5750737a250d5630b4cf539739df2c5dacb4c659f2488d620001b2565b600080fd5b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c919062000c31565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062000c31565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000304919062000c31565b601e80546001600160a01b039283166001600160a01b031991821617909155601d8054928416929091168217905562000342903090600019620007fb565b600a600e819055600f819055600060108190556011819055601e6012819055601381905560148390556015839055906200037d908362000c5c565b62000389919062000c5c565b62000395919062000c5c565b601955601554601354601154600f54620003b0919062000c5c565b620003bc919062000c5c565b620003c8919062000c5c565b601a55601b80546001600160a01b031916738883dc32cb23bce47f7bb7caae2456093553c0ce179055601e805460ff60a81b1916600160a81b179055600a5462000416906113889062000c72565b601f556021805460ff19166001179055600a546103e8906200043a90600f62000bd4565b62000446919062000c72565b602255600a546103e8906200045d90600f62000bd4565b62000469919062000c72565b602355600160206000620004856000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790559280527f29ab76e7ca72530a8284597fb76b039d796325740b21528d71ade454c6f2dbe98054851660019081179091553084528284208054861682179055601b54821684528284208054861682179055601c5490911683529082208054841682179055602580549093168117909255602490620005386000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260249093528183208054851660019081179091557fc85df64b997460f9ebf6929eca33c1ed2309802ac6ba41eea1e539280d5c25008054861682179055601b80549092168452918320805485168317905573407993575c91ce7643a4d4ccacc9a98c36ee1bbe83527f885582f824fee42cfe0b4ba6d9f91467e95b73b4c31f36f77e855dd60e5a78e280549094168217909355825460ff60a01b1916600160a01b17909255600490620006246000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600484527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd8054861660019081179091553082528382208054871682179055600590945282812080548616851790557f7e99e1e5c40ec22aa71ab68cea1ae3bb6f232576acb26d0b4e86f2583f2d4e3c80548616851790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba8054861685179055601e54909116815290812080549093168217909255600c54916200071f6000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600a54600260006200075a6200092760201b60201c565b6001600160a01b03168152602081019190915260400160002055600a80546103e89162000788919062000bd4565b62000794919062000c72565b6026556000546001600160a01b03166001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620007eb91815260200190565b60405180910390a3505062000c89565b6001600160a01b038316620008635760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620008c65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200085a565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031690565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200096157607f821691505b6020821081036200098257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009d657600081815260208120601f850160051c81016020861015620009b15750805b601f850160051c820191505b81811015620009d257828155600101620009bd565b5050505b505050565b81516001600160401b03811115620009f757620009f762000936565b62000a0f8162000a0884546200094c565b8462000988565b602080601f83116001811462000a47576000841562000a2e5750858301515b600019600386901b1c1916600185901b178555620009d2565b600085815260208120601f198616915b8281101562000a785788860151825594840194600190910190840162000a57565b508582101562000a975787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000afe57816000190482111562000ae25762000ae262000aa7565b8085161562000af057918102915b93841c939080029062000ac2565b509250929050565b60008262000b175750600162000bb6565b8162000b265750600062000bb6565b816001811462000b3f576002811462000b4a5762000b6a565b600191505062000bb6565b60ff84111562000b5e5762000b5e62000aa7565b50506001821b62000bb6565b5060208310610133831016604e8410600b841016171562000b8f575081810a62000bb6565b62000b9b838362000abd565b806000190482111562000bb25762000bb262000aa7565b0290505b92915050565b600062000bcd60ff84168362000b06565b9392505050565b808202811582820484141762000bb65762000bb662000aa7565b634e487b7160e01b600052601260045260246000fd5b60008262000c165762000c1662000bee565b500690565b8181038181111562000bb65762000bb662000aa7565b60006020828403121562000c4457600080fd5b81516001600160a01b038116811462000bcd57600080fd5b8082018082111562000bb65762000bb662000aa7565b60008262000c845762000c8462000bee565b500490565b613e7a8062000c996000396000f3fe6080604052600436106103905760003560e01c80635f35bc5c116101dc578063a938d1c911610102578063d2fcc001116100a0578063e3b467911161006f578063e3b4679114610a8c578063e982f35114610aac578063f2fde38b14610acc578063f9d0831a14610aec57600080fd5b8063d2fcc001146109f0578063dd62ed3e14610a10578063e01af92c14610a56578063e2f4560514610a7657600080fd5b8063b577554a116100dc578063b577554a1461097b578063b6f7f68114610990578063bb85c6d1146109b0578063c0246668146109d057600080fd5b8063a938d1c91461092f578063aa4bde2814610945578063afa4f3b21461095b57600080fd5b80638a8c523c1161017a578063989a124f11610149578063989a124f146108a0578063a457c2d7146108b6578063a8a69b9d146108d6578063a9059cbb1461090f57600080fd5b80638a8c523c146108425780638da5cb5b1461085757806393a7781f1461087557806395d89b411461088b57600080fd5b806370a08231116101b657806370a08231146107b4578063715018a6146107d457806375f0a874146107e957806388f820201461080957600080fd5b80635f35bc5c1461076757806365a8ee4f1461077d5780636ddd17131461079357600080fd5b80632d838119116102c15780634ada218b1161025f5780635654d0b31161022e5780635654d0b3146106fb57806356a6cabf1461071b57806359136fa51461073b5780635a04e0351461075157600080fd5b80634ada218b1461066b5780634b93d0591461068c57806352390c02146106a25780635342acb4146106c257600080fd5b8063395093511161029b57806339509351146105eb5780633bd5d1731461060b5780634549b0391461062b57806349bd5a5e1461064b57600080fd5b80632d83811914610589578063313ce567146105a95780633685d419146105cb57600080fd5b806318160ddd1161032e57806323b872dd1161030857806323b872dd1461050f57806327a14fc21461052f5780632a6c7dba1461054f5780632ba86bf21461056f57600080fd5b806318160ddd146104a857806318d9ceae146104bd57806321a9d82a146104f557600080fd5b8063142725fc1161036a578063142725fc14610417578063150c880c1461042d5780631529fbbf1461044f5780631694505e1461047057600080fd5b80630105d0fd1461039c57806306fdde03146103c5578063095ea7b3146103e757600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b260225481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b506103da610b0c565b6040516103bc9190613884565b3480156103f357600080fd5b506104076104023660046138e7565b610b9e565b60405190151581526020016103bc565b34801561042357600080fd5b506103b260115481565b34801561043957600080fd5b5061044d610448366004613921565b610bb5565b005b34801561045b57600080fd5b50601b5461040790600160a01b900460ff1681565b34801561047c57600080fd5b50601d54610490906001600160a01b031681565b6040516001600160a01b0390911681526020016103bc565b3480156104b457600080fd5b50600b546103b2565b3480156104c957600080fd5b506104076104d836600461395a565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561050157600080fd5b506025546104079060ff1681565b34801561051b57600080fd5b5061040761052a366004613977565b610c85565b34801561053b57600080fd5b5061044d61054a3660046139b8565b610cd7565b34801561055b57600080fd5b5061044d61056a3660046139d1565b610ded565b34801561057b57600080fd5b506021546104079060ff1681565b34801561059557600080fd5b506103b26105a43660046139b8565b610ecc565b3480156105b557600080fd5b5060095460405160ff90911681526020016103bc565b3480156105d757600080fd5b5061044d6105e636600461395a565b610f50565b3480156105f757600080fd5b506104076106063660046138e7565b611106565b34801561061757600080fd5b5061044d6106263660046139b8565b61113d565b34801561063757600080fd5b506103b26106463660046139ee565b61122b565b34801561065757600080fd5b50601e54610490906001600160a01b031681565b34801561067757600080fd5b50601e5461040790600160b01b900460ff1681565b34801561069857600080fd5b506103b260105481565b3480156106ae57600080fd5b5061044d6106bd36600461395a565b6112ba565b3480156106ce57600080fd5b506104076106dd36600461395a565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561070757600080fd5b5061044d6107163660046139d1565b61140d565b34801561072757600080fd5b5061044d6107363660046139d1565b611517565b34801561074757600080fd5b506103b260235481565b34801561075d57600080fd5b506103b260125481565b34801561077357600080fd5b506103b2600f5481565b34801561078957600080fd5b506103b260135481565b34801561079f57600080fd5b50601e5461040790600160a81b900460ff1681565b3480156107c057600080fd5b506103b26107cf36600461395a565b6115fb565b3480156107e057600080fd5b5061044d61165a565b3480156107f557600080fd5b50601b54610490906001600160a01b031681565b34801561081557600080fd5b5061040761082436600461395a565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561084e57600080fd5b5061044d6116ce565b34801561086357600080fd5b506000546001600160a01b0316610490565b34801561088157600080fd5b506103b2600e5481565b34801561089757600080fd5b506103da611767565b3480156108ac57600080fd5b506103b260155481565b3480156108c257600080fd5b506104076108d13660046138e7565b611776565b3480156108e257600080fd5b506104076108f136600461395a565b6001600160a01b031660009081526024602052604090205460ff1690565b34801561091b57600080fd5b5061040761092a3660046138e7565b6117ad565b34801561093b57600080fd5b506103b260145481565b34801561095157600080fd5b506103b260265481565b34801561096757600080fd5b5061044d6109763660046139b8565b6117ba565b34801561098757600080fd5b50600d546103b2565b34801561099c57600080fd5b5061044d6109ab366004613a13565b6118a4565b3480156109bc57600080fd5b5061044d6109cb36600461395a565b611a33565b3480156109dc57600080fd5b5061044d6109eb366004613921565b611b7c565b3480156109fc57600080fd5b5061044d610a0b366004613921565b611c81565b348015610a1c57600080fd5b506103b2610a2b366004613a35565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a6257600080fd5b5061044d610a713660046139d1565b611d9b565b348015610a8257600080fd5b506103b2601f5481565b348015610a9857600080fd5b5061044d610aa7366004613a63565b611e12565b348015610ab857600080fd5b5061044d610ac7366004613a63565b611f21565b348015610ad857600080fd5b5061044d610ae736600461395a565b612026565b348015610af857600080fd5b5061044d610b0736600461395a565b612110565b606060078054610b1b90613a95565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4790613a95565b8015610b945780601f10610b6957610100808354040283529160200191610b94565b820191906000526020600020905b815481529060010190602001808311610b7757829003601f168201915b5050505050905090565b6000610bab338484612292565b5060015b92915050565b6000546001600160a01b03163314610be85760405162461bcd60e51b8152600401610bdf90613acf565b60405180910390fd5b6001600160a01b038216600090815260208052604090205481151560ff909116151503610c275760405162461bcd60e51b8152600401610bdf90613b04565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b6000610c928484846123b6565b6001600160a01b038416600090815260036020908152604080832033808552925290912054610ccd918691610cc8908690613b5e565b612292565b5060019392505050565b6000546001600160a01b03163314610d015760405162461bcd60e51b8152600401610bdf90613acf565b6064610d0f60095460ff1690565b610d1a90600a613c55565b600b54610d279190613c64565b610d319190613c64565b811015610d965760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060448201526c6c6f776572207468616e20312560981b6064820152608401610bdf565b60095460ff16610da790600a613c55565b610db19082613c86565b60268190556040519081527f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942906020015b60405180910390a150565b6000546001600160a01b03163314610e175760405162461bcd60e51b8152600401610bdf90613acf565b60255460ff16151581151503610e855760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060448201526c746f207468617420737461746560981b6064820152608401610bdf565b6025805460ff191682151590811790915560405160ff909116151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f190602001610de2565b6000600c54821115610f335760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bdf565b6000610f3d612811565b9050610f498184613c64565b9392505050565b6000546001600160a01b03163314610f7a5760405162461bcd60e51b8152600401610bdf90613acf565b6001600160a01b03811660009081526005602052604090205460ff16610fe25760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610bdf565b60005b60065481101561110257816001600160a01b03166006828154811061100c5761100c613c9d565b6000918252602090912001546001600160a01b0316036110f0576006805461103690600190613b5e565b8154811061104657611046613c9d565b600091825260209091200154600680546001600160a01b03909216918390811061107257611072613c9d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560068054806110ca576110ca613cb3565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110fa81613cc9565b915050610fe5565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610bab918590610cc8908690613ce2565b3360008181526005602052604090205460ff16156111b25760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610bdf565b60006111bd83612834565b505050506001600160a01b0385166000908152600160205260409020549293506111eb928492509050613b5e565b6001600160a01b038316600090815260016020526040902055600c54611212908290613b5e565b600c55600d54611223908490613ce2565b600d55505050565b6000600a5483111561127f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bdf565b8161129f57600061128f84612834565b50949650610baf95505050505050565b60006112aa84612834565b50939650610baf95505050505050565b6000546001600160a01b031633146112e45760405162461bcd60e51b8152600401610bdf90613acf565b6001600160a01b03811660009081526005602052604090205460ff161561134d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bdf565b6001600160a01b038116600090815260016020526040902054156113a7576001600160a01b03811660009081526001602052604090205461138d90610ecc565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146114375760405162461bcd60e51b8152600401610bdf90613acf565b801515601b60149054906101000a900460ff161515036114ca5760405162461bcd60e51b815260206004820152604260248201527f57616c6c657420746f2077616c6c6574207472616e7366657220776974686f7560448201527f742066656520697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a401610bdf565b601b8054821515600160a01b0260ff60a01b199091161790556040517f77c1f4015c54df9478a364bf8fc1b76b03f0eda36c594de58b4023771cebb9e790610de290831515815260200190565b6000546001600160a01b031633146115415760405162461bcd60e51b8152600401610bdf90613acf565b60215460ff161515811515036115b45760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c72656164796044820152712073657420746f207468617420737461746560701b6064820152608401610bdf565b6021805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf90602001610de2565b6001600160a01b03811660009081526005602052604081205460ff161561163857506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610baf90610ecc565b6000546001600160a01b031633146116845760405162461bcd60e51b8152600401610bdf90613acf565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116f85760405162461bcd60e51b8152600401610bdf90613acf565b601e54600160b01b900460ff16156117525760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610bdf565b601e805460ff60b01b1916600160b01b179055565b606060088054610b1b90613a95565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610bab918590610cc8908690613b5e565b6000610bab3384846123b6565b6000546001600160a01b031633146117e45760405162461bcd60e51b8152600401610bdf90613acf565b620186a06117f1600b5490565b6117fb9190613c64565b811161186f5760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c7900006064820152608401610bdf565b601f8190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610de2565b6000546001600160a01b031633146118ce5760405162461bcd60e51b8152600401610bdf90613acf565b6103e86118dd60095460ff1690565b6118e890600a613c55565b600b546118f59190613c64565b6118ff9190613c64565b821015801561193e57506103e861191860095460ff1690565b61192390600a613c55565b600b546119309190613c64565b61193a9190613c64565b8110155b6119b05760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060448201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c79006064820152608401610bdf565b60095460ff166119c190600a613c55565b6119cb9083613c86565b60225560095460ff166119df90600a613c55565b6119e99082613c86565b60238190556022546040517f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb13192611a27928252602082015260400190565b60405180910390a15050565b6000546001600160a01b03163314611a5d5760405162461bcd60e51b8152600401610bdf90613acf565b601b546001600160a01b0390811690821603611acc5760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610bdf565b6001600160a01b038116611b2e5760405162461bcd60e51b8152602060048201526024808201527f4d61726b6574696e672077616c6c657420697320746865207a65726f206164646044820152637265737360e01b6064820152608401610bdf565b601b80546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610de2565b6000546001600160a01b03163314611ba65760405162461bcd60e51b8152600401610bdf90613acf565b6001600160a01b03821660009081526004602052604090205481151560ff909116151503611c295760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610bdf565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610c79565b6000546001600160a01b03163314611cab5760405162461bcd60e51b8152600401610bdf90613acf565b6001600160a01b03821660009081526024602052604090205481151560ff909116151503611ceb5760405162461bcd60e51b8152600401610bdf90613b04565b306001600160a01b03831603611d435760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e0000000000000000006044820152606401610bdf565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c9101610c79565b6000546001600160a01b03163314611dc55760405162461bcd60e51b8152600401610bdf90613acf565b601e8054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610de290831515815260200190565b6000546001600160a01b03163314611e3c5760405162461bcd60e51b8152600401610bdf90613acf565b600e8490556010839055601282905560148190558082611e5c8587613ce2565b611e669190613ce2565b611e709190613ce2565b601981905560641015611ed15760405162461bcd60e51b815260206004820152602360248201527f42757920666565732063616e6e6f742062652067726561746572207468616e2060448201526231302560e81b6064820152608401610bdf565b600e54601054601254604080519384526020840192909252908201527ff12a090a464a491e1614a62b7d86a6f8d3fae25361d5af0911f39bd4fd7ea64d906060015b60405180910390a150505050565b6000546001600160a01b03163314611f4b5760405162461bcd60e51b8152600401610bdf90613acf565b600f8490556011839055601382905560158190558082611f6b8587613ce2565b611f759190613ce2565b611f7f9190613ce2565b601a81905560641015611fe05760405162461bcd60e51b8152602060048201526024808201527f53656c6c20666565732063616e6e6f742062652067726561746572207468616e6044820152632031302560e01b6064820152608401610bdf565b600f54601154601354604080519384526020840192909252908201527f969e8ecd326f5fe41e2a3cd9798553fbecef5705da23954426a09c9360c7aa5790606001611f13565b6000546001600160a01b031633146120505760405162461bcd60e51b8152600401610bdf90613acf565b6001600160a01b0381166120b55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bdf565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461213a5760405162461bcd60e51b8152600401610bdf90613acf565b306001600160a01b038216036121925760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610bdf565b6001600160a01b0381166121aa57611102334761288f565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156121f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122179190613cf5565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015612267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228b9190613d0e565b5050505b50565b6001600160a01b0383166122f45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bdf565b6001600160a01b0382166123555760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bdf565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661241a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bdf565b6000811161247c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bdf565b6001600160a01b03831660009081526004602052604090205460ff161580156124be57506001600160a01b03821660009081526004602052604090205460ff16155b1561251c57601e54600160b01b900460ff1661251c5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420656e61626c6564207965740000000000006044820152606401610bdf565b60215460ff16156125fc57601e546001600160a01b03848116911614806125505750601e546001600160a01b038381169116145b801561257457506001600160a01b038316600090815260208052604090205460ff16155b801561259857506001600160a01b038216600090815260208052604090205460ff16155b156125fc57601e546001600160a01b03908116908416036125da576022548111156125d55760405162461bcd60e51b8152600401610bdf90613d2b565b6125fc565b6023548111156125fc5760405162461bcd60e51b8152600401610bdf90613d2b565b6000612607306115fb565b601f54909150811080159081906126285750601e54600160a01b900460ff16155b80156126415750601e546001600160a01b038581169116145b80156126565750601e54600160a81b900460ff165b1561270f57601e805460ff60a01b1916600160a01b17905560135460125460009161268091613ce2565b905060006011546010546126949190613ce2565b905060006126a28284613ce2565b905080156126fe5781156126d4576000816126bd8488613c86565b6126c79190613c64565b90506126d28161293e565b505b82156126fe576000816126e78588613c86565b6126f19190613c64565b90506126fc81612b8c565b505b5050601e805460ff60a01b19169055505b61271a858585612d2b565b60255460ff161561280a576001600160a01b03851660009081526024602052604090205460ff1615801561276757506001600160a01b03841660009081526024602052604090205460ff16155b80156127815750601e546001600160a01b03858116911614155b1561280a576000612791856115fb565b6026549091506127a18583613ce2565b11156128085760405162461bcd60e51b815260206004820152603060248201527f4d617857616c6c65743a20526563697069656e7420657863656564732074686560448201526f081b585e15d85b1b195d105b5bdd5b9d60821b6064820152608401610bdf565b505b5050505050565b600080600061281e612f2e565b909250905061282d8183613c64565b9250505090565b600080600080600080600080600080600061284e8c6130b1565b9350935093509350600080600061286f8f87878761286a612811565b613110565b919f509d509b509599509397509195509350505050919395979092949650565b6000814710156128e15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610bdf565b6000836001600160a01b03168360405160006040518083038185875af1925050503d806000811461292e576040519150601f19603f3d011682016040523d82523d6000602084013e612933565b606091505b509095945050505050565b600061294b600283613c64565b905060006129598284613b5e565b6040805160028082526060820183529293504792600092602083019080368337019050509050308160008151811061299357612993613c9d565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156129ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a109190613d88565b81600181518110612a2357612a23613c9d565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b815291169063791ac94790612a69908790600090869030904290600401613da5565b600060405180830381600087803b158015612a8357600080fd5b505af1158015612a97573d6000803e3d6000fd5b5050505060008247612aa99190613b5e565b601d54601c5460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c40160606040518083038185885af1158015612b1b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b409190613e16565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b604080516002808252606082018352479260009291906020830190803683370190505090503081600081518110612bc557612bc5613c9d565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c429190613d88565b81600181518110612c5557612c55613c9d565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b815291169063791ac94790612c9b908690600090869030904290600401613da5565b600060405180830381600087803b158015612cb557600080fd5b505af1158015612cc9573d6000803e3d6000fd5b5050505060008247612cdb9190613b5e565b601b54909150612cf4906001600160a01b03168261288f565b5060408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629999101611f13565b6001600160a01b03831660009081526004602052604090205460ff1680612d6a57506001600160a01b03821660009081526004602052604090205460ff165b15612d7c57612d77613182565b612dda565b601e546001600160a01b0390811690831603612d9a57612d776131b6565b601e546001600160a01b0390811690841603612db857612d77613210565b601b54600160a01b900460ff1615612dd257612d77613182565b612dda6131b6565b6001600160a01b03831660009081526005602052604090205460ff168015612e1b57506001600160a01b03821660009081526005602052604090205460ff16155b15612e3057612e2b838383613265565b505050565b6001600160a01b03831660009081526005602052604090205460ff16158015612e7157506001600160a01b03821660009081526005602052604090205460ff165b15612e8157612e2b8383836133a6565b6001600160a01b03831660009081526005602052604090205460ff16158015612ec357506001600160a01b03821660009081526005602052604090205460ff16155b15612ed357612e2b838383613460565b6001600160a01b03831660009081526005602052604090205460ff168015612f1357506001600160a01b03821660009081526005602052604090205460ff165b15612f2357612e2b8383836134b3565b612e2b838383613460565b600c54600a546000918291825b60065481101561308057826001600060068481548110612f5d57612f5d613c9d565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612fc85750816002600060068481548110612fa157612fa1613c9d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612fde57600c54600a54945094505050509091565b6001600060068381548110612ff557612ff5613c9d565b60009182526020808320909101546001600160a01b031683528201929092526040019020546130249084613b5e565b9250600260006006838154811061303d5761303d613c9d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461306c9083613b5e565b91508061307881613cc9565b915050612f3b565b50600a54600c546130919190613c64565b8210156130a857600c54600a549350935050509091565b90939092509050565b60008060008060006130c286613536565b905060006130cf87613553565b905060006130dc88613566565b9050600081836130ec868c613b5e565b6130f69190613b5e565b6131009190613b5e565b9993985091965094509092505050565b600080808061311f858a613c86565b9050600061312d868a613c86565b9050600061313b878a613c86565b90506000613149888a613c86565b9050600081836131598688613b5e565b6131639190613b5e565b61316d9190613b5e565b949d949c50929a509298505050505050505050565b6016541580156131925750601754155b801561319e5750601854155b156131a557565b600060168190556018819055601755565b600f546016541480156131d957506015546011546131d49190613ce2565b601754145b80156131e85750601354601854145b156131ef57565b600f5460165560135460185560155460115461320b9190613ce2565b601755565b600e54601654148015613233575060145460105461322e9190613ce2565b601754145b80156132425750601254601854145b1561324957565b600e5460165560125460185560145460105461320b9190613ce2565b600080600080600080600061327988612834565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b03168152602001908152602001600020546132b89190613b5e565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546132e8908890613b5e565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054613318908790613ce2565b6001600160a01b038a1660009081526001602052604090205561333a81613579565b61334382613609565b61334d858461385e565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161339291815260200190565b60405180910390a350505050505050505050565b60008060008060008060006133ba88612834565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b03168152602001908152602001600020546133f99190613b5e565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054613430908590613ce2565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054613318908790613ce2565b600080600080600080600061347488612834565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b03168152602001908152602001600020546132e89190613b5e565b60008060008060008060006134c788612834565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b03168152602001908152602001600020546135069190613b5e565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546133f9908890613b5e565b60006103e8601654836135499190613c86565b610baf9190613c64565b60006103e8601754836135499190613c86565b60006103e8601854836135499190613c86565b801561228f576000613589612811565b905060006135978284613c86565b306000908152600160205260409020549091506135b5908290613ce2565b3060009081526001602090815260408083209390935560059052205460ff1615612e2b57306000908152600260205260409020546135f4908490613ce2565b30600090815260026020526040902055505050565b60008060006015546014546011546010546136249190613ce2565b61362e9190613ce2565b6136389190613ce2565b111561369b576015546014546011546010546136549190613ce2565b61365e9190613ce2565b6136689190613ce2565b6011546010546136789190613ce2565b6136829085613c86565b61368c9190613c64565b91506136988284613b5e565b90505b811561372a5760006136ab612811565b905060006136b98285613c86565b306000908152600160205260409020549091506136d7908290613ce2565b3060009081526001602090815260408083209390935560059052205460ff16156137275730600090815260026020526040902054613716908590613ce2565b306000908152600260205260409020555b50505b8015612e2b57600061373a612811565b905060006137488284613c86565b61dead60005260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54909150613783908290613ce2565b61dead6000527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5560056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba5460ff16156138405761dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc54613812908490613ce2565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc555b82600b60008282546138529190613b5e565b90915550505050505050565b81600c5461386c9190613b5e565b600c55600d5461387d908290613ce2565b600d555050565b600060208083528351808285015260005b818110156138b157858101830151858201604001528201613895565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461228f57600080fd5b600080604083850312156138fa57600080fd5b8235613905816138d2565b946020939093013593505050565b801515811461228f57600080fd5b6000806040838503121561393457600080fd5b823561393f816138d2565b9150602083013561394f81613913565b809150509250929050565b60006020828403121561396c57600080fd5b8135610f49816138d2565b60008060006060848603121561398c57600080fd5b8335613997816138d2565b925060208401356139a7816138d2565b929592945050506040919091013590565b6000602082840312156139ca57600080fd5b5035919050565b6000602082840312156139e357600080fd5b8135610f4981613913565b60008060408385031215613a0157600080fd5b82359150602083013561394f81613913565b60008060408385031215613a2657600080fd5b50508035926020909101359150565b60008060408385031215613a4857600080fd5b8235613a53816138d2565b9150602083013561394f816138d2565b60008060008060808587031215613a7957600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680613aa957607f821691505b602082108103613ac957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526024908201527f4163636f756e7420697320616c72656164792073657420746f207468617420736040820152637461746560e01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610baf57610baf613b48565b600181815b80851115613bac578160001904821115613b9257613b92613b48565b80851615613b9f57918102915b93841c9390800290613b76565b509250929050565b600082613bc357506001610baf565b81613bd057506000610baf565b8160018114613be65760028114613bf057613c0c565b6001915050610baf565b60ff841115613c0157613c01613b48565b50506001821b610baf565b5060208310610133831016604e8410600b8410161715613c2f575081810a610baf565b613c398383613b71565b8060001904821115613c4d57613c4d613b48565b029392505050565b6000610f4960ff841683613bb4565b600082613c8157634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610baf57610baf613b48565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201613cdb57613cdb613b48565b5060010190565b80820180821115610baf57610baf613b48565b600060208284031215613d0757600080fd5b5051919050565b600060208284031215613d2057600080fd5b8151610f4981613913565b6020808252603b908201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000606082015260800190565b600060208284031215613d9a57600080fd5b8151610f49816138d2565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613df55784516001600160a01b031683529383019391830191600101613dd0565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613e2b57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f5209c98b7246417bfa46f99c131e26ac90eee06eb6e5cf99d59a59376deef1064736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103905760003560e01c80635f35bc5c116101dc578063a938d1c911610102578063d2fcc001116100a0578063e3b467911161006f578063e3b4679114610a8c578063e982f35114610aac578063f2fde38b14610acc578063f9d0831a14610aec57600080fd5b8063d2fcc001146109f0578063dd62ed3e14610a10578063e01af92c14610a56578063e2f4560514610a7657600080fd5b8063b577554a116100dc578063b577554a1461097b578063b6f7f68114610990578063bb85c6d1146109b0578063c0246668146109d057600080fd5b8063a938d1c91461092f578063aa4bde2814610945578063afa4f3b21461095b57600080fd5b80638a8c523c1161017a578063989a124f11610149578063989a124f146108a0578063a457c2d7146108b6578063a8a69b9d146108d6578063a9059cbb1461090f57600080fd5b80638a8c523c146108425780638da5cb5b1461085757806393a7781f1461087557806395d89b411461088b57600080fd5b806370a08231116101b657806370a08231146107b4578063715018a6146107d457806375f0a874146107e957806388f820201461080957600080fd5b80635f35bc5c1461076757806365a8ee4f1461077d5780636ddd17131461079357600080fd5b80632d838119116102c15780634ada218b1161025f5780635654d0b31161022e5780635654d0b3146106fb57806356a6cabf1461071b57806359136fa51461073b5780635a04e0351461075157600080fd5b80634ada218b1461066b5780634b93d0591461068c57806352390c02146106a25780635342acb4146106c257600080fd5b8063395093511161029b57806339509351146105eb5780633bd5d1731461060b5780634549b0391461062b57806349bd5a5e1461064b57600080fd5b80632d83811914610589578063313ce567146105a95780633685d419146105cb57600080fd5b806318160ddd1161032e57806323b872dd1161030857806323b872dd1461050f57806327a14fc21461052f5780632a6c7dba1461054f5780632ba86bf21461056f57600080fd5b806318160ddd146104a857806318d9ceae146104bd57806321a9d82a146104f557600080fd5b8063142725fc1161036a578063142725fc14610417578063150c880c1461042d5780631529fbbf1461044f5780631694505e1461047057600080fd5b80630105d0fd1461039c57806306fdde03146103c5578063095ea7b3146103e757600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b260225481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b506103da610b0c565b6040516103bc9190613884565b3480156103f357600080fd5b506104076104023660046138e7565b610b9e565b60405190151581526020016103bc565b34801561042357600080fd5b506103b260115481565b34801561043957600080fd5b5061044d610448366004613921565b610bb5565b005b34801561045b57600080fd5b50601b5461040790600160a01b900460ff1681565b34801561047c57600080fd5b50601d54610490906001600160a01b031681565b6040516001600160a01b0390911681526020016103bc565b3480156104b457600080fd5b50600b546103b2565b3480156104c957600080fd5b506104076104d836600461395a565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561050157600080fd5b506025546104079060ff1681565b34801561051b57600080fd5b5061040761052a366004613977565b610c85565b34801561053b57600080fd5b5061044d61054a3660046139b8565b610cd7565b34801561055b57600080fd5b5061044d61056a3660046139d1565b610ded565b34801561057b57600080fd5b506021546104079060ff1681565b34801561059557600080fd5b506103b26105a43660046139b8565b610ecc565b3480156105b557600080fd5b5060095460405160ff90911681526020016103bc565b3480156105d757600080fd5b5061044d6105e636600461395a565b610f50565b3480156105f757600080fd5b506104076106063660046138e7565b611106565b34801561061757600080fd5b5061044d6106263660046139b8565b61113d565b34801561063757600080fd5b506103b26106463660046139ee565b61122b565b34801561065757600080fd5b50601e54610490906001600160a01b031681565b34801561067757600080fd5b50601e5461040790600160b01b900460ff1681565b34801561069857600080fd5b506103b260105481565b3480156106ae57600080fd5b5061044d6106bd36600461395a565b6112ba565b3480156106ce57600080fd5b506104076106dd36600461395a565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561070757600080fd5b5061044d6107163660046139d1565b61140d565b34801561072757600080fd5b5061044d6107363660046139d1565b611517565b34801561074757600080fd5b506103b260235481565b34801561075d57600080fd5b506103b260125481565b34801561077357600080fd5b506103b2600f5481565b34801561078957600080fd5b506103b260135481565b34801561079f57600080fd5b50601e5461040790600160a81b900460ff1681565b3480156107c057600080fd5b506103b26107cf36600461395a565b6115fb565b3480156107e057600080fd5b5061044d61165a565b3480156107f557600080fd5b50601b54610490906001600160a01b031681565b34801561081557600080fd5b5061040761082436600461395a565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561084e57600080fd5b5061044d6116ce565b34801561086357600080fd5b506000546001600160a01b0316610490565b34801561088157600080fd5b506103b2600e5481565b34801561089757600080fd5b506103da611767565b3480156108ac57600080fd5b506103b260155481565b3480156108c257600080fd5b506104076108d13660046138e7565b611776565b3480156108e257600080fd5b506104076108f136600461395a565b6001600160a01b031660009081526024602052604090205460ff1690565b34801561091b57600080fd5b5061040761092a3660046138e7565b6117ad565b34801561093b57600080fd5b506103b260145481565b34801561095157600080fd5b506103b260265481565b34801561096757600080fd5b5061044d6109763660046139b8565b6117ba565b34801561098757600080fd5b50600d546103b2565b34801561099c57600080fd5b5061044d6109ab366004613a13565b6118a4565b3480156109bc57600080fd5b5061044d6109cb36600461395a565b611a33565b3480156109dc57600080fd5b5061044d6109eb366004613921565b611b7c565b3480156109fc57600080fd5b5061044d610a0b366004613921565b611c81565b348015610a1c57600080fd5b506103b2610a2b366004613a35565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a6257600080fd5b5061044d610a713660046139d1565b611d9b565b348015610a8257600080fd5b506103b2601f5481565b348015610a9857600080fd5b5061044d610aa7366004613a63565b611e12565b348015610ab857600080fd5b5061044d610ac7366004613a63565b611f21565b348015610ad857600080fd5b5061044d610ae736600461395a565b612026565b348015610af857600080fd5b5061044d610b0736600461395a565b612110565b606060078054610b1b90613a95565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4790613a95565b8015610b945780601f10610b6957610100808354040283529160200191610b94565b820191906000526020600020905b815481529060010190602001808311610b7757829003601f168201915b5050505050905090565b6000610bab338484612292565b5060015b92915050565b6000546001600160a01b03163314610be85760405162461bcd60e51b8152600401610bdf90613acf565b60405180910390fd5b6001600160a01b038216600090815260208052604090205481151560ff909116151503610c275760405162461bcd60e51b8152600401610bdf90613b04565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b6000610c928484846123b6565b6001600160a01b038416600090815260036020908152604080832033808552925290912054610ccd918691610cc8908690613b5e565b612292565b5060019392505050565b6000546001600160a01b03163314610d015760405162461bcd60e51b8152600401610bdf90613acf565b6064610d0f60095460ff1690565b610d1a90600a613c55565b600b54610d279190613c64565b610d319190613c64565b811015610d965760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060448201526c6c6f776572207468616e20312560981b6064820152608401610bdf565b60095460ff16610da790600a613c55565b610db19082613c86565b60268190556040519081527f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942906020015b60405180910390a150565b6000546001600160a01b03163314610e175760405162461bcd60e51b8152600401610bdf90613acf565b60255460ff16151581151503610e855760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060448201526c746f207468617420737461746560981b6064820152608401610bdf565b6025805460ff191682151590811790915560405160ff909116151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f190602001610de2565b6000600c54821115610f335760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bdf565b6000610f3d612811565b9050610f498184613c64565b9392505050565b6000546001600160a01b03163314610f7a5760405162461bcd60e51b8152600401610bdf90613acf565b6001600160a01b03811660009081526005602052604090205460ff16610fe25760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610bdf565b60005b60065481101561110257816001600160a01b03166006828154811061100c5761100c613c9d565b6000918252602090912001546001600160a01b0316036110f0576006805461103690600190613b5e565b8154811061104657611046613c9d565b600091825260209091200154600680546001600160a01b03909216918390811061107257611072613c9d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560068054806110ca576110ca613cb3565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110fa81613cc9565b915050610fe5565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610bab918590610cc8908690613ce2565b3360008181526005602052604090205460ff16156111b25760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610bdf565b60006111bd83612834565b505050506001600160a01b0385166000908152600160205260409020549293506111eb928492509050613b5e565b6001600160a01b038316600090815260016020526040902055600c54611212908290613b5e565b600c55600d54611223908490613ce2565b600d55505050565b6000600a5483111561127f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bdf565b8161129f57600061128f84612834565b50949650610baf95505050505050565b60006112aa84612834565b50939650610baf95505050505050565b6000546001600160a01b031633146112e45760405162461bcd60e51b8152600401610bdf90613acf565b6001600160a01b03811660009081526005602052604090205460ff161561134d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bdf565b6001600160a01b038116600090815260016020526040902054156113a7576001600160a01b03811660009081526001602052604090205461138d90610ecc565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146114375760405162461bcd60e51b8152600401610bdf90613acf565b801515601b60149054906101000a900460ff161515036114ca5760405162461bcd60e51b815260206004820152604260248201527f57616c6c657420746f2077616c6c6574207472616e7366657220776974686f7560448201527f742066656520697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a401610bdf565b601b8054821515600160a01b0260ff60a01b199091161790556040517f77c1f4015c54df9478a364bf8fc1b76b03f0eda36c594de58b4023771cebb9e790610de290831515815260200190565b6000546001600160a01b031633146115415760405162461bcd60e51b8152600401610bdf90613acf565b60215460ff161515811515036115b45760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c72656164796044820152712073657420746f207468617420737461746560701b6064820152608401610bdf565b6021805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf90602001610de2565b6001600160a01b03811660009081526005602052604081205460ff161561163857506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610baf90610ecc565b6000546001600160a01b031633146116845760405162461bcd60e51b8152600401610bdf90613acf565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116f85760405162461bcd60e51b8152600401610bdf90613acf565b601e54600160b01b900460ff16156117525760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610bdf565b601e805460ff60b01b1916600160b01b179055565b606060088054610b1b90613a95565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610bab918590610cc8908690613b5e565b6000610bab3384846123b6565b6000546001600160a01b031633146117e45760405162461bcd60e51b8152600401610bdf90613acf565b620186a06117f1600b5490565b6117fb9190613c64565b811161186f5760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c7900006064820152608401610bdf565b601f8190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610de2565b6000546001600160a01b031633146118ce5760405162461bcd60e51b8152600401610bdf90613acf565b6103e86118dd60095460ff1690565b6118e890600a613c55565b600b546118f59190613c64565b6118ff9190613c64565b821015801561193e57506103e861191860095460ff1690565b61192390600a613c55565b600b546119309190613c64565b61193a9190613c64565b8110155b6119b05760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060448201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c79006064820152608401610bdf565b60095460ff166119c190600a613c55565b6119cb9083613c86565b60225560095460ff166119df90600a613c55565b6119e99082613c86565b60238190556022546040517f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb13192611a27928252602082015260400190565b60405180910390a15050565b6000546001600160a01b03163314611a5d5760405162461bcd60e51b8152600401610bdf90613acf565b601b546001600160a01b0390811690821603611acc5760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610bdf565b6001600160a01b038116611b2e5760405162461bcd60e51b8152602060048201526024808201527f4d61726b6574696e672077616c6c657420697320746865207a65726f206164646044820152637265737360e01b6064820152608401610bdf565b601b80546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610de2565b6000546001600160a01b03163314611ba65760405162461bcd60e51b8152600401610bdf90613acf565b6001600160a01b03821660009081526004602052604090205481151560ff909116151503611c295760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610bdf565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610c79565b6000546001600160a01b03163314611cab5760405162461bcd60e51b8152600401610bdf90613acf565b6001600160a01b03821660009081526024602052604090205481151560ff909116151503611ceb5760405162461bcd60e51b8152600401610bdf90613b04565b306001600160a01b03831603611d435760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e0000000000000000006044820152606401610bdf565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c9101610c79565b6000546001600160a01b03163314611dc55760405162461bcd60e51b8152600401610bdf90613acf565b601e8054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610de290831515815260200190565b6000546001600160a01b03163314611e3c5760405162461bcd60e51b8152600401610bdf90613acf565b600e8490556010839055601282905560148190558082611e5c8587613ce2565b611e669190613ce2565b611e709190613ce2565b601981905560641015611ed15760405162461bcd60e51b815260206004820152602360248201527f42757920666565732063616e6e6f742062652067726561746572207468616e2060448201526231302560e81b6064820152608401610bdf565b600e54601054601254604080519384526020840192909252908201527ff12a090a464a491e1614a62b7d86a6f8d3fae25361d5af0911f39bd4fd7ea64d906060015b60405180910390a150505050565b6000546001600160a01b03163314611f4b5760405162461bcd60e51b8152600401610bdf90613acf565b600f8490556011839055601382905560158190558082611f6b8587613ce2565b611f759190613ce2565b611f7f9190613ce2565b601a81905560641015611fe05760405162461bcd60e51b8152602060048201526024808201527f53656c6c20666565732063616e6e6f742062652067726561746572207468616e6044820152632031302560e01b6064820152608401610bdf565b600f54601154601354604080519384526020840192909252908201527f969e8ecd326f5fe41e2a3cd9798553fbecef5705da23954426a09c9360c7aa5790606001611f13565b6000546001600160a01b031633146120505760405162461bcd60e51b8152600401610bdf90613acf565b6001600160a01b0381166120b55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bdf565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461213a5760405162461bcd60e51b8152600401610bdf90613acf565b306001600160a01b038216036121925760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610bdf565b6001600160a01b0381166121aa57611102334761288f565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156121f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122179190613cf5565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015612267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228b9190613d0e565b5050505b50565b6001600160a01b0383166122f45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bdf565b6001600160a01b0382166123555760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bdf565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661241a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bdf565b6000811161247c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bdf565b6001600160a01b03831660009081526004602052604090205460ff161580156124be57506001600160a01b03821660009081526004602052604090205460ff16155b1561251c57601e54600160b01b900460ff1661251c5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420656e61626c6564207965740000000000006044820152606401610bdf565b60215460ff16156125fc57601e546001600160a01b03848116911614806125505750601e546001600160a01b038381169116145b801561257457506001600160a01b038316600090815260208052604090205460ff16155b801561259857506001600160a01b038216600090815260208052604090205460ff16155b156125fc57601e546001600160a01b03908116908416036125da576022548111156125d55760405162461bcd60e51b8152600401610bdf90613d2b565b6125fc565b6023548111156125fc5760405162461bcd60e51b8152600401610bdf90613d2b565b6000612607306115fb565b601f54909150811080159081906126285750601e54600160a01b900460ff16155b80156126415750601e546001600160a01b038581169116145b80156126565750601e54600160a81b900460ff165b1561270f57601e805460ff60a01b1916600160a01b17905560135460125460009161268091613ce2565b905060006011546010546126949190613ce2565b905060006126a28284613ce2565b905080156126fe5781156126d4576000816126bd8488613c86565b6126c79190613c64565b90506126d28161293e565b505b82156126fe576000816126e78588613c86565b6126f19190613c64565b90506126fc81612b8c565b505b5050601e805460ff60a01b19169055505b61271a858585612d2b565b60255460ff161561280a576001600160a01b03851660009081526024602052604090205460ff1615801561276757506001600160a01b03841660009081526024602052604090205460ff16155b80156127815750601e546001600160a01b03858116911614155b1561280a576000612791856115fb565b6026549091506127a18583613ce2565b11156128085760405162461bcd60e51b815260206004820152603060248201527f4d617857616c6c65743a20526563697069656e7420657863656564732074686560448201526f081b585e15d85b1b195d105b5bdd5b9d60821b6064820152608401610bdf565b505b5050505050565b600080600061281e612f2e565b909250905061282d8183613c64565b9250505090565b600080600080600080600080600080600061284e8c6130b1565b9350935093509350600080600061286f8f87878761286a612811565b613110565b919f509d509b509599509397509195509350505050919395979092949650565b6000814710156128e15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610bdf565b6000836001600160a01b03168360405160006040518083038185875af1925050503d806000811461292e576040519150601f19603f3d011682016040523d82523d6000602084013e612933565b606091505b509095945050505050565b600061294b600283613c64565b905060006129598284613b5e565b6040805160028082526060820183529293504792600092602083019080368337019050509050308160008151811061299357612993613c9d565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156129ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a109190613d88565b81600181518110612a2357612a23613c9d565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b815291169063791ac94790612a69908790600090869030904290600401613da5565b600060405180830381600087803b158015612a8357600080fd5b505af1158015612a97573d6000803e3d6000fd5b5050505060008247612aa99190613b5e565b601d54601c5460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c40160606040518083038185885af1158015612b1b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b409190613e16565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b604080516002808252606082018352479260009291906020830190803683370190505090503081600081518110612bc557612bc5613c9d565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c429190613d88565b81600181518110612c5557612c55613c9d565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b815291169063791ac94790612c9b908690600090869030904290600401613da5565b600060405180830381600087803b158015612cb557600080fd5b505af1158015612cc9573d6000803e3d6000fd5b5050505060008247612cdb9190613b5e565b601b54909150612cf4906001600160a01b03168261288f565b5060408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629999101611f13565b6001600160a01b03831660009081526004602052604090205460ff1680612d6a57506001600160a01b03821660009081526004602052604090205460ff165b15612d7c57612d77613182565b612dda565b601e546001600160a01b0390811690831603612d9a57612d776131b6565b601e546001600160a01b0390811690841603612db857612d77613210565b601b54600160a01b900460ff1615612dd257612d77613182565b612dda6131b6565b6001600160a01b03831660009081526005602052604090205460ff168015612e1b57506001600160a01b03821660009081526005602052604090205460ff16155b15612e3057612e2b838383613265565b505050565b6001600160a01b03831660009081526005602052604090205460ff16158015612e7157506001600160a01b03821660009081526005602052604090205460ff165b15612e8157612e2b8383836133a6565b6001600160a01b03831660009081526005602052604090205460ff16158015612ec357506001600160a01b03821660009081526005602052604090205460ff16155b15612ed357612e2b838383613460565b6001600160a01b03831660009081526005602052604090205460ff168015612f1357506001600160a01b03821660009081526005602052604090205460ff165b15612f2357612e2b8383836134b3565b612e2b838383613460565b600c54600a546000918291825b60065481101561308057826001600060068481548110612f5d57612f5d613c9d565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612fc85750816002600060068481548110612fa157612fa1613c9d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612fde57600c54600a54945094505050509091565b6001600060068381548110612ff557612ff5613c9d565b60009182526020808320909101546001600160a01b031683528201929092526040019020546130249084613b5e565b9250600260006006838154811061303d5761303d613c9d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461306c9083613b5e565b91508061307881613cc9565b915050612f3b565b50600a54600c546130919190613c64565b8210156130a857600c54600a549350935050509091565b90939092509050565b60008060008060006130c286613536565b905060006130cf87613553565b905060006130dc88613566565b9050600081836130ec868c613b5e565b6130f69190613b5e565b6131009190613b5e565b9993985091965094509092505050565b600080808061311f858a613c86565b9050600061312d868a613c86565b9050600061313b878a613c86565b90506000613149888a613c86565b9050600081836131598688613b5e565b6131639190613b5e565b61316d9190613b5e565b949d949c50929a509298505050505050505050565b6016541580156131925750601754155b801561319e5750601854155b156131a557565b600060168190556018819055601755565b600f546016541480156131d957506015546011546131d49190613ce2565b601754145b80156131e85750601354601854145b156131ef57565b600f5460165560135460185560155460115461320b9190613ce2565b601755565b600e54601654148015613233575060145460105461322e9190613ce2565b601754145b80156132425750601254601854145b1561324957565b600e5460165560125460185560145460105461320b9190613ce2565b600080600080600080600061327988612834565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b03168152602001908152602001600020546132b89190613b5e565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546132e8908890613b5e565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054613318908790613ce2565b6001600160a01b038a1660009081526001602052604090205561333a81613579565b61334382613609565b61334d858461385e565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161339291815260200190565b60405180910390a350505050505050505050565b60008060008060008060006133ba88612834565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b03168152602001908152602001600020546133f99190613b5e565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054613430908590613ce2565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054613318908790613ce2565b600080600080600080600061347488612834565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b03168152602001908152602001600020546132e89190613b5e565b60008060008060008060006134c788612834565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b03168152602001908152602001600020546135069190613b5e565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546133f9908890613b5e565b60006103e8601654836135499190613c86565b610baf9190613c64565b60006103e8601754836135499190613c86565b60006103e8601854836135499190613c86565b801561228f576000613589612811565b905060006135978284613c86565b306000908152600160205260409020549091506135b5908290613ce2565b3060009081526001602090815260408083209390935560059052205460ff1615612e2b57306000908152600260205260409020546135f4908490613ce2565b30600090815260026020526040902055505050565b60008060006015546014546011546010546136249190613ce2565b61362e9190613ce2565b6136389190613ce2565b111561369b576015546014546011546010546136549190613ce2565b61365e9190613ce2565b6136689190613ce2565b6011546010546136789190613ce2565b6136829085613c86565b61368c9190613c64565b91506136988284613b5e565b90505b811561372a5760006136ab612811565b905060006136b98285613c86565b306000908152600160205260409020549091506136d7908290613ce2565b3060009081526001602090815260408083209390935560059052205460ff16156137275730600090815260026020526040902054613716908590613ce2565b306000908152600260205260409020555b50505b8015612e2b57600061373a612811565b905060006137488284613c86565b61dead60005260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54909150613783908290613ce2565b61dead6000527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5560056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba5460ff16156138405761dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc54613812908490613ce2565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc555b82600b60008282546138529190613b5e565b90915550505050505050565b81600c5461386c9190613b5e565b600c55600d5461387d908290613ce2565b600d555050565b600060208083528351808285015260005b818110156138b157858101830151858201604001528201613895565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461228f57600080fd5b600080604083850312156138fa57600080fd5b8235613905816138d2565b946020939093013593505050565b801515811461228f57600080fd5b6000806040838503121561393457600080fd5b823561393f816138d2565b9150602083013561394f81613913565b809150509250929050565b60006020828403121561396c57600080fd5b8135610f49816138d2565b60008060006060848603121561398c57600080fd5b8335613997816138d2565b925060208401356139a7816138d2565b929592945050506040919091013590565b6000602082840312156139ca57600080fd5b5035919050565b6000602082840312156139e357600080fd5b8135610f4981613913565b60008060408385031215613a0157600080fd5b82359150602083013561394f81613913565b60008060408385031215613a2657600080fd5b50508035926020909101359150565b60008060408385031215613a4857600080fd5b8235613a53816138d2565b9150602083013561394f816138d2565b60008060008060808587031215613a7957600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680613aa957607f821691505b602082108103613ac957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526024908201527f4163636f756e7420697320616c72656164792073657420746f207468617420736040820152637461746560e01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610baf57610baf613b48565b600181815b80851115613bac578160001904821115613b9257613b92613b48565b80851615613b9f57918102915b93841c9390800290613b76565b509250929050565b600082613bc357506001610baf565b81613bd057506000610baf565b8160018114613be65760028114613bf057613c0c565b6001915050610baf565b60ff841115613c0157613c01613b48565b50506001821b610baf565b5060208310610133831016604e8410600b8410161715613c2f575081810a610baf565b613c398383613b71565b8060001904821115613c4d57613c4d613b48565b029392505050565b6000610f4960ff841683613bb4565b600082613c8157634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610baf57610baf613b48565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201613cdb57613cdb613b48565b5060010190565b80820180821115610baf57610baf613b48565b600060208284031215613d0757600080fd5b5051919050565b600060208284031215613d2057600080fd5b8151610f4981613913565b6020808252603b908201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000606082015260800190565b600060208284031215613d9a57600080fd5b8151610f49816138d2565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613df55784516001600160a01b031683529383019391830191600101613dd0565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613e2b57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f5209c98b7246417bfa46f99c131e26ac90eee06eb6e5cf99d59a59376deef1064736f6c63430008110033

Deployed Bytecode Sourcemap

12996:30079:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39603:39;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;39603:39:0;;;;;;;;18249:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19167:161::-;;;;;;;;;;-1:-1:-1;19167:161:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;19167:161:0;1205:187:1;13953:33:0;;;;;;;;;;;;;;;;41012:364;;;;;;;;;;-1:-1:-1;41012:364:0;;;;;:::i;:::-;;:::i;:::-;;14363:44;;;;;;;;;;-1:-1:-1;14363:44:0;;;;-1:-1:-1;;;14363:44:0;;;;;;14494:42;;;;;;;;;;-1:-1:-1;14494:42:0;;;;-1:-1:-1;;;;;14494:42:0;;;;;;-1:-1:-1;;;;;2098:32:1;;;2080:51;;2068:2;2053:18;14494:42:0;1907:230:1;18526:101:0;;;;;;;;;;-1:-1:-1;18606:13:0;;18526:101;;41384:141;;;;;;;;;;-1:-1:-1;41384:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;41483:34:0;41459:4;41483:34;;;:25;:34;;;;;;;;;41384:141;41602:36;;;;;;;;;;-1:-1:-1;41602:36:0;;;;;;;;19336:266;;;;;;;;;;-1:-1:-1;19336:266:0;;;;;:::i;:::-;;:::i;42180:340::-;;;;;;;;;;-1:-1:-1;42180:340:0;;;;;:::i;:::-;;:::i;41892:280::-;;;;;;;;;;-1:-1:-1;41892:280:0;;;;;:::i;:::-;;:::i;39554:42::-;;;;;;;;;;-1:-1:-1;39554:42:0;;;;;;;;21129:250;;;;;;;;;;-1:-1:-1;21129:250:0;;;;;:::i;:::-;;:::i;18435:83::-;;;;;;;;;;-1:-1:-1;18501:9:0;;18435:83;;18501:9;;;;3428:36:1;;3416:2;3401:18;18435:83:0;3286:184:1;21728:479:0;;;;;;;;;;-1:-1:-1;21728:479:0;;;;;:::i;:::-;;:::i;19610:215::-;;;;;;;;;;-1:-1:-1;19610:215:0;;;;;:::i;:::-;;:::i;20306:369::-;;;;;;;;;;-1:-1:-1;20306:369:0;;;;;:::i;:::-;;:::i;20683:438::-;;;;;;;;;;-1:-1:-1;20683:438:0;;;;;:::i;:::-;;:::i;14543:29::-;;;;;;;;;;-1:-1:-1;14543:29:0;;;;-1:-1:-1;;;;;14543:29:0;;;14647:26;;;;;;;;;;-1:-1:-1;14647:26:0;;;;-1:-1:-1;;;14647:26:0;;;;;;13914:32;;;;;;;;;;;;;;;;21387:333;;;;;;;;;;-1:-1:-1;21387:333:0;;;;;:::i;:::-;;:::i;27920:124::-;;;;;;;;;;-1:-1:-1;27920:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;28008:28:0;27984:4;28008:28;;;:19;:28;;;;;;;;;27920:124;39146:335;;;;;;;;;;-1:-1:-1;39146:335:0;;;;;:::i;:::-;;:::i;39968:347::-;;;;;;;;;;-1:-1:-1;39968:347:0;;;;;:::i;:::-;;:::i;39649:40::-;;;;;;;;;;;;;;;;13995:32;;;;;;;;;;;;;;;;13878:27;;;;;;;;;;;;;;;;14034:33;;;;;;;;;;;;;;;;14617:23;;;;;;;;;;-1:-1:-1;14617:23:0;;;;-1:-1:-1;;;14617:23:0;;;;;;18635:198;;;;;;;;;;-1:-1:-1;18635:198:0;;;;;:::i;:::-;;:::i;1112:148::-;;;;;;;;;;;;;:::i;14324:30::-;;;;;;;;;;-1:-1:-1;14324:30:0;;;;-1:-1:-1;;;;;14324:30:0;;;20066:120;;;;;;;;;;-1:-1:-1;20066:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20158:20:0;20134:4;20158:20;;;:11;:20;;;;;;;;;20066:120;28397:156;;;;;;;;;;;;;:::i;898:79::-;;;;;;;;;;-1:-1:-1;936:7:0;963:6;-1:-1:-1;;;;;963:6:0;898:79;;13845:26;;;;;;;;;;;;;;;;18340:87;;;;;;;;;;;;;:::i;14110:28::-;;;;;;;;;;;;;;;;19833:225;;;;;;;;;;-1:-1:-1;19833:225:0;;;;;:::i;:::-;;:::i;42927:145::-;;;;;;;;;;-1:-1:-1;42927:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;43026:38:0;43002:4;43026:38;;;:29;:38;;;;;;;;;42927:145;18841:167;;;;;;;;;;-1:-1:-1;18841:167:0;;;;;:::i;:::-;;:::i;14076:27::-;;;;;;;;;;;;;;;;41645:30;;;;;;;;;;;;;;;;33148:289;;;;;;;;;;-1:-1:-1;33148:289:0;;;;;:::i;:::-;;:::i;20194:104::-;;;;;;;;;;-1:-1:-1;20280:10:0;;20194:104;;40323:681;;;;;;;;;;-1:-1:-1;40323:681:0;;;;;:::i;:::-;;:::i;37549:371::-;;;;;;;;;;-1:-1:-1;37549:371:0;;;;;:::i;:::-;;:::i;37245:292::-;;;;;;;;;;-1:-1:-1;37245:292:0;;;;;:::i;:::-;;:::i;42528:391::-;;;;;;;;;;-1:-1:-1;42528:391:0;;;;;:::i;:::-;;:::i;19016:143::-;;;;;;;;;;-1:-1:-1;19016:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19124:18:0;;;19097:7;19124:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19016:143;33449;;;;;;;;;;-1:-1:-1;33449:143:0;;;;;:::i;:::-;;:::i;14680:33::-;;;;;;;;;;;;;;;;37928:589;;;;;;;;;;-1:-1:-1;37928:589:0;;;;;:::i;:::-;;:::i;38525:613::-;;;;;;;;;;-1:-1:-1;38525:613:0;;;;;:::i;:::-;;:::i;1268:244::-;;;;;;;;;;-1:-1:-1;1268:244:0;;;;;:::i;:::-;;:::i;22252:442::-;;;;;;;;;;-1:-1:-1;22252:442:0;;;;;:::i;:::-;;:::i;18249:83::-;18286:13;18319:5;18312:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18249:83;:::o;19167:161::-;19242:4;19259:39;302:10;19282:7;19291:6;19259:8;:39::i;:::-;-1:-1:-1;19316:4:0;19167:161;;;;;:::o;41012:364::-;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;41138:34:0;::::1;;::::0;;;:25:::1;:34:::0;;;;;;:45;::::1;;:34;::::0;;::::1;:45;;::::0;41116:132:::1;;;;-1:-1:-1::0;;;41116:132:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41259:34:0;::::1;;::::0;;;:25:::1;:34:::0;;;;;;;;:44;;-1:-1:-1;;41259:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41319:49;;1345:41:1;;;41319:49:0::1;::::0;1318:18:1;41319:49:0::1;;;;;;;;41012:364:::0;;:::o;19336:266::-;19434:4;19451:36;19461:6;19469:9;19480:6;19451:9;:36::i;:::-;-1:-1:-1;;;;;19529:19:0;;;;;;:11;:19;;;;;;;;302:10;19529:33;;;;;;;;;19498:74;;19507:6;;19529:42;;19565:6;;19529:42;:::i;:::-;19498:8;:74::i;:::-;-1:-1:-1;19590:4:0;19336:266;;;;;:::o;42180:340::-;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;42331:3:::1;42316:10;18501:9:::0;;;;;18435:83;42316:10:::1;42310:16;::::0;:2:::1;:16;:::i;:::-;18606:13:::0;;42293:34:::1;;;;:::i;:::-;42292:42;;;;:::i;:::-;42272:16;:62;;42264:120;;;::::0;-1:-1:-1;;;42264:120:0;;8256:2:1;42264:120:0::1;::::0;::::1;8238:21:1::0;8295:2;8275:18;;;8268:30;8334:34;8314:18;;;8307:62;-1:-1:-1;;;8385:18:1;;;8378:43;8438:19;;42264:120:0::1;8054:409:1::0;42264:120:0::1;18501:9:::0;;;;42433:16:::1;::::0;:2:::1;:16;:::i;:::-;42413:37;::::0;:16;:37:::1;:::i;:::-;42395:15;:55:::0;;;42468:44:::1;::::0;160:25:1;;;42468:44:0::1;::::0;148:2:1;133:18;42468:44:0::1;;;;;;;;42180:340:::0;:::o;41892:280::-;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;41986:21:::1;::::0;::::1;;41976:31;;::::0;::::1;;::::0;41968:88:::1;;;::::0;-1:-1:-1;;;41968:88:0;;8843:2:1;41968:88:0::1;::::0;::::1;8825:21:1::0;8882:2;8862:18;;;8855:30;8921:34;8901:18;;;8894:62;-1:-1:-1;;;8972:18:1;;;8965:43;9025:19;;41968:88:0::1;8641:409:1::0;41968:88:0::1;42067:21;:30:::0;;-1:-1:-1;;42067:30:0::1;::::0;::::1;;::::0;;::::1;::::0;;;42115:49:::1;::::0;42067:30:::1;42142:21:::0;;;1370:14:1;1363:22;1345:41;;42115:49:0::1;::::0;1333:2:1;1318:18;42115:49:0::1;1205:187:1::0;21129:250:0;21195:7;21234;;21223;:18;;21215:73;;;;-1:-1:-1;;;21215:73:0;;9257:2:1;21215:73:0;;;9239:21:1;9296:2;9276:18;;;9269:30;9335:34;9315:18;;;9308:62;-1:-1:-1;;;9386:18:1;;;9379:40;9436:19;;21215:73:0;9055:406:1;21215:73:0;21299:19;21322:10;:8;:10::i;:::-;21299:33;-1:-1:-1;21350:21:0;21299:33;21350:7;:21;:::i;:::-;21343:28;21129:250;-1:-1:-1;;;21129:250:0:o;21728:479::-;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21810:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21802:60;;;::::0;-1:-1:-1;;;21802:60:0;;9668:2:1;21802:60:0::1;::::0;::::1;9650:21:1::0;9707:2;9687:18;;;9680:30;9746:29;9726:18;;;9719:57;9793:18;;21802:60:0::1;9466:351:1::0;21802:60:0::1;21878:9;21873:327;21897:9;:16:::0;21893:20;::::1;21873:327;;;21955:7;-1:-1:-1::0;;;;;21939:23:0::1;:9;21949:1;21939:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21939:12:0::1;:23:::0;21935:254:::1;;21998:9;22008:16:::0;;:20:::1;::::0;22027:1:::1;::::0;22008:20:::1;:::i;:::-;21998:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;21983:9:::1;:12:::0;;-1:-1:-1;;;;;21998:31:0;;::::1;::::0;21993:1;;21983:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21983:46:0::1;-1:-1:-1::0;;;;;21983:46:0;;::::1;;::::0;;22048:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22087:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22087:28:0::1;::::0;;22134:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22134:15:0;;;;;-1:-1:-1;;;;;;22134:15:0::1;::::0;;;;;21873:327:::1;21728:479:::0;:::o;21935:254::-:1;21915:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21873:327;;;;21728:479:::0;:::o;19610:215::-;302:10;19698:4;19747:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19747:34:0;;;;;;;;;;19698:4;;19715:80;;19738:7;;19747:47;;19784:10;;19747:47;:::i;20306:369::-;302:10;20358:14;20407:19;;;:11;:19;;;;;;;;20406:20;20398:77;;;;-1:-1:-1;;;20398:77:0;;10558:2:1;20398:77:0;;;10540:21:1;10597:2;10577:18;;;10570:30;10636:34;10616:18;;;10609:62;-1:-1:-1;;;10687:18:1;;;10680:42;10739:19;;20398:77:0;10356:408:1;20398:77:0;20487:15;20512:19;20523:7;20512:10;:19::i;:::-;-1:-1:-1;;;;;;;;;20560:15:0;;;;;;:7;:15;;;;;;20486:45;;-1:-1:-1;20560:25:0;;20486:45;;-1:-1:-1;20560:15:0;-1:-1:-1;20560:25:0;:::i;:::-;-1:-1:-1;;;;;20542:15:0;;;;;;:7;:15;;;;;:43;20606:7;;:17;;20616:7;;20606:17;:::i;:::-;20596:7;:27;20647:10;;:20;;20660:7;;20647:20;:::i;:::-;20634:10;:33;-1:-1:-1;;;20306:369:0:o;20683:438::-;20773:7;20812;;20801;:18;;20793:62;;;;-1:-1:-1;;;20793:62:0;;10971:2:1;20793:62:0;;;10953:21:1;11010:2;10990:18;;;10983:30;11049:33;11029:18;;;11022:61;11100:18;;20793:62:0;10769:355:1;20793:62:0;20871:17;20866:248;;20906:15;20931:19;20942:7;20931:10;:19::i;:::-;-1:-1:-1;20905:45:0;;-1:-1:-1;20965:14:0;;-1:-1:-1;;;;;;20965:14:0;20866:248;21014:23;21046:19;21057:7;21046:10;:19::i;:::-;-1:-1:-1;21012:53:0;;-1:-1:-1;21080:22:0;;-1:-1:-1;;;;;;21080:22:0;21387:333;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21470:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21469:21;21461:61;;;::::0;-1:-1:-1;;;21461:61:0;;11331:2:1;21461:61:0::1;::::0;::::1;11313:21:1::0;11370:2;11350:18;;;11343:30;11409:29;11389:18;;;11382:57;11456:18;;21461:61:0::1;11129:351:1::0;21461:61:0::1;-1:-1:-1::0;;;;;21536:16:0;::::1;21555:1;21536:16:::0;;;:7:::1;:16;::::0;;;;;:20;21533:108:::1;;-1:-1:-1::0;;;;;21612:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21592:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21573:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21533:108:::1;-1:-1:-1::0;;;;;21651:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;21651:27:0::1;21674:4;21651:27:::0;;::::1;::::0;;;21689:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21689:23:0::1;::::0;;::::1;::::0;;21387:333::o;39146:335::-;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;39281:6:::1;39245:42;;:32;;;;;;;;;;;:42;;::::0;39237:121:::1;;;::::0;-1:-1:-1;;;39237:121:0;;11687:2:1;39237:121:0::1;::::0;::::1;11669:21:1::0;11726:2;11706:18;;;11699:30;11765:34;11745:18;;;11738:62;11836:34;11816:18;;;11809:62;-1:-1:-1;;;11887:19:1;;;11880:33;11930:19;;39237:121:0::1;11485:470:1::0;39237:121:0::1;39369:32;:41:::0;;;::::1;;-1:-1:-1::0;;;39369:41:0::1;-1:-1:-1::0;;;;39369:41:0;;::::1;;::::0;;39426:47:::1;::::0;::::1;::::0;::::1;::::0;39404:6;1370:14:1;1363:22;1345:41;;1333:2;1318:18;;1205:187;39968:347:0;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;40081:26:::1;::::0;::::1;;40071:36;;::::0;::::1;;::::0;40049:137:::1;;;::::0;-1:-1:-1;;;40049:137:0;;12162:2:1;40049:137:0::1;::::0;::::1;12144:21:1::0;12201:2;12181:18;;;12174:30;12240:34;12220:18;;;12213:62;-1:-1:-1;;;12291:18:1;;;12284:48;12349:19;;40049:137:0::1;11960:414:1::0;40049:137:0::1;40197:26;:35:::0;;-1:-1:-1;;40197:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;40248:59:::1;::::0;40197:35:::1;40280:26:::0;;;1370:14:1;1363:22;1345:41;;40248:59:0::1;::::0;1333:2:1;1318:18;40248:59:0::1;1205:187:1::0;18635:198:0;-1:-1:-1;;;;;18725:20:0;;18701:7;18725:20;;;:11;:20;;;;;;;;18721:49;;;-1:-1:-1;;;;;;18754:16:0;;;;;:7;:16;;;;;;;18635:198::o;18721:49::-;-1:-1:-1;;;;;18808:16:0;;;;;;:7;:16;;;;;;18788:37;;:19;:37::i;1112:148::-;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;1219:1:::1;1203:6:::0;;1182:40:::1;::::0;-1:-1:-1;;;;;1203:6:0;;::::1;::::0;1182:40:::1;::::0;1219:1;;1182:40:::1;1250:1;1233:19:::0;;-1:-1:-1;;;;;;1233:19:0::1;::::0;;1112:148::o;28397:156::-;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;28459:14:::1;::::0;-1:-1:-1;;;28459:14:0;::::1;;;:23;28451:62;;;::::0;-1:-1:-1;;;28451:62:0;;12581:2:1;28451:62:0::1;::::0;::::1;12563:21:1::0;12620:2;12600:18;;;12593:30;12659:28;12639:18;;;12632:56;12705:18;;28451:62:0::1;12379:350:1::0;28451:62:0::1;28524:14;:21:::0;;-1:-1:-1;;;;28524:21:0::1;-1:-1:-1::0;;;28524:21:0::1;::::0;;28397:156::o;18340:87::-;18379:13;18412:7;18405:14;;;;;:::i;19833:225::-;302:10;19926:4;19975:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19975:34:0;;;;;;;;;;19926:4;;19943:85;;19966:7;;19975:52;;20012:15;;19975:52;:::i;18841:167::-;18919:4;18936:42;302:10;18960:9;18971:6;18936:9;:42::i;33148:289::-;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;33266:3:::1;33250:13;18606::::0;;;18526:101;33250:13:::1;:19;;;;:::i;:::-;33238:9;:31;33230:106;;;::::0;-1:-1:-1;;;33230:106:0;;12936:2:1;33230:106:0::1;::::0;::::1;12918:21:1::0;12975:2;12955:18;;;12948:30;13014:34;12994:18;;;12987:62;13085:32;13065:18;;;13058:60;13135:19;;33230:106:0::1;12734:426:1::0;33230:106:0::1;33347:18;:30:::0;;;33393:36:::1;::::0;160:25:1;;;33393:36:0::1;::::0;148:2:1;133:18;33393:36:0::1;14:177:1::0;40323:681:0;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;40544:4:::1;40530:10;18501:9:::0;;;;;18435:83;40530:10:::1;40524:16;::::0;:2:::1;:16;:::i;:::-;18606:13:::0;;40507:34:::1;;;;:::i;:::-;:41;;;;:::i;:::-;40478:24;:70;;:158;;;;;40632:4;40618:10;18501:9:::0;;;;;18435:83;40618:10:::1;40612:16;::::0;:2:::1;:16;:::i;:::-;18606:13:::0;;40595:34:::1;;;;:::i;:::-;:41;;;;:::i;:::-;40566:25;:70;;40478:158;40456:272;;;::::0;-1:-1:-1;;;40456:272:0;;13367:2:1;40456:272:0::1;::::0;::::1;13349:21:1::0;13406:2;13386:18;;;13379:30;13445:34;13425:18;;;13418:62;13516:33;13496:18;;;13489:61;13567:19;;40456:272:0::1;13165:427:1::0;40456:272:0::1;18501:9:::0;;;;40796:16:::1;::::0;:2:::1;:16;:::i;:::-;40767:46;::::0;:24;:46:::1;:::i;:::-;40740:23;:73:::0;18501:9;;;;40880:16:::1;::::0;:2:::1;:16;:::i;:::-;40851:46;::::0;:25;:46:::1;:::i;:::-;40824:24;:73:::0;;;40946:23:::1;::::0;40913:83:::1;::::0;::::1;::::0;::::1;::::0;13771:25:1;;13827:2;13812:18;;13805:34;13759:2;13744:18;;13597:248;40913:83:0::1;;;;;;;;40323:681:::0;;:::o;37549:371::-;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;37664:15:::1;::::0;-1:-1:-1;;;;;37664:15:0;;::::1;37644:35:::0;;::::1;::::0;37636:88:::1;;;::::0;-1:-1:-1;;;37636:88:0;;14052:2:1;37636:88:0::1;::::0;::::1;14034:21:1::0;14091:2;14071:18;;;14064:30;14130:34;14110:18;;;14103:62;-1:-1:-1;;;14181:18:1;;;14174:38;14229:19;;37636:88:0::1;13850:404:1::0;37636:88:0::1;-1:-1:-1::0;;;;;37743:28:0;::::1;37735:77;;;::::0;-1:-1:-1;;;37735:77:0;;14461:2:1;37735:77:0::1;::::0;::::1;14443:21:1::0;14500:2;14480:18;;;14473:30;14539:34;14519:18;;;14512:62;-1:-1:-1;;;14590:18:1;;;14583:34;14634:19;;37735:77:0::1;14259:400:1::0;37735:77:0::1;37823:15;:34:::0;;-1:-1:-1;;;;;;37823:34:0::1;-1:-1:-1::0;;;;;37823:34:0;::::1;::::0;;::::1;::::0;;;37873:39:::1;::::0;2080:51:1;;;37873:39:0::1;::::0;2068:2:1;2053:18;37873:39:0::1;1907:230:1::0;37245:292:0;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37340:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;37332:95:::1;;;::::0;-1:-1:-1;;;37332:95:0;;14866:2:1;37332:95:0::1;::::0;::::1;14848:21:1::0;14905:2;14885:18;;;14878:30;14944:34;14924:18;;;14917:62;-1:-1:-1;;;14995:18:1;;;14988:40;15045:19;;37332:95:0::1;14664:406:1::0;37332:95:0::1;-1:-1:-1::0;;;;;37438:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;37438:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;37495:34;;1345:41:1;;;37495:34:0::1;::::0;1318:18:1;37495:34:0::1;1205:187:1::0;42528:391:0;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42628:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:49;::::1;;:38;::::0;;::::1;:49;;::::0;42619:98:::1;;;;-1:-1:-1::0;;;42619:98:0::1;;;;;;;:::i;:::-;42755:4;-1:-1:-1::0;;;;;42736:24:0;::::1;::::0;42728:60:::1;;;::::0;-1:-1:-1;;;42728:60:0;;15277:2:1;42728:60:0::1;::::0;::::1;15259:21:1::0;15316:2;15296:18;;;15289:30;15355:25;15335:18;;;15328:53;15398:18;;42728:60:0::1;15075:347:1::0;42728:60:0::1;-1:-1:-1::0;;;;;42801:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;42801:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;42867:44;;1345:41:1;;;42867:44:0::1;::::0;1318:18:1;42867:44:0::1;1205:187:1::0;33449:143:0;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;33518:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;33518:22:0::1;-1:-1:-1::0;;;;33518:22:0;;::::1;;::::0;;33556:28:::1;::::0;::::1;::::0;::::1;::::0;33532:8;1370:14:1;1363:22;1345:41;;1333:2;1318:18;;1205:187;37928:589:0;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;38089:11:::1;:26:::0;;;38126:17:::1;:38:::0;;;38175:17:::1;:38:::0;;;38224:12:::1;:28:::0;;;38239:13;38195:18;38280:31:::1;38146:18:::0;38103:12;38280:31:::1;:::i;:::-;:51;;;;:::i;:::-;:66;;;;:::i;:::-;38265:12;:81:::0;;;38383:3:::1;-1:-1:-1::0;38367:19:0::1;38359:67;;;::::0;-1:-1:-1;;;38359:67:0;;15629:2:1;38359:67:0::1;::::0;::::1;15611:21:1::0;15668:2;15648:18;;;15641:30;15707:34;15687:18;;;15680:62;-1:-1:-1;;;15758:18:1;;;15751:33;15801:19;;38359:67:0::1;15427:399:1::0;38359:67:0::1;38459:11;::::0;38472:17:::1;::::0;38491::::1;::::0;38444:65:::1;::::0;;16033:25:1;;;16089:2;16074:18;;16067:34;;;;16117:18;;;16110:34;38444:65:0::1;::::0;16021:2:1;16006:18;38444:65:0::1;;;;;;;;37928:589:::0;;;;:::o;38525:613::-;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;38691:12:::1;:28:::0;;;38730:18:::1;:40:::0;;;38781:18:::1;:40:::0;;;38832:13:::1;:30:::0;;;38848:14;38802:19;38891:33:::1;38751:19:::0;38706:13;38891:33:::1;:::i;:::-;:54;;;;:::i;:::-;:70;;;;:::i;:::-;38875:13;:86:::0;;;38999:3:::1;-1:-1:-1::0;38982:20:0::1;38974:69;;;::::0;-1:-1:-1;;;38974:69:0;;16357:2:1;38974:69:0::1;::::0;::::1;16339:21:1::0;16396:2;16376:18;;;16369:30;16435:34;16415:18;;;16408:62;-1:-1:-1;;;16486:18:1;;;16479:34;16530:19;;38974:69:0::1;16155:400:1::0;38974:69:0::1;39077:12;::::0;39091:18:::1;::::0;39111::::1;::::0;39061:69:::1;::::0;;16033:25:1;;;16089:2;16074:18;;16067:34;;;;16117:18;;;16110:34;39061:69:0::1;::::0;16021:2:1;16006:18;39061:69:0::1;15831:319:1::0;1268:244:0;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1357:22:0;::::1;1349:73;;;::::0;-1:-1:-1;;;1349:73:0;;16762:2:1;1349:73:0::1;::::0;::::1;16744:21:1::0;16801:2;16781:18;;;16774:30;16840:34;16820:18;;;16813:62;-1:-1:-1;;;16891:18:1;;;16884:36;16937:19;;1349:73:0::1;16560:402:1::0;1349:73:0::1;1459:6;::::0;;1438:38:::1;::::0;-1:-1:-1;;;;;1438:38:0;;::::1;::::0;1459:6;::::1;::::0;1438:38:::1;::::0;::::1;1487:6;:17:::0;;-1:-1:-1;;;;;;1487:17:0::1;-1:-1:-1::0;;;;;1487:17:0;;;::::1;::::0;;;::::1;::::0;;1268:244::o;22252:442::-;1025:6;;-1:-1:-1;;;;;1025:6:0;302:10;1025:22;1017:67;;;;-1:-1:-1;;;1017:67:0;;;;;;;:::i;:::-;22348:4:::1;-1:-1:-1::0;;;;;22331:22:0;::::1;::::0;22323:67:::1;;;::::0;-1:-1:-1;;;22323:67:0;;17169:2:1;22323:67:0::1;::::0;::::1;17151:21:1::0;;;17188:18;;;17181:30;17247:34;17227:18;;;17220:62;17299:18;;22323:67:0::1;16967:356:1::0;22323:67:0::1;-1:-1:-1::0;;;;;22405:21:0;::::1;22401:127;;22443:52;22451:10;22473:21;22443:29;:52::i;22401:127::-;22600:35;::::0;-1:-1:-1;;;22600:35:0;;22629:4:::1;22600:35;::::0;::::1;2080:51:1::0;22565:5:0;;22538:17:::1;::::0;-1:-1:-1;;;;;22600:20:0;::::1;::::0;::::1;::::0;2053:18:1;;22600:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22646:40;::::0;-1:-1:-1;;;22646:40:0;;22666:10:::1;22646:40;::::0;::::1;17691:51:1::0;17758:18;;;17751:34;;;22582:53:0;;-1:-1:-1;;;;;;22646:19:0;::::1;::::0;::::1;::::0;17664:18:1;;22646:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22312:382;;1095:1;22252:442:::0;:::o;28052:337::-;-1:-1:-1;;;;;28145:19:0;;28137:68;;;;-1:-1:-1;;;28137:68:0;;18248:2:1;28137:68:0;;;18230:21:1;18287:2;18267:18;;;18260:30;18326:34;18306:18;;;18299:62;-1:-1:-1;;;18377:18:1;;;18370:34;18421:19;;28137:68:0;18046:400:1;28137:68:0;-1:-1:-1;;;;;28224:21:0;;28216:68;;;;-1:-1:-1;;;28216:68:0;;18653:2:1;28216:68:0;;;18635:21:1;18692:2;18672:18;;;18665:30;18731:34;18711:18;;;18704:62;-1:-1:-1;;;18782:18:1;;;18775:32;18824:19;;28216:68:0;18451:398:1;28216:68:0;-1:-1:-1;;;;;28297:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28349:32;;160:25:1;;;28349:32:0;;133:18:1;28349:32:0;;;;;;;28052:337;;;:::o;28565:2937::-;-1:-1:-1;;;;;28687:18:0;;28679:68;;;;-1:-1:-1;;;28679:68:0;;19056:2:1;28679:68:0;;;19038:21:1;19095:2;19075:18;;;19068:30;19134:34;19114:18;;;19107:62;-1:-1:-1;;;19185:18:1;;;19178:35;19230:19;;28679:68:0;18854:401:1;28679:68:0;28775:1;28766:6;:10;28758:64;;;;-1:-1:-1;;;28758:64:0;;19462:2:1;28758:64:0;;;19444:21:1;19501:2;19481:18;;;19474:30;19540:34;19520:18;;;19513:62;-1:-1:-1;;;19591:18:1;;;19584:39;19640:19;;28758:64:0;19260:405:1;28758:64:0;-1:-1:-1;;;;;28839:25:0;;;;;;:19;:25;;;;;;;;28838:26;:54;;;;-1:-1:-1;;;;;;28869:23:0;;;;;;:19;:23;;;;;;;;28868:24;28838:54;28835:139;;;28917:14;;-1:-1:-1;;;28917:14:0;;;;28909:53;;;;-1:-1:-1;;;28909:53:0;;19872:2:1;28909:53:0;;;19854:21:1;19911:2;19891:18;;;19884:30;19950:28;19930:18;;;19923:56;19996:18;;28909:53:0;19670:350:1;28909:53:0;28990:26;;;;28986:770;;;29056:13;;-1:-1:-1;;;;;29048:21:0;;;29056:13;;29048:21;;:44;;-1:-1:-1;29079:13:0;;-1:-1:-1;;;;;29073:19:0;;;29079:13;;29073:19;29048:44;29047:107;;;;-1:-1:-1;;;;;;29114:31:0;;;;;;:25;:31;;;;;;;;:40;29047:107;:169;;;;-1:-1:-1;;;;;;29176:29:0;;;;;;:25;:29;;;;;;;;:40;29047:169;29043:702;;;29263:13;;-1:-1:-1;;;;;29263:13:0;;;29255:21;;;;29251:479;;29345:23;;29335:6;:33;;29301:180;;;;-1:-1:-1;;;29301:180:0;;;;;;;:::i;:::-;29251:479;;;29574:24;;29564:6;:34;;29530:180;;;;-1:-1:-1;;;29530:180:0;;;;;;;:::i;:::-;29768:28;29799:24;29817:4;29799:9;:24::i;:::-;29893:18;;29768:55;;-1:-1:-1;29869:42:0;;;;;;;29940:53;;-1:-1:-1;29977:16:0;;-1:-1:-1;;;29977:16:0;;;;29976:17;29940:53;:89;;;;-1:-1:-1;30016:13:0;;-1:-1:-1;;;;;30010:19:0;;;30016:13;;30010:19;29940:89;:117;;;;-1:-1:-1;30046:11:0;;-1:-1:-1;;;30046:11:0;;;;29940:117;29922:985;;;30084:16;:23;;-1:-1:-1;;;;30084:23:0;-1:-1:-1;;;30084:23:0;;;30181:18;;30161:17;;30084:23;;30161:38;;;:::i;:::-;30136:63;;30214:22;30259:18;;30239:17;;:38;;;;:::i;:::-;30214:63;-1:-1:-1;30294:18:0;30315:31;30214:63;30315:14;:31;:::i;:::-;30294:52;-1:-1:-1;30366:14:0;;30363:492;;30404:18;;30401:198;;30447:23;30515:10;30474:37;30497:14;30474:20;:37;:::i;:::-;30473:52;;;;:::i;:::-;30447:78;;30548:31;30563:15;30548:14;:31::i;:::-;30424:175;30401:198;30638:18;;30635:204;;30681:23;30749:10;30708:37;30731:14;30708:20;:37;:::i;:::-;30707:52;;;;:::i;:::-;30681:78;;30782:37;30803:15;30782:20;:37::i;:::-;30658:181;30635:204;-1:-1:-1;;30871:16:0;:24;;-1:-1:-1;;;;30871:24:0;;;-1:-1:-1;29922:985:0;30993:30;31008:4;31013:2;31016:6;30993:14;:30::i;:::-;31040:21;;;;31036:459;;;-1:-1:-1;;;;;31093:35:0;;;;;;:29;:35;;;;;;;;31092:36;:92;;;;-1:-1:-1;;;;;;31151:33:0;;;;;;:29;:33;;;;;;;;31150:34;31092:92;:132;;;;-1:-1:-1;31211:13:0;;-1:-1:-1;;;;;31205:19:0;;;31211:13;;31205:19;;31092:132;31088:396;;;31259:15;31278:13;31288:2;31278:9;:13::i;:::-;31360:15;;31259:32;;-1:-1:-1;31340:16:0;31350:6;31259:32;31340:16;:::i;:::-;:35;;31310:158;;;;-1:-1:-1;;;31310:158:0;;20655:2:1;31310:158:0;;;20637:21:1;20694:2;20674:18;;;20667:30;20733:34;20713:18;;;20706:62;-1:-1:-1;;;20784:18:1;;;20777:46;20840:19;;31310:158:0;20453:412:1;31310:158:0;31240:244;31088:396;28668:2834;;28565:2937;;;:::o;24270:160::-;24311:7;24332:15;24349;24368:19;:17;:19::i;:::-;24331:56;;-1:-1:-1;24331:56:0;-1:-1:-1;24405:17:0;24331:56;;24405:17;:::i;:::-;24398:24;;;;24270:160;:::o;22851:472::-;22910:7;22919;22928;22937;22946;22955;22964;22985:23;23010:12;23024:18;23044;23066:20;23078:7;23066:11;:20::i;:::-;22984:102;;;;;;;;23098:15;23115:23;23140:12;23156:62;23168:7;23177:4;23183:10;23195;23207;:8;:10::i;:::-;23156:11;:62::i;:::-;23097:121;;-1:-1:-1;23097:121:0;-1:-1:-1;23097:121:0;-1:-1:-1;23269:15:0;;-1:-1:-1;23286:4:0;;-1:-1:-1;23292:10:0;;-1:-1:-1;23304:10:0;-1:-1:-1;;;;22851:472:0;;;;;;;;;:::o;2885:346::-;2964:4;3013:6;2988:21;:31;;2980:73;;;;-1:-1:-1;;;2980:73:0;;21072:2:1;2980:73:0;;;21054:21:1;21111:2;21091:18;;;21084:30;21150:31;21130:18;;;21123:59;21199:18;;2980:73:0;20870:353:1;2980:73:0;3145:12;3163:9;-1:-1:-1;;;;;3163:14:0;3186:6;3163:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3144:54:0;;2885:346;-1:-1:-1;;;;;2885:346:0:o;31510:947::-;31569:12;31584:10;31593:1;31584:6;:10;:::i;:::-;31569:25;-1:-1:-1;31605:17:0;31625:13;31569:25;31625:6;:13;:::i;:::-;31734:16;;;31748:1;31734:16;;;;;;;;31605:33;;-1:-1:-1;31676:21:0;;31651:22;;31734:16;;;;;;;;;;-1:-1:-1;31734:16:0;31710:40;;31779:4;31761;31766:1;31761:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31761:23:0;;;:7;;;;;;;;;;:23;;;;31805:15;;:22;;;-1:-1:-1;;;31805:22:0;;;;:15;;;;;:20;;:22;;;;;31761:7;;31805:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31795:4;31800:1;31795:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31795:32:0;;;:7;;;;;;;;;:32;31840:15;;:207;;-1:-1:-1;;;31840:207:0;;:15;;;:66;;:207;;31921:4;;31840:15;;31984:4;;32011;;32031:15;;31840:207;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32068:18;32113:14;32089:21;:38;;;;:::i;:::-;32140:15;;32343:4;;32140:248;;-1:-1:-1;;;32140:248:0;;32213:4;32140:248;;;23152:34:1;23202:18;;;23195:34;;;32140:15:0;23245:18:1;;;23238:34;;;23288:18;;;23281:34;-1:-1:-1;;;;;32343:4:0;;;23331:19:1;;;23324:44;32362:15:0;23384:19:1;;;23377:35;32068:59:0;;-1:-1:-1;32140:15:0;;:31;;32068:59;;23086:19:1;;32140:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;32406:43:0;;;16033:25:1;;;16089:2;16074:18;;16067:34;;;16117:18;;;16110:34;;;32406:43:0;;-1:-1:-1;16021:2:1;16006:18;32406:43:0;;;;;;;31558:899;;;;;31510:947;:::o;32465:675::-;32618:16;;;32632:1;32618:16;;;;;;;;32560:21;;32535:22;;32618:16;32632:1;32618:16;;;;;;;;;;-1:-1:-1;32618:16:0;32594:40;;32663:4;32645;32650:1;32645:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32645:23:0;;;:7;;;;;;;;;;:23;;;;32689:15;;:22;;;-1:-1:-1;;;32689:22:0;;;;:15;;;;;:20;;:22;;;;;32645:7;;32689:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32679:4;32684:1;32679:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32679:32:0;;;:7;;;;;;;;;:32;32724:15;;:214;;-1:-1:-1;;;32724:214:0;;:15;;;:66;;:214;;32805:11;;32724:15;;32875:4;;32902;;32922:15;;32724:214;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32951:18;32996:14;32972:21;:38;;;;:::i;:::-;33031:15;;32951:59;;-1:-1:-1;33023:46:0;;-1:-1:-1;;;;;33031:15:0;32951:59;33023:34;:46::i;:::-;-1:-1:-1;33087:45:0;;;13771:25:1;;;13827:2;13812:18;;13805:34;;;33087:45:0;;13744:18:1;33087:45:0;13597:248:1;33600:1117:0;-1:-1:-1;;;;;33699:27:0;;;;;;:19;:27;;;;;;;;;:75;;-1:-1:-1;;;;;;33744:30:0;;;;;;:19;:30;;;;;;;;33699:75;33695:406;;;33806:14;:12;:14::i;:::-;33695:406;;;33853:13;;-1:-1:-1;;;;;33853:13:0;;;33840:26;;;;33837:264;;33882:12;:10;:12::i;33837:264::-;33924:13;;-1:-1:-1;;;;;33924:13:0;;;33914:23;;;;33911:190;;33953:11;:9;:11::i;33911:190::-;33984:32;;-1:-1:-1;;;33984:32:0;;;;33981:120;;;34032:14;:12;:14::i;33981:120::-;34077:12;:10;:12::i;:::-;-1:-1:-1;;;;;34117:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;34141:22:0;;;;;;:11;:22;;;;;;;;34140:23;34117:46;34113:597;;;34180:48;34202:6;34210:9;34221:6;34180:21;:48::i;:::-;33600:1117;;;:::o;34113:597::-;-1:-1:-1;;;;;34251:19:0;;;;;;:11;:19;;;;;;;;34250:20;:46;;;;-1:-1:-1;;;;;;34274:22:0;;;;;;:11;:22;;;;;;;;34250:46;34246:464;;;34313:46;34333:6;34341:9;34352:6;34313:19;:46::i;34246:464::-;-1:-1:-1;;;;;34382:19:0;;;;;;:11;:19;;;;;;;;34381:20;:47;;;;-1:-1:-1;;;;;;34406:22:0;;;;;;:11;:22;;;;;;;;34405:23;34381:47;34377:333;;;34445:44;34463:6;34471:9;34482:6;34445:17;:44::i;34377:333::-;-1:-1:-1;;;;;34511:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;34534:22:0;;;;;;:11;:22;;;;;;;;34511:45;34507:203;;;34573:48;34595:6;34603:9;34614:6;34573:21;:48::i;34507:203::-;34654:44;34672:6;34680:9;34691:6;34654:17;:44::i;24438:552::-;24535:7;;24571;;24488;;;;;24595:283;24619:9;:16;24615:20;;24595:283;;;24685:7;24661;:21;24669:9;24679:1;24669:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24669:12:0;24661:21;;;;;;;;;;;;;:31;;:66;;;24720:7;24696;:21;24704:9;24714:1;24704:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24704:12:0;24696:21;;;;;;;;;;;;;:31;24661:66;24657:97;;;24737:7;;24746;;24729:25;;;;;;;24438:552;;:::o;24657:97::-;24789:7;:21;24797:9;24807:1;24797:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24797:12:0;24789:21;;;;;;;;;;;;;24779:31;;:7;:31;:::i;:::-;24769:41;;24845:7;:21;24853:9;24863:1;24853:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24853:12:0;24845:21;;;;;;;;;;;;;24835:31;;:7;:31;:::i;:::-;24825:41;-1:-1:-1;24637:3:0;;;;:::i;:::-;;;;24595:283;;;;24912:7;;24902;;:17;;;;:::i;:::-;24892:7;:27;24888:58;;;24929:7;;24938;;24921:25;;;;;;24438:552;;:::o;24888:58::-;24965:7;;24974;;-1:-1:-1;24438:552:0;-1:-1:-1;24438:552:0:o;23331:420::-;23391:7;23400;23409;23418;23438:12;23453:24;23469:7;23453:15;:24::i;:::-;23438:39;;23488:18;23509:30;23531:7;23509:21;:30::i;:::-;23488:51;;23550:18;23571:30;23593:7;23571:21;:30::i;:::-;23550:51;-1:-1:-1;23612:23:0;23550:51;23655:10;23638:14;23648:4;23638:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;23612:66;23714:4;;-1:-1:-1;23720:10:0;;-1:-1:-1;23720:10:0;-1:-1:-1;23331:420:0;;-1:-1:-1;;;23331:420:0:o;23759:503::-;23894:7;;;;23950:21;23960:11;23950:7;:21;:::i;:::-;23932:39;-1:-1:-1;23982:12:0;23997:18;24004:11;23997:4;:18;:::i;:::-;23982:33;-1:-1:-1;24026:18:0;24047:24;24060:11;24047:10;:24;:::i;:::-;24026:45;-1:-1:-1;24082:18:0;24103:24;24116:11;24103:10;:24;:::i;:::-;24082:45;-1:-1:-1;24138:23:0;24082:45;24181:10;24164:14;24174:4;24164:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;24223:7;;;;-1:-1:-1;24249:4:0;;-1:-1:-1;23759:503:0;;-1:-1:-1;;;;;;;;;23759:503:0:o;27051:206::-;27097:7;;:12;:34;;;;-1:-1:-1;27113:13:0;;:18;27097:34;:56;;;;-1:-1:-1;27135:13:0;;:18;27097:56;27094:68;;;27051:206::o;27094:68::-;27192:1;27182:7;:11;;;27204:13;:17;;;27232:13;:17;27051:206::o;27588:320::-;27642:12;;27631:7;;:23;:80;;;;;27697:13;;27676:18;;:34;;;;:::i;:::-;27658:13;;:53;27631:80;:119;;;;;27732:18;;27715:13;;:35;27631:119;27628:132;;;27588:320::o;27628:132::-;27782:12;;27772:7;:22;27821:18;;27805:13;:34;27887:13;;27866:18;;:34;;27887:13;27866:34;:::i;:::-;27850:13;:50;27588:320::o;27269:311::-;27322:11;;27311:7;;:22;:77;;;;;27375:12;;27355:17;;:32;;;;:::i;:::-;27337:13;;:51;27311:77;:115;;;;;27409:17;;27392:13;;:34;27311:115;27308:128;;;27269:311::o;27308:128::-;27458:11;;27448:7;:21;27496:17;;27480:13;:33;27560:12;;27540:17;;:32;;27560:12;27540:32;:::i;35928:614::-;36031:15;36048:23;36073:12;36087:23;36112:12;36126:18;36146;36168:19;36179:7;36168:10;:19::i;:::-;36030:157;;;;;;;;;;;;;;36234:7;36216;:15;36224:6;-1:-1:-1;;;;;36216:15:0;-1:-1:-1;;;;;36216:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;36198:15:0;;;;;;:7;:15;;;;;;;;:43;;;;36270:7;:15;;;;:25;;36288:7;;36270:25;:::i;:::-;-1:-1:-1;;;;;36252:15:0;;;;;;;:7;:15;;;;;;:43;;;;36327:18;;;;;;;:36;;36348:15;;36327:36;:::i;:::-;-1:-1:-1;;;;;36306:18:0;;;;;;:7;:18;;;;;:57;36375:26;36390:10;36375:14;:26::i;:::-;36414;36429:10;36414:14;:26::i;:::-;36451:23;36463:4;36469;36451:11;:23::i;:::-;36507:9;-1:-1:-1;;;;;36490:44:0;36499:6;-1:-1:-1;;;;;36490:44:0;;36518:15;36490:44;;;;160:25:1;;148:2;133:18;;14:177;36490:44:0;;;;;;;;36019:523;;;;;;;35928:614;;;:::o;35286:634::-;35387:15;35404:23;35429:12;35443:23;35468:12;35482:18;35502;35524:19;35535:7;35524:10;:19::i;:::-;35386:157;;;;;;;;;;;;;;35590:7;35572;:15;35580:6;-1:-1:-1;;;;;35572:15:0;-1:-1:-1;;;;;35572:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;35554:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;35629:18;;;;;:7;:18;;;;;:36;;35650:15;;35629:36;:::i;:::-;-1:-1:-1;;;;;35608:18:0;;;;;;:7;:18;;;;;;;;:57;;;;35697:7;:18;;;;:36;;35718:15;;35697:36;:::i;34725:553::-;34824:15;34841:23;34866:12;34880:23;34905:12;34919:18;34939;34961:19;34972:7;34961:10;:19::i;:::-;34823:157;;;;;;;;;;;;;;35027:7;35009;:15;35017:6;-1:-1:-1;;;;;35009:15:0;-1:-1:-1;;;;;35009:15:0;;;;;;;;;;;;;:25;;;;:::i;36550:687::-;36653:15;36670:23;36695:12;36709:23;36734:12;36748:18;36768;36790:19;36801:7;36790:10;:19::i;:::-;36652:157;;;;;;;;;;;;;;36856:7;36838;:15;36846:6;-1:-1:-1;;;;;36838:15:0;-1:-1:-1;;;;;36838:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;36820:15:0;;;;;;:7;:15;;;;;;;;:43;;;;36892:7;:15;;;;:25;;36910:7;;36892:25;:::i;26626:123::-;26690:7;26737:4;26727:7;;26717;:17;;;;:::i;:::-;:24;;;;:::i;26757:135::-;26827:7;26880:4;26864:13;;26854:7;:23;;;;:::i;26904:135::-;26974:7;27027:4;27011:13;;27001:7;:23;;;;:::i;26206:408::-;26273:14;;26269:338;;26304:19;26327:10;:8;:10::i;:::-;26304:33;-1:-1:-1;26352:18:0;26373:24;26304:33;26373:10;:24;:::i;:::-;26453:4;26437:22;;;;:7;:22;;;;;;26352:45;;-1:-1:-1;26437:35:0;;26352:45;;26437:35;:::i;:::-;26428:4;26412:22;;;;:7;:22;;;;;;;;:60;;;;26490:11;:26;;;;;;26487:108;;;26576:4;26560:22;;;;:7;:22;;;;;;:35;;26585:10;;26560:35;:::i;:::-;26551:4;26535:22;;;;:7;:22;;;;;:60;26289:318;;26206:408;:::o;25002:1196::-;25065:23;25099:18;25206:1;25190:13;;25175:12;;25154:18;;25134:17;;:38;;;;:::i;:::-;:53;;;;:::i;:::-;:69;;;;:::i;:::-;:73;25130:306;;;25354:13;;25339:12;;25318:18;;25298:17;;:38;;;;:::i;:::-;:53;;;;:::i;:::-;:69;;;;:::i;:::-;25275:18;;25255:17;;:38;;;;:::i;:::-;25241:53;;:10;:53;:::i;:::-;:127;;;;:::i;:::-;25223:145;-1:-1:-1;25396:28:0;25223:145;25396:10;:28;:::i;:::-;25383:41;;25130:306;25451:19;;25448:351;;25486:19;25509:10;:8;:10::i;:::-;25486:33;-1:-1:-1;25534:18:0;25555:29;25486:33;25555:15;:29;:::i;:::-;25640:4;25624:22;;;;:7;:22;;;;;;25534:50;;-1:-1:-1;25624:35:0;;25534:50;;25624:35;:::i;:::-;25615:4;25599:22;;;;:7;:22;;;;;;;;:60;;;;25677:11;:26;;;;;;25674:113;;;25763:4;25747:22;;;;:7;:22;;;;;;:40;;25772:15;;25747:40;:::i;:::-;25738:4;25722:22;;;;:7;:22;;;;;:65;25674:113;25471:328;;25448:351;25814:14;;25811:380;;25844:19;25867:10;:8;:10::i;:::-;25844:33;-1:-1:-1;25892:13:0;25908:24;25844:33;25908:10;:24;:::i;:::-;25990:6;25974:24;;:7;:24;;;;25892:40;;-1:-1:-1;25974:32:0;;25892:40;;25974:32;:::i;:::-;25963:6;25947:24;;;:59;26024:11;25947:24;26024:28;;;;;26021:114;;;26114:6;26098:24;;:7;:24;;;;:37;;26125:10;;26098:37;:::i;:::-;26087:6;26071:24;;:7;:24;;;:64;26021:114;26169:10;26152:13;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;25054:1144:0;;25002:1196;:::o;22702:141::-;22790:4;22780:7;;:14;;;;:::i;:::-;22770:7;:24;22818:10;;:17;;22831:4;;22818:17;:::i;:::-;22805:10;:30;-1:-1:-1;;22702:141:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:118::-;1483:5;1476:13;1469:21;1462:5;1459:32;1449:60;;1505:1;1502;1495:12;1520:382;1585:6;1593;1646:2;1634:9;1625:7;1621:23;1617:32;1614:52;;;1662:1;1659;1652:12;1614:52;1701:9;1688:23;1720:31;1745:5;1720:31;:::i;:::-;1770:5;-1:-1:-1;1827:2:1;1812:18;;1799:32;1840:30;1799:32;1840:30;:::i;:::-;1889:7;1879:17;;;1520:382;;;;;:::o;2142:247::-;2201:6;2254:2;2242:9;2233:7;2229:23;2225:32;2222:52;;;2270:1;2267;2260:12;2222:52;2309:9;2296:23;2328:31;2353:5;2328:31;:::i;2394:456::-;2471:6;2479;2487;2540:2;2528:9;2519:7;2515:23;2511:32;2508:52;;;2556:1;2553;2546:12;2508:52;2595:9;2582:23;2614:31;2639:5;2614:31;:::i;:::-;2664:5;-1:-1:-1;2721:2:1;2706:18;;2693:32;2734:33;2693:32;2734:33;:::i;:::-;2394:456;;2786:7;;-1:-1:-1;;;2840:2:1;2825:18;;;;2812:32;;2394:456::o;2855:180::-;2914:6;2967:2;2955:9;2946:7;2942:23;2938:32;2935:52;;;2983:1;2980;2973:12;2935:52;-1:-1:-1;3006:23:1;;2855:180;-1:-1:-1;2855:180:1:o;3040:241::-;3096:6;3149:2;3137:9;3128:7;3124:23;3120:32;3117:52;;;3165:1;3162;3155:12;3117:52;3204:9;3191:23;3223:28;3245:5;3223:28;:::i;3475:309::-;3540:6;3548;3601:2;3589:9;3580:7;3576:23;3572:32;3569:52;;;3617:1;3614;3607:12;3569:52;3653:9;3640:23;3630:33;;3713:2;3702:9;3698:18;3685:32;3726:28;3748:5;3726:28;:::i;3997:248::-;4065:6;4073;4126:2;4114:9;4105:7;4101:23;4097:32;4094:52;;;4142:1;4139;4132:12;4094:52;-1:-1:-1;;4165:23:1;;;4235:2;4220:18;;;4207:32;;-1:-1:-1;3997:248:1:o;4250:388::-;4318:6;4326;4379:2;4367:9;4358:7;4354:23;4350:32;4347:52;;;4395:1;4392;4385:12;4347:52;4434:9;4421:23;4453:31;4478:5;4453:31;:::i;:::-;4503:5;-1:-1:-1;4560:2:1;4545:18;;4532:32;4573:33;4532:32;4573:33;:::i;4643:385::-;4729:6;4737;4745;4753;4806:3;4794:9;4785:7;4781:23;4777:33;4774:53;;;4823:1;4820;4813:12;4774:53;-1:-1:-1;;4846:23:1;;;4916:2;4901:18;;4888:32;;-1:-1:-1;4967:2:1;4952:18;;4939:32;;5018:2;5003:18;4990:32;;-1:-1:-1;4643:385:1;-1:-1:-1;4643:385:1:o;5033:380::-;5112:1;5108:12;;;;5155;;;5176:61;;5230:4;5222:6;5218:17;5208:27;;5176:61;5283:2;5275:6;5272:14;5252:18;5249:38;5246:161;;5329:10;5324:3;5320:20;5317:1;5310:31;5364:4;5361:1;5354:15;5392:4;5389:1;5382:15;5246:161;;5033:380;;;:::o;5418:356::-;5620:2;5602:21;;;5639:18;;;5632:30;5698:34;5693:2;5678:18;;5671:62;5765:2;5750:18;;5418:356::o;5779:400::-;5981:2;5963:21;;;6020:2;6000:18;;;5993:30;6059:34;6054:2;6039:18;;6032:62;-1:-1:-1;;;6125:2:1;6110:18;;6103:34;6169:3;6154:19;;5779:400::o;6184:127::-;6245:10;6240:3;6236:20;6233:1;6226:31;6276:4;6273:1;6266:15;6300:4;6297:1;6290:15;6316:128;6383:9;;;6404:11;;;6401:37;;;6418:18;;:::i;6449:422::-;6538:1;6581:5;6538:1;6595:270;6616:7;6606:8;6603:21;6595:270;;;6675:4;6671:1;6667:6;6663:17;6657:4;6654:27;6651:53;;;6684:18;;:::i;:::-;6734:7;6724:8;6720:22;6717:55;;;6754:16;;;;6717:55;6833:22;;;;6793:15;;;;6595:270;;;6599:3;6449:422;;;;;:::o;6876:806::-;6925:5;6955:8;6945:80;;-1:-1:-1;6996:1:1;7010:5;;6945:80;7044:4;7034:76;;-1:-1:-1;7081:1:1;7095:5;;7034:76;7126:4;7144:1;7139:59;;;;7212:1;7207:130;;;;7119:218;;7139:59;7169:1;7160:10;;7183:5;;;7207:130;7244:3;7234:8;7231:17;7228:43;;;7251:18;;:::i;:::-;-1:-1:-1;;7307:1:1;7293:16;;7322:5;;7119:218;;7421:2;7411:8;7408:16;7402:3;7396:4;7393:13;7389:36;7383:2;7373:8;7370:16;7365:2;7359:4;7356:12;7352:35;7349:77;7346:159;;;-1:-1:-1;7458:19:1;;;7490:5;;7346:159;7537:34;7562:8;7556:4;7537:34;:::i;:::-;7607:6;7603:1;7599:6;7595:19;7586:7;7583:32;7580:58;;;7618:18;;:::i;:::-;7656:20;;6876:806;-1:-1:-1;;;6876:806:1:o;7687:140::-;7745:5;7774:47;7815:4;7805:8;7801:19;7795:4;7774:47;:::i;7832:217::-;7872:1;7898;7888:132;;7942:10;7937:3;7933:20;7930:1;7923:31;7977:4;7974:1;7967:15;8005:4;8002:1;7995:15;7888:132;-1:-1:-1;8034:9:1;;7832:217::o;8468:168::-;8541:9;;;8572;;8589:15;;;8583:22;;8569:37;8559:71;;8610:18;;:::i;9822:127::-;9883:10;9878:3;9874:20;9871:1;9864:31;9914:4;9911:1;9904:15;9938:4;9935:1;9928:15;9954:127;10015:10;10010:3;10006:20;10003:1;9996:31;10046:4;10043:1;10036:15;10070:4;10067:1;10060:15;10086:135;10125:3;10146:17;;;10143:43;;10166:18;;:::i;:::-;-1:-1:-1;10213:1:1;10202:13;;10086:135::o;10226:125::-;10291:9;;;10312:10;;;10309:36;;;10325:18;;:::i;17328:184::-;17398:6;17451:2;17439:9;17430:7;17426:23;17422:32;17419:52;;;17467:1;17464;17457:12;17419:52;-1:-1:-1;17490:16:1;;17328:184;-1:-1:-1;17328:184:1:o;17796:245::-;17863:6;17916:2;17904:9;17895:7;17891:23;17887:32;17884:52;;;17932:1;17929;17922:12;17884:52;17964:9;17958:16;17983:28;18005:5;17983:28;:::i;20025:423::-;20227:2;20209:21;;;20266:2;20246:18;;;20239:30;20305:34;20300:2;20285:18;;20278:62;20376:29;20371:2;20356:18;;20349:57;20438:3;20423:19;;20025:423::o;21570:251::-;21640:6;21693:2;21681:9;21672:7;21668:23;21664:32;21661:52;;;21709:1;21706;21699:12;21661:52;21741:9;21735:16;21760:31;21785:5;21760:31;:::i;21826:980::-;22088:4;22136:3;22125:9;22121:19;22167:6;22156:9;22149:25;22193:2;22231:6;22226:2;22215:9;22211:18;22204:34;22274:3;22269:2;22258:9;22254:18;22247:31;22298:6;22333;22327:13;22364:6;22356;22349:22;22402:3;22391:9;22387:19;22380:26;;22441:2;22433:6;22429:15;22415:29;;22462:1;22472:195;22486:6;22483:1;22480:13;22472:195;;;22551:13;;-1:-1:-1;;;;;22547:39:1;22535:52;;22642:15;;;;22607:12;;;;22583:1;22501:9;22472:195;;;-1:-1:-1;;;;;;;22723:32:1;;;;22718:2;22703:18;;22696:60;-1:-1:-1;;;22787:3:1;22772:19;22765:35;22684:3;21826:980;-1:-1:-1;;;21826:980:1:o;23423:306::-;23511:6;23519;23527;23580:2;23568:9;23559:7;23555:23;23551:32;23548:52;;;23596:1;23593;23586:12;23548:52;23625:9;23619:16;23609:26;;23675:2;23664:9;23660:18;23654:25;23644:35;;23719:2;23708:9;23704:18;23698:25;23688:35;;23423:306;;;;;:::o

Swarm Source

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