ETH Price: $3,459.81 (+1.60%)
Gas: 8 Gwei

Token

Florky (FLORKY)
 

Overview

Max Total Supply

369,000,000,000 FLORKY

Holders

255

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
FLORKY

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 800 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-31
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

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 Mint(address indexed sender, uint amount0, uint amount1);
    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 mint(address to) external returns (uint liquidity);
    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;
}

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

library Address {
    function sendValue(address payable recipient, uint256 amount) internal returns(bool){
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        return success;
    }
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        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;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, 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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract FLORKY is ERC20, Ownable {
    using Address for address payable;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;

    uint256 public  liquidityFeeOnBuy;
    uint256 public  liquidityFeeOnSell;

    uint256 public  marketingFeeOnBuy;
    uint256 public  marketingFeeOnSell;

    uint256 private _totalFeesOnBuy;
    uint256 private _totalFeesOnSell;

    address public  marketingWallet;

    uint256 public  swapTokensAtAmount;
    bool    private swapping;

    bool    public swapEnabled;

    uint256 public launchTime;
    bool    public ladderTaxEnabled;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MarketingWalletChanged(address marketingWallet);
    event UpdateBuyFees(uint256 liquidityFeeOnBuy, uint256 marketingFeeOnBuy);
    event UpdateSellFees(uint256 liquidityFeeOnSell, uint256 marketingFeeOnSell);
    event UpdateWalletToWalletTransferFee(uint256 walletToWalletTransferFee);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 bnbReceived,uint256 tokensIntoLiqudity);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);

    constructor () ERC20("Florky", "FLORKY") 
    {   
        address router;
        if (block.chainid == 56) {
            router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC Pancake Mainnet Router
        } else if (block.chainid == 97) {
            router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BSC Pancake Testnet Router
        } else if (block.chainid == 1 || block.chainid == 5) {
            router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH Uniswap Mainnet % Testnet
        } else {
            revert();
        }

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

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair   = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        liquidityFeeOnBuy  = 0;
        liquidityFeeOnSell = 0;

        marketingFeeOnBuy  = 4000;
        marketingFeeOnSell = 4000;

        _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;

        marketingWallet = 0xabf8961DfB78c9204D0e446E74d2C94C390db091;

        maxTransactionLimitEnabled = true;

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

        maxWalletLimitEnabled = true;

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

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

        _mint(owner(), 369_000_000_000 * (10 ** decimals()));
        swapTokensAtAmount = totalSupply() / 5_000;
	
        maxTransactionAmountBuy     = totalSupply() * 30 / 1000;
        maxTransactionAmountSell    = totalSupply() * 30 / 1000;
	
        maxWalletAmount             = totalSupply() * 30 / 1000;

        tradingEnabled = false;
        swapEnabled = false;
    }

    receive() external payable {

  	}

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim contract's balance of its own 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 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 isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function updateBuyFees(uint256 _liquidityFeeOnBuy, uint256 _marketingFeeOnBuy) external onlyOwner {
        liquidityFeeOnBuy = _liquidityFeeOnBuy;
        marketingFeeOnBuy = _marketingFeeOnBuy;

        _totalFeesOnBuy   = liquidityFeeOnBuy + marketingFeeOnBuy;

        require(_totalFeesOnBuy + _totalFeesOnSell <= 40000, "Total Fees cannot exceed the maximum");

        emit UpdateBuyFees(liquidityFeeOnBuy, marketingFeeOnBuy);
    }

    function updateSellFees(uint256 _liquidityFeeOnSell, uint256 _marketingFeeOnSell) external onlyOwner {
        liquidityFeeOnSell = _liquidityFeeOnSell;
        marketingFeeOnSell = _marketingFeeOnSell;

        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;

        require(_totalFeesOnBuy + _totalFeesOnSell <= 40000, "Total Fees cannot exceed the maximum");

        emit UpdateSellFees(liquidityFeeOnSell, marketingFeeOnSell);
    }

    function serLadderTaxEnabled(bool _enabled) external onlyOwner {
        ladderTaxEnabled = _enabled;
    }

    function changeMarketingWallet(address _marketingWallet) external onlyOwner{
        require(_marketingWallet != marketingWallet,"Marketing wallet is already that address");
        require(_marketingWallet != address(0),"Marketing wallet cannot be the zero address");
        marketingWallet = _marketingWallet;

        emit MarketingWalletChanged(marketingWallet);
    }

    bool public tradingEnabled;

    function enableTrading() external onlyOwner{
        require(!tradingEnabled, "Trading already enabled.");
        tradingEnabled = true;
        swapEnabled = true;
        launchTime = block.timestamp;
        ladderTaxEnabled = true;
    }

    function _transfer(address from,address to,uint256 amount) internal  override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet enabled!");
       
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

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

        if(ladderTaxEnabled) {
            if(launchTime + 3000 < block.timestamp){
                liquidityFeeOnBuy  = 69; // 0.69
                liquidityFeeOnSell = 0; // 0

                marketingFeeOnBuy  = 0; // 0
                marketingFeeOnSell = 0; // 0

                _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
                _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;

                ladderTaxEnabled = false;
            } else if(launchTime + 2400 < block.timestamp){
                liquidityFeeOnBuy  = 0; // 0
                liquidityFeeOnSell = 0; // 0

                marketingFeeOnBuy  = 500; // 5
                marketingFeeOnSell = 500; // 5

                _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
                _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;
            } else if(launchTime + 1800 < block.timestamp){
                liquidityFeeOnBuy  = 0; // 0
                liquidityFeeOnSell = 0; // 0

                marketingFeeOnBuy  = 1000; // 10
                marketingFeeOnSell = 1000; // 10

                _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
                _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;
            } else if(launchTime + 1200 < block.timestamp){
                liquidityFeeOnBuy  = 0; // 0
                liquidityFeeOnSell = 0; // 0

                marketingFeeOnBuy  = 2000; // 20
                marketingFeeOnSell = 2000; // 20

                _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
                _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;
            } else if(launchTime + 600 < block.timestamp){
                liquidityFeeOnBuy  = 0; // 0
                liquidityFeeOnSell = 0; // 0

                marketingFeeOnBuy  = 3000; // 30
                marketingFeeOnSell = 3000; // 30

                _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
                _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;
            }
        }

		uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            !swapping &&
            to == uniswapV2Pair &&
            _totalFeesOnBuy + _totalFeesOnSell > 0 &&
            swapEnabled
        ) {
            swapping = true;

            uint256 totalFee = _totalFeesOnBuy + _totalFeesOnSell;
            uint256 liquidityShare = liquidityFeeOnBuy + liquidityFeeOnSell;
            uint256 marketingShare = marketingFeeOnBuy + marketingFeeOnSell;

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

            swapping = false;
        }

        uint256 _totalFees;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            _totalFees = 0;
        } else if (from == uniswapV2Pair) {
            _totalFees = _totalFeesOnBuy;
        } else if (to == uniswapV2Pair) {
            _totalFees = _totalFeesOnSell;
        } else {
            _totalFees = 0;
        }

        if (_totalFees > 0) {
            uint256 fees = (amount * _totalFees) / 10_000;
            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }

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

        super._transfer(from, to, amount);
    }

    function setSwapEnabled(bool _enabled) external onlyOwner{
        require(swapEnabled != _enabled, "swapEnabled already at this state.");
        swapEnabled = _enabled;
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{
        require(newAmount > totalSupply() / 1_000_000, "SwapTokensAtAmount must be greater than 0.0001% of total supply");
        swapTokensAtAmount = newAmount;

        emit SwapTokensAtAmountUpdated(swapTokensAtAmount);
    }

    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,
            path,
            address(this),
            block.timestamp);
        
        uint256 newBalance = address(this).balance - initialBalance;

        uniswapV2Router.addLiquidityETH{value: newBalance}(
            address(this),
            otherHalf,
            0,
            0,
            address(0xdead),
            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,
            path,
            address(this),
            block.timestamp);

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

        payable(marketingWallet).sendValue(newBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }

    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");
        _isExcludedFromMaxWalletLimit[account] = exclude;

        emit ExcludedFromMaxWalletLimit(account, exclude);
    }

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

    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())) / 1_000 && 
            _maxTransactionAmountSell >= (totalSupply() / (10 ** decimals())) / 1_000, 
            "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 excludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxTxLimit[account] != exclude, "Account is already set to that state");
        require(account != address(this), "Can't set this address.");

        _isExcludedFromMaxTxLimit[account] = exclude;

        emit ExcludedFromMaxTransactionLimit(account, exclude);
    }

    function isExcludedFromMaxTransaction(address account) public view returns(bool) {
        return _isExcludedFromMaxTxLimit[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":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":"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":"uint256","name":"swapTokensAtAmount","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":"uint256","name":"liquidityFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeOnBuy","type":"uint256"}],"name":"UpdateBuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFeeOnSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeOnSell","type":"uint256"}],"name":"UpdateSellFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"walletToWalletTransferFee","type":"uint256"}],"name":"UpdateWalletToWalletTransferFee","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":[{"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":[],"name":"enableTrading","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":"excludeFromMaxTransactionLimit","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":"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":"isExcludedFromFees","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":[],"name":"ladderTaxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"serLadderTaxEnabled","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":"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":"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":"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":[{"internalType":"uint256","name":"_liquidityFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnBuy","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnSell","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405180604001604052806006815260200165466c6f726b7960d01b81525060405180604001604052806006815260200165464c4f524b5960d01b81525081600390816200006191906200098e565b5060046200007082826200098e565b505050600062000085620006d060201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600046603803620000fa57507310ed43c718714eb63d5aa57b78b54704e256024e62000156565b466061036200011f575073d99d1c33f9fc3444f8101754abc46c52416550d162000156565b46600114806200012f5750466005145b15620001515750737a250d5630b4cf539739df2c5dacb4c659f2488d62000156565b600080fd5b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c2919062000a5a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000210573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000236919062000a5a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000284573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002aa919062000a5a565b600680546001600160a01b038086166001600160a01b031992831681179093556007805491851691909216179055909150620002eb903090600019620006d4565b60006009819055600a819055610fa0600b819055600c8190556200030f9162000aa2565b600d55600c54600a5462000324919062000aa2565b600e55600f80546001600160a01b03191673abf8961dfb78c9204d0e446e74d2c94c390db0911790556018805460ff1916600190811790915560176000620003746005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260179093528183208054851660019081179091557f43fedf50e12e5c047fbe3576d03ab50250348e9a6030f531ab6d4ce10f5b03038054861682179055600f549091168352908220805484168217905573407993575c91ce7643a4d4ccacc9a98c36ee1bbe82527f074a0fd27439428490cc7751d857bc1e8fdca06eda19210ccf4c6048437143cd8054841682179055601580549093168117909255601490620004576005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260149093528183208054851660019081179091557f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db008054861682179055600f549091168352908220805484168217905573407993575c91ce7643a4d4ccacc9a98c36ee1bbe82527fa78fbefa424445dbac07db837dec45a4e2e3b9567c25ed7a66d33c8e6754283480549093168117909255600890620005306005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905560089092527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd09334299805484166001908117909155308352908220805484168217905573407993575c91ce7643a4d4ccacc9a98c36ee1bbe9091527f9abbb41a031421b1db0c5f86e21334738cf2d0250863fd0f355cb66c864e9890805490921617905562000619620005f46005546001600160a01b031690565b620006026012600a62000bbb565b62000613906455ea1d2a0062000bcc565b62000800565b6113886200062660025490565b62000632919062000be6565b6010556103e86200064260025490565b6200064f90601e62000bcc565b6200065b919062000be6565b6019556103e86200066b60025490565b6200067890601e62000bcc565b62000684919062000be6565b601a556103e86200069460025490565b620006a190601e62000bcc565b620006ad919062000be6565b60165550506013805461ff00199081169091556011805490911690555062000c09565b3390565b6001600160a01b0383166200073c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200079f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000733565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620008585760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000733565b80600260008282546200086c919062000aa2565b90915550506001600160a01b038216600090815260208190526040812080548392906200089b90849062000aa2565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200091557607f821691505b6020821081036200093657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008e557600081815260208120601f850160051c81016020861015620009655750805b601f850160051c820191505b81811015620009865782815560010162000971565b505050505050565b81516001600160401b03811115620009aa57620009aa620008ea565b620009c281620009bb845462000900565b846200093c565b602080601f831160018114620009fa5760008415620009e15750858301515b600019600386901b1c1916600185901b17855562000986565b600085815260208120601f198616915b8281101562000a2b5788860151825594840194600190910190840162000a0a565b508582101562000a4a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a6d57600080fd5b81516001600160a01b038116811462000a8557600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000ab85762000ab862000a8c565b92915050565b600181815b8085111562000aff57816000190482111562000ae35762000ae362000a8c565b8085161562000af157918102915b93841c939080029062000ac3565b509250929050565b60008262000b185750600162000ab8565b8162000b275750600062000ab8565b816001811462000b40576002811462000b4b5762000b6b565b600191505062000ab8565b60ff84111562000b5f5762000b5f62000a8c565b50506001821b62000ab8565b5060208310610133831016604e8410600b841016171562000b90575081810a62000ab8565b62000b9c838362000abe565b806000190482111562000bb35762000bb362000a8c565b029392505050565b600062000a8560ff84168362000b07565b808202811582820484141762000ab85762000ab862000a8c565b60008262000c0457634e487b7160e01b600052601260045260246000fd5b500490565b6132e08062000c196000396000f3fe6080604052600436106103225760003560e01c8063715018a6116101a5578063afa4f3b2116100ec578063d2fcc00111610095578063e01af92c1161006f578063e01af92c146108fe578063e2f456051461091e578063f2fde38b14610934578063f9d0831a1461095457600080fd5b8063d2fcc00114610882578063dc4c7dbc146108a2578063dd62ed3e146108b857600080fd5b8063bdc52da8116100c6578063bdc52da814610828578063c024666814610842578063d2e335eb1461086257600080fd5b8063afa4f3b2146107c8578063b6f7f681146107e8578063bb85c6d11461080857600080fd5b80638da5cb5b1161014e578063a8a69b9d11610128578063a8a69b9d14610759578063a9059cbb14610792578063aa4bde28146107b257600080fd5b80638da5cb5b1461070657806395d89b4114610724578063a457c2d71461073957600080fd5b80637b3c83b11161017f5780637b3c83b1146106bb578063880bcbc1146106d15780638a8c523c146106f157600080fd5b8063715018a61461067057806375f0a87414610685578063790ca413146106a557600080fd5b80632ce86fbf1161026957806356a6cabf1161021257806366ca9b83116101ec57806366ca9b83146105fb5780636ddd17131461061b57806370a082311461063a57600080fd5b806356a6cabf146105af57806359136fa5146105cf5780635fc2e596146105e557600080fd5b806349bd5a5e1161024357806349bd5a5e146105375780634ada218b146105575780634fbee1931461057657600080fd5b80632ce86fbf146104e5578063313ce567146104fb578063395093511461051757600080fd5b806318d9ceae116102cb57806327a14fc2116102a557806327a14fc21461048b5780632a6c7dba146104ab5780632ba86bf2146104cb57600080fd5b806318d9ceae1461041857806321a9d82a1461045157806323b872dd1461046b57600080fd5b8063095ea7b3116102fc578063095ea7b31461039b5780631694505e146103cb57806318160ddd1461040357600080fd5b80630105d0fd1461032e57806302dbd8f81461035757806306fdde031461037957600080fd5b3661032957005b600080fd5b34801561033a57600080fd5b5061034460195481565b6040519081526020015b60405180910390f35b34801561036357600080fd5b50610377610372366004612e1f565b610974565b005b34801561038557600080fd5b5061038e610a8e565b60405161034e9190612e41565b3480156103a757600080fd5b506103bb6103b6366004612ea4565b610b20565b604051901515815260200161034e565b3480156103d757600080fd5b506006546103eb906001600160a01b031681565b6040516001600160a01b03909116815260200161034e565b34801561040f57600080fd5b50600254610344565b34801561042457600080fd5b506103bb610433366004612ed0565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561045d57600080fd5b506015546103bb9060ff1681565b34801561047757600080fd5b506103bb610486366004612ef4565b610b37565b34801561049757600080fd5b506103776104a6366004612f35565b610bfd565b3480156104b757600080fd5b506103776104c6366004612f5c565b610d31565b3480156104d757600080fd5b506018546103bb9060ff1681565b3480156104f157600080fd5b50610344600a5481565b34801561050757600080fd5b506040516012815260200161034e565b34801561052357600080fd5b506103bb610532366004612ea4565b610e3e565b34801561054357600080fd5b506007546103eb906001600160a01b031681565b34801561056357600080fd5b506013546103bb90610100900460ff1681565b34801561058257600080fd5b506103bb610591366004612ed0565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156105bb57600080fd5b506103776105ca366004612f5c565b610e7a565b3480156105db57600080fd5b50610344601a5481565b3480156105f157600080fd5b50610344600b5481565b34801561060757600080fd5b50610377610616366004612e1f565b610f87565b34801561062757600080fd5b506011546103bb90610100900460ff1681565b34801561064657600080fd5b50610344610655366004612ed0565b6001600160a01b031660009081526020819052604090205490565b34801561067c57600080fd5b50610377611091565b34801561069157600080fd5b50600f546103eb906001600160a01b031681565b3480156106b157600080fd5b5061034460125481565b3480156106c757600080fd5b5061034460095481565b3480156106dd57600080fd5b506103776106ec366004612f79565b611130565b3480156106fd57600080fd5b506103776112ac565b34801561071257600080fd5b506005546001600160a01b03166103eb565b34801561073057600080fd5b5061038e611372565b34801561074557600080fd5b506103bb610754366004612ea4565b611381565b34801561076557600080fd5b506103bb610774366004612ed0565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561079e57600080fd5b506103bb6107ad366004612ea4565b611432565b3480156107be57600080fd5b5061034460165481565b3480156107d457600080fd5b506103776107e3366004612f35565b61143f565b3480156107f457600080fd5b50610377610803366004612e1f565b611547565b34801561081457600080fd5b50610377610823366004612ed0565b6116c8565b34801561083457600080fd5b506013546103bb9060ff1681565b34801561084e57600080fd5b5061037761085d366004612f79565b61186b565b34801561086e57600080fd5b5061037761087d366004612f5c565b6119a1565b34801561088e57600080fd5b5061037761089d366004612f79565b6119fc565b3480156108ae57600080fd5b50610344600c5481565b3480156108c457600080fd5b506103446108d3366004612fb2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090a57600080fd5b50610377610919366004612f5c565b611b18565b34801561092a57600080fd5b5061034460105481565b34801561094057600080fd5b5061037761094f366004612ed0565b611be7565b34801561096057600080fd5b5061037761096f366004612ed0565b611d14565b6005546001600160a01b031633146109c15760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064015b60405180910390fd5b600a829055600c8190556109d58183612ff6565b600e819055600d54619c40916109ea91612ff6565b1115610a445760405162461bcd60e51b8152602060048201526024808201527f546f74616c20466565732063616e6e6f742065786365656420746865206d6178604482015263696d756d60e01b60648201526084016109b8565b7f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c6600a54600c54604051610a82929190918252602082015260400190565b60405180910390a15050565b606060038054610a9d90613009565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac990613009565b8015610b165780601f10610aeb57610100808354040283529160200191610b16565b820191906000526020600020905b815481529060010190602001808311610af957829003601f168201915b5050505050905090565b6000610b2d338484611ede565b5060015b92915050565b6001600160a01b03831660009081526001602090815260408083203384529091528120546000198114610be75782811015610bda5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084016109b8565b610be78533858403611ede565b610bf2858585612002565b506001949350505050565b6005546001600160a01b03163314610c455760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6064610c536012600a613127565b600254610c609190613136565b610c6a9190613136565b811015610cdf5760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060448201527f6c6f776572207468616e2031250000000000000000000000000000000000000060648201526084016109b8565b610ceb6012600a613127565b610cf59082613158565b60168190556040519081527f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942906020015b60405180910390a150565b6005546001600160a01b03163314610d795760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b60155460ff16151581151503610df75760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060448201527f746f20746861742073746174650000000000000000000000000000000000000060648201526084016109b8565b6015805460ff191682151590811790915560405160ff909116151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f190602001610d26565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b2d918590610e75908690612ff6565b611ede565b6005546001600160a01b03163314610ec25760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b60185460ff16151581151503610f405760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960448201527f2073657420746f2074686174207374617465000000000000000000000000000060648201526084016109b8565b6018805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf90602001610d26565b6005546001600160a01b03163314610fcf5760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6009829055600b819055610fe38183612ff6565b600d819055600e54619c4091610ff99190612ff6565b11156110535760405162461bcd60e51b8152602060048201526024808201527f546f74616c20466565732063616e6e6f742065786365656420746865206d6178604482015263696d756d60e01b60648201526084016109b8565b7fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50600954600b54604051610a82929190918252602082015260400190565b6005546001600160a01b031633146110d95760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805473ffffffffffffffffffffffffffffffffffffffff19169055565b6005546001600160a01b031633146111785760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6001600160a01b03821660009081526017602052604090205481151560ff9091161515036111f45760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b60648201526084016109b8565b306001600160a01b0383160361124c5760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e00000000000000000060448201526064016109b8565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b6005546001600160a01b031633146112f45760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b601354610100900460ff161561134c5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642e000000000000000060448201526064016109b8565b601380546011805461ff0019166101001790554260125561010161ffff19909116179055565b606060048054610a9d90613009565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561141b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016109b8565b6114283385858403611ede565b5060019392505050565b6000610b2d338484612002565b6005546001600160a01b031633146114875760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b620f424061149460025490565b61149e9190613136565b81116115125760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c790060648201526084016109b8565b60108190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610d26565b6005546001600160a01b0316331461158f5760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6103e861159e6012600a613127565b6002546115ab9190613136565b6115b59190613136565b82101580156115e957506103e86115ce6012600a613127565b6002546115db9190613136565b6115e59190613136565b8110155b61165b5760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060448201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c790060648201526084016109b8565b6116676012600a613127565b6116719083613158565b6019556116806012600a613127565b61168a9082613158565b601a8190556019546040517f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb13192610a82928252602082015260400190565b6005546001600160a01b031633146117105760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b600f546001600160a01b03908116908216036117945760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f206164647265737300000000000000000000000000000000000000000000000060648201526084016109b8565b6001600160a01b0381166118105760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084016109b8565b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610d26565b6005546001600160a01b031633146118b35760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6001600160a01b03821660009081526008602052604090205481151560ff9091161515036119495760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f276578636c75646564270000000000000000000000000000000000000000000060648201526084016109b8565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016112a0565b6005546001600160a01b031633146119e95760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6013805460ff1916911515919091179055565b6005546001600160a01b03163314611a445760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503611ac05760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b60648201526084016109b8565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c91016112a0565b6005546001600160a01b03163314611b605760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b801515601160019054906101000a900460ff16151503611bcd5760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c726561647920617420746869732073746174604482015261329760f11b60648201526084016109b8565b601180549115156101000261ff0019909216919091179055565b6005546001600160a01b03163314611c2f5760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6001600160a01b038116611cab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109b8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d5c5760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b306001600160a01b03821603611dda5760405162461bcd60e51b815260206004820152603760248201527f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160448201527f6c616e6365206f6620697473206f776e20746f6b656e7300000000000000000060648201526084016109b8565b6001600160a01b038116611df657611df23347612798565b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e63919061316f565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611eb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed79190613188565b5050505b50565b6001600160a01b038316611f405760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109b8565b6001600160a01b038216611fa15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109b8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120665760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109b8565b6001600160a01b0382166120c85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109b8565b601354610100900460ff16806120f657506001600160a01b03831660009081526008602052604090205460ff165b8061211957506001600160a01b03821660009081526008602052604090205460ff165b6121655760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c656421000000000000000060448201526064016109b8565b8060000361217e5761217983836000612847565b505050565b60185460ff161561230c576007546001600160a01b03848116911614806121b257506007546001600160a01b038381169116145b80156121d757506001600160a01b03831660009081526017602052604090205460ff16155b80156121fc57506001600160a01b03821660009081526017602052604090205460ff16155b1561230c576007546001600160a01b03908116908416036122945760195481111561228f5760405162461bcd60e51b815260206004820152603b60248201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560448201527f647320746865206d61785472616e73616374696f6e416d6f756e74000000000060648201526084016109b8565b61230c565b601a5481111561230c5760405162461bcd60e51b815260206004820152603b60248201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560448201527f647320746865206d61785472616e73616374696f6e416d6f756e74000000000060648201526084016109b8565b60135460ff161561248a5742601254610bb86123289190612ff6565b101561237457604560098190556000600a819055600b819055600c81905561234f91612ff6565b600d55600c54600a546123629190612ff6565b600e556013805460ff1916905561248a565b426012546109606123859190612ff6565b10156123c85760006009819055600a8190556101f4600b819055600c8190556123ad91612ff6565b600d55600c54600a546123c09190612ff6565b600e5561248a565b426012546107086123d99190612ff6565b10156124015760006009819055600a8190556103e8600b819055600c8190556123ad91612ff6565b426012546104b06124129190612ff6565b101561243a5760006009819055600a8190556107d0600b819055600c8190556123ad91612ff6565b4260125461025861244b9190612ff6565b101561248a5760006009819055600a819055610bb8600b819055600c81905561247391612ff6565b600d55600c54600a546124869190612ff6565b600e555b30600090815260208190526040902054601054811080159081906124b1575060115460ff16155b80156124ca57506007546001600160a01b038581169116145b80156124e557506000600e54600d546124e39190612ff6565b115b80156124f85750601154610100900460ff165b156125a8576011805460ff19166001179055600e54600d5460009161251c91612ff6565b90506000600a546009546125309190612ff6565b90506000600c54600b546125449190612ff6565b90508115612570576000836125598488613158565b6125639190613136565b905061256e81612a2c565b505b801561259a576000836125838388613158565b61258d9190613136565b905061259881612c77565b505b50506011805460ff19169055505b6001600160a01b03851660009081526008602052604081205460ff16806125e757506001600160a01b03851660009081526008602052604090205460ff165b806125f4575060115460ff165b1561260157506000612643565b6007546001600160a01b03908116908716036126205750600d54612643565b6007546001600160a01b039081169086160361263f5750600e54612643565b5060005b801561267d5760006127106126588387613158565b6126629190613136565b905061266e81866131a5565b945061267b873083612847565b505b60155460ff1615612785576001600160a01b03861660009081526014602052604090205460ff161580156126ca57506001600160a01b03851660009081526014602052604090205460ff16155b80156126e457506007546001600160a01b03868116911614155b15612785576001600160a01b03851660009081526020819052604090205460165461270f8683612ff6565b11156127835760405162461bcd60e51b815260206004820152603060248201527f4d617857616c6c65743a20526563697069656e7420657863656564732074686560448201527f206d617857616c6c6574416d6f756e740000000000000000000000000000000060648201526084016109b8565b505b612790868686612847565b505050505050565b6000814710156127ea5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109b8565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114612837576040519150601f19603f3d011682016040523d82523d6000602084013e61283c565b606091505b509095945050505050565b6001600160a01b0383166128ab5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109b8565b6001600160a01b03821661290d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109b8565b6001600160a01b0383166000908152602081905260409020548181101561299c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016109b8565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906129d3908490612ff6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a1f91815260200190565b60405180910390a3611ed7565b6000612a39600283613136565b90506000612a4782846131a5565b60408051600280825260608201835292935047926000926020830190803683370190505090503081600081518110612a8157612a816131b8565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afe91906131ce565b81600181518110612b1157612b116131b8565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac94790612b579087906000908690309042906004016131eb565b600060405180830381600087803b158015612b7157600080fd5b505af1158015612b85573d6000803e3d6000fd5b5050505060008247612b9791906131a5565b60065460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201529192506001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612c06573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c2b919061325c565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b604080516002808252606082018352479260009291906020830190803683370190505090503081600081518110612cb057612cb06131b8565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2d91906131ce565b81600181518110612d4057612d406131b8565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac94790612d869086906000908690309042906004016131eb565b600060405180830381600087803b158015612da057600080fd5b505af1158015612db4573d6000803e3d6000fd5b5050505060008247612dc691906131a5565b600f54909150612ddf906001600160a01b031682612798565b5060408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e62999910160405180910390a150505050565b60008060408385031215612e3257600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015612e6e57858101830151858201604001528201612e52565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611edb57600080fd5b60008060408385031215612eb757600080fd5b8235612ec281612e8f565b946020939093013593505050565b600060208284031215612ee257600080fd5b8135612eed81612e8f565b9392505050565b600080600060608486031215612f0957600080fd5b8335612f1481612e8f565b92506020840135612f2481612e8f565b929592945050506040919091013590565b600060208284031215612f4757600080fd5b5035919050565b8015158114611edb57600080fd5b600060208284031215612f6e57600080fd5b8135612eed81612f4e565b60008060408385031215612f8c57600080fd5b8235612f9781612e8f565b91506020830135612fa781612f4e565b809150509250929050565b60008060408385031215612fc557600080fd5b8235612fd081612e8f565b91506020830135612fa781612e8f565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b3157610b31612fe0565b600181811c9082168061301d57607f821691505b60208210810361303d57634e487b7160e01b600052602260045260246000fd5b50919050565b600181815b8085111561307e57816000190482111561306457613064612fe0565b8085161561307157918102915b93841c9390800290613048565b509250929050565b60008261309557506001610b31565b816130a257506000610b31565b81600181146130b857600281146130c2576130de565b6001915050610b31565b60ff8411156130d3576130d3612fe0565b50506001821b610b31565b5060208310610133831016604e8410600b8410161715613101575081810a610b31565b61310b8383613043565b806000190482111561311f5761311f612fe0565b029392505050565b6000612eed60ff841683613086565b60008261315357634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610b3157610b31612fe0565b60006020828403121561318157600080fd5b5051919050565b60006020828403121561319a57600080fd5b8151612eed81612f4e565b81810381811115610b3157610b31612fe0565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156131e057600080fd5b8151612eed81612e8f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561323b5784516001600160a01b031683529383019391830191600101613216565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561327157600080fd5b835192506020840151915060408401519050925092509256fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220614e28df4750e380354c0da0c74e7b28798e5e8f93b9c8c6a96fd3a8dac9dd8364736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103225760003560e01c8063715018a6116101a5578063afa4f3b2116100ec578063d2fcc00111610095578063e01af92c1161006f578063e01af92c146108fe578063e2f456051461091e578063f2fde38b14610934578063f9d0831a1461095457600080fd5b8063d2fcc00114610882578063dc4c7dbc146108a2578063dd62ed3e146108b857600080fd5b8063bdc52da8116100c6578063bdc52da814610828578063c024666814610842578063d2e335eb1461086257600080fd5b8063afa4f3b2146107c8578063b6f7f681146107e8578063bb85c6d11461080857600080fd5b80638da5cb5b1161014e578063a8a69b9d11610128578063a8a69b9d14610759578063a9059cbb14610792578063aa4bde28146107b257600080fd5b80638da5cb5b1461070657806395d89b4114610724578063a457c2d71461073957600080fd5b80637b3c83b11161017f5780637b3c83b1146106bb578063880bcbc1146106d15780638a8c523c146106f157600080fd5b8063715018a61461067057806375f0a87414610685578063790ca413146106a557600080fd5b80632ce86fbf1161026957806356a6cabf1161021257806366ca9b83116101ec57806366ca9b83146105fb5780636ddd17131461061b57806370a082311461063a57600080fd5b806356a6cabf146105af57806359136fa5146105cf5780635fc2e596146105e557600080fd5b806349bd5a5e1161024357806349bd5a5e146105375780634ada218b146105575780634fbee1931461057657600080fd5b80632ce86fbf146104e5578063313ce567146104fb578063395093511461051757600080fd5b806318d9ceae116102cb57806327a14fc2116102a557806327a14fc21461048b5780632a6c7dba146104ab5780632ba86bf2146104cb57600080fd5b806318d9ceae1461041857806321a9d82a1461045157806323b872dd1461046b57600080fd5b8063095ea7b3116102fc578063095ea7b31461039b5780631694505e146103cb57806318160ddd1461040357600080fd5b80630105d0fd1461032e57806302dbd8f81461035757806306fdde031461037957600080fd5b3661032957005b600080fd5b34801561033a57600080fd5b5061034460195481565b6040519081526020015b60405180910390f35b34801561036357600080fd5b50610377610372366004612e1f565b610974565b005b34801561038557600080fd5b5061038e610a8e565b60405161034e9190612e41565b3480156103a757600080fd5b506103bb6103b6366004612ea4565b610b20565b604051901515815260200161034e565b3480156103d757600080fd5b506006546103eb906001600160a01b031681565b6040516001600160a01b03909116815260200161034e565b34801561040f57600080fd5b50600254610344565b34801561042457600080fd5b506103bb610433366004612ed0565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561045d57600080fd5b506015546103bb9060ff1681565b34801561047757600080fd5b506103bb610486366004612ef4565b610b37565b34801561049757600080fd5b506103776104a6366004612f35565b610bfd565b3480156104b757600080fd5b506103776104c6366004612f5c565b610d31565b3480156104d757600080fd5b506018546103bb9060ff1681565b3480156104f157600080fd5b50610344600a5481565b34801561050757600080fd5b506040516012815260200161034e565b34801561052357600080fd5b506103bb610532366004612ea4565b610e3e565b34801561054357600080fd5b506007546103eb906001600160a01b031681565b34801561056357600080fd5b506013546103bb90610100900460ff1681565b34801561058257600080fd5b506103bb610591366004612ed0565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156105bb57600080fd5b506103776105ca366004612f5c565b610e7a565b3480156105db57600080fd5b50610344601a5481565b3480156105f157600080fd5b50610344600b5481565b34801561060757600080fd5b50610377610616366004612e1f565b610f87565b34801561062757600080fd5b506011546103bb90610100900460ff1681565b34801561064657600080fd5b50610344610655366004612ed0565b6001600160a01b031660009081526020819052604090205490565b34801561067c57600080fd5b50610377611091565b34801561069157600080fd5b50600f546103eb906001600160a01b031681565b3480156106b157600080fd5b5061034460125481565b3480156106c757600080fd5b5061034460095481565b3480156106dd57600080fd5b506103776106ec366004612f79565b611130565b3480156106fd57600080fd5b506103776112ac565b34801561071257600080fd5b506005546001600160a01b03166103eb565b34801561073057600080fd5b5061038e611372565b34801561074557600080fd5b506103bb610754366004612ea4565b611381565b34801561076557600080fd5b506103bb610774366004612ed0565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561079e57600080fd5b506103bb6107ad366004612ea4565b611432565b3480156107be57600080fd5b5061034460165481565b3480156107d457600080fd5b506103776107e3366004612f35565b61143f565b3480156107f457600080fd5b50610377610803366004612e1f565b611547565b34801561081457600080fd5b50610377610823366004612ed0565b6116c8565b34801561083457600080fd5b506013546103bb9060ff1681565b34801561084e57600080fd5b5061037761085d366004612f79565b61186b565b34801561086e57600080fd5b5061037761087d366004612f5c565b6119a1565b34801561088e57600080fd5b5061037761089d366004612f79565b6119fc565b3480156108ae57600080fd5b50610344600c5481565b3480156108c457600080fd5b506103446108d3366004612fb2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090a57600080fd5b50610377610919366004612f5c565b611b18565b34801561092a57600080fd5b5061034460105481565b34801561094057600080fd5b5061037761094f366004612ed0565b611be7565b34801561096057600080fd5b5061037761096f366004612ed0565b611d14565b6005546001600160a01b031633146109c15760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064015b60405180910390fd5b600a829055600c8190556109d58183612ff6565b600e819055600d54619c40916109ea91612ff6565b1115610a445760405162461bcd60e51b8152602060048201526024808201527f546f74616c20466565732063616e6e6f742065786365656420746865206d6178604482015263696d756d60e01b60648201526084016109b8565b7f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c6600a54600c54604051610a82929190918252602082015260400190565b60405180910390a15050565b606060038054610a9d90613009565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac990613009565b8015610b165780601f10610aeb57610100808354040283529160200191610b16565b820191906000526020600020905b815481529060010190602001808311610af957829003601f168201915b5050505050905090565b6000610b2d338484611ede565b5060015b92915050565b6001600160a01b03831660009081526001602090815260408083203384529091528120546000198114610be75782811015610bda5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084016109b8565b610be78533858403611ede565b610bf2858585612002565b506001949350505050565b6005546001600160a01b03163314610c455760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6064610c536012600a613127565b600254610c609190613136565b610c6a9190613136565b811015610cdf5760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060448201527f6c6f776572207468616e2031250000000000000000000000000000000000000060648201526084016109b8565b610ceb6012600a613127565b610cf59082613158565b60168190556040519081527f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942906020015b60405180910390a150565b6005546001600160a01b03163314610d795760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b60155460ff16151581151503610df75760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060448201527f746f20746861742073746174650000000000000000000000000000000000000060648201526084016109b8565b6015805460ff191682151590811790915560405160ff909116151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f190602001610d26565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b2d918590610e75908690612ff6565b611ede565b6005546001600160a01b03163314610ec25760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b60185460ff16151581151503610f405760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960448201527f2073657420746f2074686174207374617465000000000000000000000000000060648201526084016109b8565b6018805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf90602001610d26565b6005546001600160a01b03163314610fcf5760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6009829055600b819055610fe38183612ff6565b600d819055600e54619c4091610ff99190612ff6565b11156110535760405162461bcd60e51b8152602060048201526024808201527f546f74616c20466565732063616e6e6f742065786365656420746865206d6178604482015263696d756d60e01b60648201526084016109b8565b7fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50600954600b54604051610a82929190918252602082015260400190565b6005546001600160a01b031633146110d95760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805473ffffffffffffffffffffffffffffffffffffffff19169055565b6005546001600160a01b031633146111785760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6001600160a01b03821660009081526017602052604090205481151560ff9091161515036111f45760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b60648201526084016109b8565b306001600160a01b0383160361124c5760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e00000000000000000060448201526064016109b8565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b6005546001600160a01b031633146112f45760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b601354610100900460ff161561134c5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642e000000000000000060448201526064016109b8565b601380546011805461ff0019166101001790554260125561010161ffff19909116179055565b606060048054610a9d90613009565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561141b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016109b8565b6114283385858403611ede565b5060019392505050565b6000610b2d338484612002565b6005546001600160a01b031633146114875760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b620f424061149460025490565b61149e9190613136565b81116115125760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c790060648201526084016109b8565b60108190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610d26565b6005546001600160a01b0316331461158f5760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6103e861159e6012600a613127565b6002546115ab9190613136565b6115b59190613136565b82101580156115e957506103e86115ce6012600a613127565b6002546115db9190613136565b6115e59190613136565b8110155b61165b5760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060448201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c790060648201526084016109b8565b6116676012600a613127565b6116719083613158565b6019556116806012600a613127565b61168a9082613158565b601a8190556019546040517f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb13192610a82928252602082015260400190565b6005546001600160a01b031633146117105760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b600f546001600160a01b03908116908216036117945760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f206164647265737300000000000000000000000000000000000000000000000060648201526084016109b8565b6001600160a01b0381166118105760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084016109b8565b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610d26565b6005546001600160a01b031633146118b35760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6001600160a01b03821660009081526008602052604090205481151560ff9091161515036119495760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f276578636c75646564270000000000000000000000000000000000000000000060648201526084016109b8565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016112a0565b6005546001600160a01b031633146119e95760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6013805460ff1916911515919091179055565b6005546001600160a01b03163314611a445760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503611ac05760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b60648201526084016109b8565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c91016112a0565b6005546001600160a01b03163314611b605760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b801515601160019054906101000a900460ff16151503611bcd5760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c726561647920617420746869732073746174604482015261329760f11b60648201526084016109b8565b601180549115156101000261ff0019909216919091179055565b6005546001600160a01b03163314611c2f5760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b6001600160a01b038116611cab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109b8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d5c5760405162461bcd60e51b8152602060048201819052602482015260008051602061328b83398151915260448201526064016109b8565b306001600160a01b03821603611dda5760405162461bcd60e51b815260206004820152603760248201527f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160448201527f6c616e6365206f6620697473206f776e20746f6b656e7300000000000000000060648201526084016109b8565b6001600160a01b038116611df657611df23347612798565b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e63919061316f565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611eb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed79190613188565b5050505b50565b6001600160a01b038316611f405760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109b8565b6001600160a01b038216611fa15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109b8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120665760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109b8565b6001600160a01b0382166120c85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109b8565b601354610100900460ff16806120f657506001600160a01b03831660009081526008602052604090205460ff165b8061211957506001600160a01b03821660009081526008602052604090205460ff165b6121655760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c656421000000000000000060448201526064016109b8565b8060000361217e5761217983836000612847565b505050565b60185460ff161561230c576007546001600160a01b03848116911614806121b257506007546001600160a01b038381169116145b80156121d757506001600160a01b03831660009081526017602052604090205460ff16155b80156121fc57506001600160a01b03821660009081526017602052604090205460ff16155b1561230c576007546001600160a01b03908116908416036122945760195481111561228f5760405162461bcd60e51b815260206004820152603b60248201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560448201527f647320746865206d61785472616e73616374696f6e416d6f756e74000000000060648201526084016109b8565b61230c565b601a5481111561230c5760405162461bcd60e51b815260206004820152603b60248201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560448201527f647320746865206d61785472616e73616374696f6e416d6f756e74000000000060648201526084016109b8565b60135460ff161561248a5742601254610bb86123289190612ff6565b101561237457604560098190556000600a819055600b819055600c81905561234f91612ff6565b600d55600c54600a546123629190612ff6565b600e556013805460ff1916905561248a565b426012546109606123859190612ff6565b10156123c85760006009819055600a8190556101f4600b819055600c8190556123ad91612ff6565b600d55600c54600a546123c09190612ff6565b600e5561248a565b426012546107086123d99190612ff6565b10156124015760006009819055600a8190556103e8600b819055600c8190556123ad91612ff6565b426012546104b06124129190612ff6565b101561243a5760006009819055600a8190556107d0600b819055600c8190556123ad91612ff6565b4260125461025861244b9190612ff6565b101561248a5760006009819055600a819055610bb8600b819055600c81905561247391612ff6565b600d55600c54600a546124869190612ff6565b600e555b30600090815260208190526040902054601054811080159081906124b1575060115460ff16155b80156124ca57506007546001600160a01b038581169116145b80156124e557506000600e54600d546124e39190612ff6565b115b80156124f85750601154610100900460ff165b156125a8576011805460ff19166001179055600e54600d5460009161251c91612ff6565b90506000600a546009546125309190612ff6565b90506000600c54600b546125449190612ff6565b90508115612570576000836125598488613158565b6125639190613136565b905061256e81612a2c565b505b801561259a576000836125838388613158565b61258d9190613136565b905061259881612c77565b505b50506011805460ff19169055505b6001600160a01b03851660009081526008602052604081205460ff16806125e757506001600160a01b03851660009081526008602052604090205460ff165b806125f4575060115460ff165b1561260157506000612643565b6007546001600160a01b03908116908716036126205750600d54612643565b6007546001600160a01b039081169086160361263f5750600e54612643565b5060005b801561267d5760006127106126588387613158565b6126629190613136565b905061266e81866131a5565b945061267b873083612847565b505b60155460ff1615612785576001600160a01b03861660009081526014602052604090205460ff161580156126ca57506001600160a01b03851660009081526014602052604090205460ff16155b80156126e457506007546001600160a01b03868116911614155b15612785576001600160a01b03851660009081526020819052604090205460165461270f8683612ff6565b11156127835760405162461bcd60e51b815260206004820152603060248201527f4d617857616c6c65743a20526563697069656e7420657863656564732074686560448201527f206d617857616c6c6574416d6f756e740000000000000000000000000000000060648201526084016109b8565b505b612790868686612847565b505050505050565b6000814710156127ea5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109b8565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114612837576040519150601f19603f3d011682016040523d82523d6000602084013e61283c565b606091505b509095945050505050565b6001600160a01b0383166128ab5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109b8565b6001600160a01b03821661290d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109b8565b6001600160a01b0383166000908152602081905260409020548181101561299c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016109b8565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906129d3908490612ff6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a1f91815260200190565b60405180910390a3611ed7565b6000612a39600283613136565b90506000612a4782846131a5565b60408051600280825260608201835292935047926000926020830190803683370190505090503081600081518110612a8157612a816131b8565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afe91906131ce565b81600181518110612b1157612b116131b8565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac94790612b579087906000908690309042906004016131eb565b600060405180830381600087803b158015612b7157600080fd5b505af1158015612b85573d6000803e3d6000fd5b5050505060008247612b9791906131a5565b60065460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201529192506001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612c06573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c2b919061325c565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b604080516002808252606082018352479260009291906020830190803683370190505090503081600081518110612cb057612cb06131b8565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2d91906131ce565b81600181518110612d4057612d406131b8565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac94790612d869086906000908690309042906004016131eb565b600060405180830381600087803b158015612da057600080fd5b505af1158015612db4573d6000803e3d6000fd5b5050505060008247612dc691906131a5565b600f54909150612ddf906001600160a01b031682612798565b5060408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e62999910160405180910390a150505050565b60008060408385031215612e3257600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015612e6e57858101830151858201604001528201612e52565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611edb57600080fd5b60008060408385031215612eb757600080fd5b8235612ec281612e8f565b946020939093013593505050565b600060208284031215612ee257600080fd5b8135612eed81612e8f565b9392505050565b600080600060608486031215612f0957600080fd5b8335612f1481612e8f565b92506020840135612f2481612e8f565b929592945050506040919091013590565b600060208284031215612f4757600080fd5b5035919050565b8015158114611edb57600080fd5b600060208284031215612f6e57600080fd5b8135612eed81612f4e565b60008060408385031215612f8c57600080fd5b8235612f9781612e8f565b91506020830135612fa781612f4e565b809150509250929050565b60008060408385031215612fc557600080fd5b8235612fd081612e8f565b91506020830135612fa781612e8f565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b3157610b31612fe0565b600181811c9082168061301d57607f821691505b60208210810361303d57634e487b7160e01b600052602260045260246000fd5b50919050565b600181815b8085111561307e57816000190482111561306457613064612fe0565b8085161561307157918102915b93841c9390800290613048565b509250929050565b60008261309557506001610b31565b816130a257506000610b31565b81600181146130b857600281146130c2576130de565b6001915050610b31565b60ff8411156130d3576130d3612fe0565b50506001821b610b31565b5060208310610133831016604e8410600b8410161715613101575081810a610b31565b61310b8383613043565b806000190482111561311f5761311f612fe0565b029392505050565b6000612eed60ff841683613086565b60008261315357634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610b3157610b31612fe0565b60006020828403121561318157600080fd5b5051919050565b60006020828403121561319a57600080fd5b8151612eed81612f4e565b81810381811115610b3157610b31612fe0565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156131e057600080fd5b8151612eed81612e8f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561323b5784516001600160a01b031683529383019391830191600101613216565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561327157600080fd5b835192506020840151915060408401519050925092509256fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220614e28df4750e380354c0da0c74e7b28798e5e8f93b9c8c6a96fd3a8dac9dd8364736f6c63430008110033

Deployed Bytecode Sourcemap

15704:17791:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31563:39;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;31563:39:0;;;;;;;;21144:461;;;;;;;;;;-1:-1:-1;21144:461:0;;;;;:::i;:::-;;:::i;:::-;;10989:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11903:169::-;;;;;;;;;;-1:-1:-1;11903:169:0;;;;;:::i;:::-;;:::i;:::-;;;1646:14:1;;1639:22;1621:41;;1609:2;1594:18;11903:169:0;1481:187:1;15787:41:0;;;;;;;;;;-1:-1:-1;15787:41:0;;;;-1:-1:-1;;;;;15787:41:0;;;;;;-1:-1:-1;;;;;1863:55:1;;;1845:74;;1833:2;1818:18;15787:41:0;1673:252:1;11310:108:0;;;;;;;;;;-1:-1:-1;11398:12:0;;11310:108;;33351:141;;;;;;;;;;-1:-1:-1;33351:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;33450:34:0;33426:4;33450:34;;;:25;:34;;;;;;;;;33351:141;30044:36;;;;;;;;;;-1:-1:-1;30044:36:0;;;;;;;;12080:573;;;;;;;;;;-1:-1:-1;12080:573:0;;;;;:::i;:::-;;:::i;30622:340::-;;;;;;;;;;-1:-1:-1;30622:340:0;;;;;:::i;:::-;;:::i;30334:280::-;;;;;;;;;;-1:-1:-1;30334:280:0;;;;;:::i;:::-;;:::i;31514:42::-;;;;;;;;;;-1:-1:-1;31514:42:0;;;;;;;;15975:34;;;;;;;;;;;;;;;;11209:93;;;;;;;;;;-1:-1:-1;11209:93:0;;11292:2;3339:36:1;;3327:2;3312:18;11209:93:0;3197:184:1;12661:215:0;;;;;;;;;;-1:-1:-1;12661:215:0;;;;;:::i;:::-;;:::i;15835:29::-;;;;;;;;;;-1:-1:-1;15835:29:0;;;;-1:-1:-1;;;;;15835:29:0;;;22117:26;;;;;;;;;;-1:-1:-1;22117:26:0;;;;;;;;;;;20555:125;;;;;;;;;;-1:-1:-1;20555:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;20644:28:0;20620:4;20644:28;;;:19;:28;;;;;;;;;20555:125;31928:311;;;;;;;;;;-1:-1:-1;31928:311:0;;;;;:::i;:::-;;:::i;31609:40::-;;;;;;;;;;;;;;;;16018:33;;;;;;;;;;;;;;;;20688:448;;;;;;;;;;-1:-1:-1;20688:448:0;;;;;:::i;:::-;;:::i;16294:26::-;;;;;;;;;;-1:-1:-1;16294:26:0;;;;;;;;;;;11426:127;;;;;;;;;;-1:-1:-1;11426:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;11527:18:0;11500:7;11527:18;;;;;;;;;;;;11426:127;10176:148;;;;;;;;;;;;;:::i;16180:31::-;;;;;;;;;;-1:-1:-1;16180:31:0;;;;-1:-1:-1;;;;;16180:31:0;;;16329:25;;;;;;;;;;;;;;;;15935:33;;;;;;;;;;;;;;;;32944:399;;;;;;;;;;-1:-1:-1;32944:399:0;;;;;:::i;:::-;;:::i;22152:248::-;;;;;;;;;;;;;:::i;9962:79::-;;;;;;;;;;-1:-1:-1;10027:6:0;;-1:-1:-1;;;;;10027:6:0;9962:79;;11097:104;;;;;;;;;;;;;:::i;12884:413::-;;;;;;;;;;-1:-1:-1;12884:413:0;;;;;:::i;:::-;;:::i;31296:145::-;;;;;;;;;;-1:-1:-1;31296:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;31395:38:0;31371:4;31395:38;;;:29;:38;;;;;;;;;31296:145;11561:175;;;;;;;;;;-1:-1:-1;11561:175:0;;;;;:::i;:::-;;:::i;30087:30::-;;;;;;;;;;;;;;;;28124:304;;;;;;;;;;-1:-1:-1;28124:304:0;;;;;:::i;:::-;;:::i;32247:689::-;;;;;;;;;;-1:-1:-1;32247:689:0;;;;;:::i;:::-;;:::i;21730:379::-;;;;;;;;;;-1:-1:-1;21730:379:0;;;;;:::i;:::-;;:::i;16361:31::-;;;;;;;;;;-1:-1:-1;16361:31:0;;;;;;;;20257:290;;;;;;;;;;-1:-1:-1;20257:290:0;;;;;:::i;:::-;;:::i;21613:109::-;;;;;;;;;;-1:-1:-1;21613:109:0;;;;;:::i;:::-;;:::i;30970:318::-;;;;;;;;;;-1:-1:-1;30970:318:0;;;;;:::i;:::-;;:::i;16058:34::-;;;;;;;;;;;;;;;;11744:151;;;;;;;;;;-1:-1:-1;11744:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;11860:18:0;;;11833:7;11860:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11744:151;27937:179;;;;;;;;;;-1:-1:-1;27937:179:0;;;;;:::i;:::-;;:::i;16220:34::-;;;;;;;;;;;;;;;;10332:244;;;;;;;;;;-1:-1:-1;10332:244:0;;;;;:::i;:::-;;:::i;19784:465::-;;;;;;;;;;-1:-1:-1;19784:465:0;;;;;:::i;:::-;;:::i;21144:461::-;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;;;;;;;;;21256:18:::1;:40:::0;;;21307:18:::1;:40:::0;;;21381:39:::1;21328:19:::0;21277;21381:39:::1;:::i;:::-;21360:16;:60:::0;;;21441:15:::1;::::0;21479:5:::1;::::0;21441:34:::1;::::0;::::1;:::i;:::-;:43;;21433:92;;;::::0;-1:-1:-1;;;21433:92:0;;5222:2:1;21433:92:0::1;::::0;::::1;5204:21:1::0;5261:2;5241:18;;;5234:30;5300:34;5280:18;;;5273:62;-1:-1:-1;;;5351:18:1;;;5344:34;5395:19;;21433:92:0::1;5020:400:1::0;21433:92:0::1;21543:54;21558:18;;21578;;21543:54;;;;;;5599:25:1::0;;;5655:2;5640:18;;5633:34;5587:2;5572:18;;5425:248;21543:54:0::1;;;;;;;;21144:461:::0;;:::o;10989:100::-;11043:13;11076:5;11069:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10989:100;:::o;11903:169::-;11986:4;12003:39;9365:10;12026:7;12035:6;12003:8;:39::i;:::-;-1:-1:-1;12060:4:0;11903:169;;;;;:::o;12080:573::-;-1:-1:-1;;;;;12264:19:0;;12220:4;12264:19;;;:11;:19;;;;;;;;9365:10;12264:33;;;;;;;;-1:-1:-1;;12312:37:0;;12308:265;;12394:6;12374:16;:26;;12366:79;;;;-1:-1:-1;;;12366:79:0;;6265:2:1;12366:79:0;;;6247:21:1;6304:2;6284:18;;;6277:30;6343:34;6323:18;;;6316:62;6414:10;6394:18;;;6387:38;6442:19;;12366:79:0;6063:404:1;12366:79:0;12489:57;12498:6;9365:10;12539:6;12520:16;:25;12489:8;:57::i;:::-;12585:36;12595:6;12603:9;12614:6;12585:9;:36::i;:::-;-1:-1:-1;12641:4:0;;12080:573;-1:-1:-1;;;;12080:573:0:o;30622:340::-;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;4397:356:1;10081:67:0;30773:3:::1;30752:16;11292:2:::0;30752::::1;:16;:::i;:::-;11398:12:::0;;30735:34:::1;;;;:::i;:::-;30734:42;;;;:::i;:::-;30714:16;:62;;30706:120;;;::::0;-1:-1:-1;;;30706:120:0;;8279:2:1;30706:120:0::1;::::0;::::1;8261:21:1::0;8318:2;8298:18;;;8291:30;8357:34;8337:18;;;8330:62;8428:15;8408:18;;;8401:43;8461:19;;30706:120:0::1;8077:409:1::0;30706:120:0::1;30875:16;11292:2:::0;30875::::1;:16;:::i;:::-;30855:37;::::0;:16;:37:::1;:::i;:::-;30837:15;:55:::0;;;30910:44:::1;::::0;160:25:1;;;30910:44:0::1;::::0;148:2:1;133:18;30910:44:0::1;;;;;;;;30622:340:::0;:::o;30334:280::-;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;4397:356:1;10081:67:0;30428:21:::1;::::0;::::1;;30418:31;;::::0;::::1;;::::0;30410:88:::1;;;::::0;-1:-1:-1;;;30410:88:0;;8866:2:1;30410:88:0::1;::::0;::::1;8848:21:1::0;8905:2;8885:18;;;8878:30;8944:34;8924:18;;;8917:62;9015:15;8995:18;;;8988:43;9048:19;;30410:88:0::1;8664:409:1::0;30410:88:0::1;30509:21;:30:::0;;-1:-1:-1;;30509:30:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30557:49:::1;::::0;30509:30:::1;30584:21:::0;;;1646:14:1;1639:22;1621:41;;30557:49:0::1;::::0;1609:2:1;1594:18;30557:49:0::1;1481:187:1::0;12661:215:0;9365:10;12749:4;12798:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12798:34:0;;;;;;;;;;12749:4;;12766:80;;12789:7;;12798:47;;12835:10;;12798:47;:::i;:::-;12766:8;:80::i;31928:311::-;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;4397:356:1;10081:67:0;32027:26:::1;::::0;::::1;;32017:36;;::::0;::::1;;::::0;32009:99:::1;;;::::0;-1:-1:-1;;;32009:99:0;;9280:2:1;32009:99:0::1;::::0;::::1;9262:21:1::0;9319:2;9299:18;;;9292:30;9358:34;9338:18;;;9331:62;9429:20;9409:18;;;9402:48;9467:19;;32009:99:0::1;9078:414:1::0;32009:99:0::1;32119:26;:35:::0;;-1:-1:-1;;32119:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32172:59:::1;::::0;32119:35:::1;32204:26:::0;;;1646:14:1;1639:22;1621:41;;32172:59:0::1;::::0;1609:2:1;1594:18;32172:59:0::1;1481:187:1::0;20688:448:0;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;4397:356:1;10081:67:0;20797:17:::1;:38:::0;;;20846:17:::1;:38:::0;;;20917:37:::1;20866:18:::0;20817;20917:37:::1;:::i;:::-;20897:15;:57:::0;;;20993:16:::1;::::0;21013:5:::1;::::0;20975:34:::1;::::0;20993:16;20975:34:::1;:::i;:::-;:43;;20967:92;;;::::0;-1:-1:-1;;;20967:92:0;;5222:2:1;20967:92:0::1;::::0;::::1;5204:21:1::0;5261:2;5241:18;;;5234:30;5300:34;5280:18;;;5273:62;-1:-1:-1;;;5351:18:1;;;5344:34;5395:19;;20967:92:0::1;5020:400:1::0;20967:92:0::1;21077:51;21091:17;;21110;;21077:51;;;;;;5599:25:1::0;;;5655:2;5640:18;;5633:34;5587:2;5572:18;;5425:248;10176:148:0;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;4397:356:1;10081:67:0;10267:6:::1;::::0;10246:40:::1;::::0;10283:1:::1;::::0;-1:-1:-1;;;;;10267:6:0::1;::::0;10246:40:::1;::::0;10283:1;;10246:40:::1;10297:6;:19:::0;;-1:-1:-1;;10297:19:0::1;::::0;;10176:148::o;32944:399::-;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;4397:356:1;10081:67:0;-1:-1:-1;;;;;33054:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;:45;::::1;;:34;::::0;;::::1;:45;;::::0;33045:95:::1;;;::::0;-1:-1:-1;;;33045:95:0;;9699:2:1;33045:95:0::1;::::0;::::1;9681:21:1::0;9738:2;9718:18;;;9711:30;9777:34;9757:18;;;9750:62;-1:-1:-1;;;9828:18:1;;;9821:34;9872:19;;33045:95:0::1;9497:400:1::0;33045:95:0::1;33178:4;-1:-1:-1::0;;;;;33159:24:0;::::1;::::0;33151:60:::1;;;::::0;-1:-1:-1;;;33151:60:0;;10104:2:1;33151:60:0::1;::::0;::::1;10086:21:1::0;10143:2;10123:18;;;10116:30;10182:25;10162:18;;;10155:53;10225:18;;33151:60:0::1;9902:347:1::0;33151:60:0::1;-1:-1:-1::0;;;;;33224:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;;;;:44;;-1:-1:-1;;33224:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33286:49;;1621:41:1;;;33286:49:0::1;::::0;1594:18:1;33286:49:0::1;;;;;;;;32944:399:::0;;:::o;22152:248::-;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;4397:356:1;10081:67:0;22215:14:::1;::::0;::::1;::::0;::::1;;;22214:15;22206:52;;;::::0;-1:-1:-1;;;22206:52:0;;10456:2:1;22206:52:0::1;::::0;::::1;10438:21:1::0;10495:2;10475:18;;;10468:30;10534:26;10514:18;;;10507:54;10578:18;;22206:52:0::1;10254:348:1::0;22206:52:0::1;22269:14;:21:::0;;22301:11:::1;:18:::0;;-1:-1:-1;;22301:18:0::1;22269:21;22301:18;::::0;;22343:15:::1;22330:10;:28:::0;22369:23;-1:-1:-1;;22369:23:0;;;;;;22152:248::o;11097:104::-;11153:13;11186:7;11179:14;;;;;:::i;12884:413::-;9365:10;12977:4;13021:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13021:34:0;;;;;;;;;;13074:35;;;;13066:85;;;;-1:-1:-1;;;13066:85:0;;10809:2:1;13066:85:0;;;10791:21:1;10848:2;10828:18;;;10821:30;10887:34;10867:18;;;10860:62;10958:7;10938:18;;;10931:35;10983:19;;13066:85:0;10607:401:1;13066:85:0;13187:67;9365:10;13210:7;13238:15;13219:16;:34;13187:8;:67::i;:::-;-1:-1:-1;13285:4:0;;12884:413;-1:-1:-1;;;12884:413:0:o;11561:175::-;11647:4;11664:42;9365:10;11688:9;11699:6;11664:9;:42::i;28124:304::-;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;4397:356:1;10081:67:0;28239:9:::1;28223:13;11398:12:::0;;;11310:108;28223:13:::1;:25;;;;:::i;:::-;28211:9;:37;28203:113;;;::::0;-1:-1:-1;;;28203:113:0;;11215:2:1;28203:113:0::1;::::0;::::1;11197:21:1::0;11254:2;11234:18;;;11227:30;11293:34;11273:18;;;11266:62;11364:33;11344:18;;;11337:61;11415:19;;28203:113:0::1;11013:427:1::0;28203:113:0::1;28327:18;:30:::0;;;28375:45:::1;::::0;160:25:1;;;28375:45:0::1;::::0;148:2:1;133:18;28375:45:0::1;14:177:1::0;32247:689:0;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;4397:356:1;10081:67:0;32470:5:::1;32449:16;11292:2:::0;32449::::1;:16;:::i;:::-;11398:12:::0;;32432:34:::1;;;;:::i;:::-;32431:44;;;;:::i;:::-;32402:24;:73;;:164;;;;-1:-1:-1::0;32561:5:0::1;32540:16;11292:2:::0;32540::::1;:16;:::i;:::-;11398:12:::0;;32523:34:::1;;;;:::i;:::-;32522:44;;;;:::i;:::-;32493:25;:73;;32402:164;32380:278;;;::::0;-1:-1:-1;;;32380:278:0;;11647:2:1;32380:278:0::1;::::0;::::1;11629:21:1::0;11686:2;11666:18;;;11659:30;11725:34;11705:18;;;11698:62;11796:33;11776:18;;;11769:61;11847:19;;32380:278:0::1;11445:427:1::0;32380:278:0::1;32726:16;11292:2:::0;32726::::1;:16;:::i;:::-;32697:46;::::0;:24;:46:::1;:::i;:::-;32670:23;:73:::0;32810:16:::1;11292:2:::0;32810::::1;:16;:::i;:::-;32781:46;::::0;:25;:46:::1;:::i;:::-;32754:24;:73:::0;;;32878:23:::1;::::0;32845:83:::1;::::0;::::1;::::0;::::1;::::0;5599:25:1;;5655:2;5640:18;;5633:34;5587:2;5572:18;;5425:248;21730:379:0;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;4397:356:1;10081:67:0;21844:15:::1;::::0;-1:-1:-1;;;;;21844:15:0;;::::1;21824:35:::0;;::::1;::::0;21816:87:::1;;;::::0;-1:-1:-1;;;21816:87:0;;12079:2:1;21816:87:0::1;::::0;::::1;12061:21:1::0;12118:2;12098:18;;;12091:30;12157:34;12137:18;;;12130:62;12228:10;12208:18;;;12201:38;12256:19;;21816:87:0::1;11877:404:1::0;21816:87:0::1;-1:-1:-1::0;;;;;21922:30:0;::::1;21914:85;;;::::0;-1:-1:-1;;;21914:85:0;;12488:2:1;21914:85:0::1;::::0;::::1;12470:21:1::0;12527:2;12507:18;;;12500:30;12566:34;12546:18;;;12539:62;12637:13;12617:18;;;12610:41;12668:19;;21914:85:0::1;12286:407:1::0;21914:85:0::1;22010:15;:34:::0;;-1:-1:-1;;22010:34:0::1;-1:-1:-1::0;;;;;22010:34:0;::::1;::::0;;::::1;::::0;;;22062:39:::1;::::0;1845:74:1;;;22062:39:0::1;::::0;1833:2:1;1818:18;22062:39:0::1;1673:252:1::0;20257:290:0;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;4397:356:1;10081:67:0;-1:-1:-1;;;;;20351:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;20343:94:::1;;;::::0;-1:-1:-1;;;20343:94:0;;12900:2:1;20343:94:0::1;::::0;::::1;12882:21:1::0;12939:2;12919:18;;;12912:30;12978:34;12958:18;;;12951:62;13049:12;13029:18;;;13022:40;13079:19;;20343:94:0::1;12698:406:1::0;20343:94:0::1;-1:-1:-1::0;;;;;20448:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20448:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20505:34;;1621:41:1;;;20505:34:0::1;::::0;1594:18:1;20505:34:0::1;1481:187:1::0;21613:109:0;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;4397:356:1;10081:67:0;21687:16:::1;:27:::0;;-1:-1:-1;;21687:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21613:109::o;30970:318::-;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;4397:356:1;10081:67:0;-1:-1:-1;;;;;31070:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:49;::::1;;:38;::::0;;::::1;:49;;::::0;31061:98:::1;;;::::0;-1:-1:-1;;;31061:98:0;;9699:2:1;31061:98:0::1;::::0;::::1;9681:21:1::0;9738:2;9718:18;;;9711:30;9777:34;9757:18;;;9750:62;-1:-1:-1;;;9828:18:1;;;9821:34;9872:19;;31061:98:0::1;9497:400:1::0;31061:98:0::1;-1:-1:-1::0;;;;;31170:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;31170:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31236:44;;1621:41:1;;;31236:44:0::1;::::0;1594:18:1;31236:44:0::1;1481:187:1::0;27937:179:0;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;4397:356:1;10081:67:0;28028:8:::1;28013:23;;:11;;;;;;;;;;;:23;;::::0;28005:70:::1;;;::::0;-1:-1:-1;;;28005:70:0;;13311:2:1;28005:70:0::1;::::0;::::1;13293:21:1::0;13350:2;13330:18;;;13323:30;13389:34;13369:18;;;13362:62;-1:-1:-1;;;13440:18:1;;;13433:32;13482:19;;28005:70:0::1;13109:398:1::0;28005:70:0::1;28086:11;:22:::0;;;::::1;;;;-1:-1:-1::0;;28086:22:0;;::::1;::::0;;;::::1;::::0;;27937:179::o;10332:244::-;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;4397:356:1;10081:67:0;-1:-1:-1;;;;;10421:22:0;::::1;10413:73;;;::::0;-1:-1:-1;;;10413:73:0;;13714:2:1;10413:73:0::1;::::0;::::1;13696:21:1::0;13753:2;13733:18;;;13726:30;13792:34;13772:18;;;13765:62;13863:8;13843:18;;;13836:36;13889:19;;10413:73:0::1;13512:402:1::0;10413:73:0::1;10523:6;::::0;10502:38:::1;::::0;-1:-1:-1;;;;;10502:38:0;;::::1;::::0;10523:6:::1;::::0;10502:38:::1;::::0;10523:6:::1;::::0;10502:38:::1;10551:6;:17:::0;;-1:-1:-1;;10551:17:0::1;-1:-1:-1::0;;;;;10551:17:0;;;::::1;::::0;;;::::1;::::0;;10332:244::o;19784:465::-;10089:6;;-1:-1:-1;;;;;10089:6:0;9365:10;10089:22;10081:67;;;;-1:-1:-1;;;10081:67:0;;4599:2:1;10081:67:0;;;4581:21:1;;;4618:18;;;4611:30;-1:-1:-1;;;;;;;;;;;4657:18:1;;;4650:62;4729:18;;10081:67:0;4397:356:1;10081:67:0;19880:4:::1;-1:-1:-1::0;;;;;19863:22:0;::::1;::::0;19855:90:::1;;;::::0;-1:-1:-1;;;19855:90:0;;14121:2:1;19855:90:0::1;::::0;::::1;14103:21:1::0;14160:2;14140:18;;;14133:30;14199:34;14179:18;;;14172:62;14270:25;14250:18;;;14243:53;14313:19;;19855:90:0::1;13919:419:1::0;19855:90:0::1;-1:-1:-1::0;;;;;19960:21:0;::::1;19956:127;;19998:52;20006:10;20028:21;19998:29;:52::i;:::-;;19784:465:::0;:::o;19956:127::-:1;20155:35;::::0;-1:-1:-1;;;20155:35:0;;20184:4:::1;20155:35;::::0;::::1;1845:74:1::0;20120:5:0;;20093:17:::1;::::0;-1:-1:-1;;;;;20155:20:0;::::1;::::0;::::1;::::0;1818:18:1;;20155:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20201:40;::::0;-1:-1:-1;;;20201:40:0;;20221:10:::1;20201:40;::::0;::::1;14706:74:1::0;14796:18;;;14789:34;;;20137:53:0;;-1:-1:-1;;;;;;20201:19:0;::::1;::::0;::::1;::::0;14679:18:1;;20201:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19844:405;;10159:1;19784:465:::0;:::o;15052:380::-;-1:-1:-1;;;;;15188:19:0;;15180:68;;;;-1:-1:-1;;;15180:68:0;;15286:2:1;15180:68:0;;;15268:21:1;15325:2;15305:18;;;15298:30;15364:34;15344:18;;;15337:62;-1:-1:-1;;;15415:18:1;;;15408:34;15459:19;;15180:68:0;15084:400:1;15180:68:0;-1:-1:-1;;;;;15267:21:0;;15259:68;;;;-1:-1:-1;;;15259:68:0;;15691:2:1;15259:68:0;;;15673:21:1;15730:2;15710:18;;;15703:30;15769:34;15749:18;;;15742:62;-1:-1:-1;;;15820:18:1;;;15813:32;15862:19;;15259:68:0;15489:398:1;15259:68:0;-1:-1:-1;;;;;15340:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15392:32;;160:25:1;;;15392:32:0;;133:18:1;15392:32:0;;;;;;;15052:380;;;:::o;22408:5521::-;-1:-1:-1;;;;;22505:18:0;;22497:68;;;;-1:-1:-1;;;22497:68:0;;16094:2:1;22497:68:0;;;16076:21:1;16133:2;16113:18;;;16106:30;16172:34;16152:18;;;16145:62;-1:-1:-1;;;16223:18:1;;;16216:35;16268:19;;22497:68:0;15892:401:1;22497:68:0;-1:-1:-1;;;;;22584:16:0;;22576:64;;;;-1:-1:-1;;;22576:64:0;;16500:2:1;22576:64:0;;;16482:21:1;16539:2;16519:18;;;16512:30;16578:34;16558:18;;;16551:62;-1:-1:-1;;;16629:18:1;;;16622:33;16672:19;;22576:64:0;16298:399:1;22576:64:0;22659:14;;;;;;;;:43;;-1:-1:-1;;;;;;22677:25:0;;;;;;:19;:25;;;;;;;;22659:43;:70;;;-1:-1:-1;;;;;;22706:23:0;;;;;;:19;:23;;;;;;;;22659:70;22651:107;;;;-1:-1:-1;;;22651:107:0;;16904:2:1;22651:107:0;;;16886:21:1;16943:2;16923:18;;;16916:30;16982:26;16962:18;;;16955:54;17026:18;;22651:107:0;16702:348:1;22651:107:0;22782:6;22792:1;22782:11;22778:93;;22810:28;22826:4;22832:2;22836:1;22810:15;:28::i;:::-;22408:5521;;;:::o;22778:93::-;22887:26;;;;22883:752;;;22953:13;;-1:-1:-1;;;;;22945:21:0;;;22953:13;;22945:21;;:44;;-1:-1:-1;22976:13:0;;-1:-1:-1;;;;;22970:19:0;;;22976:13;;22970:19;22945:44;22944:99;;;;-1:-1:-1;;;;;;23012:31:0;;;;;;:25;:31;;;;;;;;23011:32;22944:99;:151;;;;-1:-1:-1;;;;;;23066:29:0;;;;;;:25;:29;;;;;;;;23065:30;22944:151;22940:684;;;23142:13;;-1:-1:-1;;;;;23142:13:0;;;23134:21;;;;23130:479;;23224:23;;23214:6;:33;;23180:180;;;;-1:-1:-1;;;23180:180:0;;17257:2:1;23180:180:0;;;17239:21:1;17296:2;17276:18;;;17269:30;17335:34;17315:18;;;17308:62;17406:29;17386:18;;;17379:57;17453:19;;23180:180:0;17055:423:1;23180:180:0;23130:479;;;23453:24;;23443:6;:34;;23409:180;;;;-1:-1:-1;;;23409:180:0;;17257:2:1;23409:180:0;;;17239:21:1;17296:2;17276:18;;;17269:30;17335:34;17315:18;;;17308:62;17406:29;17386:18;;;17379:57;17453:19;;23409:180:0;17055:423:1;23409:180:0;23650:16;;;;23647:2147;;;23706:15;23686:10;;23699:4;23686:17;;;;:::i;:::-;:35;23683:2100;;;23762:2;23741:17;:23;;;23812:1;23791:18;:22;;;23839:17;:22;;;23885:18;:22;;;23954:38;;;:::i;:::-;23933:15;:59;24053:18;;24032;;:39;;24053:18;24032:39;:::i;:::-;24011:16;:60;24092:16;:24;;-1:-1:-1;;24092:24:0;;;23683:2100;;;24161:15;24141:10;;24154:4;24141:17;;;;:::i;:::-;:35;24138:1645;;;24217:1;24196:17;:22;;;24242:18;:22;;;24311:3;24290:17;:24;;;24338:18;:24;;;24409:38;;;:::i;:::-;24388:15;:59;24508:18;;24487;;:39;;24508:18;24487:39;:::i;:::-;24466:16;:60;24138:1645;;;24571:15;24551:10;;24564:4;24551:17;;;;:::i;:::-;:35;24548:1235;;;24627:1;24606:17;:22;;;24652:18;:22;;;24721:4;24700:17;:25;;;24750:18;:25;;;24823:38;;;:::i;24548:1235::-;24985:15;24965:10;;24978:4;24965:17;;;;:::i;:::-;:35;24962:821;;;25041:1;25020:17;:22;;;25066:18;:22;;;25135:4;25114:17;:25;;;25164:18;:25;;;25237:38;;;:::i;24962:821::-;25398:15;25379:10;;25392:3;25379:16;;;;:::i;:::-;:34;25376:407;;;25454:1;25433:17;:22;;;25479:18;:22;;;25548:4;25527:17;:25;;;25577:18;:25;;;25650:38;;;:::i;:::-;25629:15;:59;25749:18;;25728;;:39;;25749:18;25728:39;:::i;:::-;25707:16;:60;25376:407;25849:4;25800:28;11527:18;;;;;;;;;;;25907;;25883:42;;;;;;;25942:33;;-1:-1:-1;25967:8:0;;;;25966:9;25942:33;:69;;;;-1:-1:-1;25998:13:0;;-1:-1:-1;;;;;25992:19:0;;;25998:13;;25992:19;25942:69;:124;;;;;26065:1;26046:16;;26028:15;;:34;;;;:::i;:::-;:38;25942:124;:152;;;;-1:-1:-1;26083:11:0;;;;;;;25942:152;25938:895;;;26121:8;:15;;-1:-1:-1;;26121:15:0;26132:4;26121:15;;;26190:16;;26172:15;;26121:8;;26172:34;;;:::i;:::-;26153:53;;26221:22;26266:18;;26246:17;;:38;;;;:::i;:::-;26221:63;;26299:22;26344:18;;26324:17;;:38;;;;:::i;:::-;26299:63;-1:-1:-1;26383:18:0;;26379:183;;26422:23;26488:8;26448:37;26471:14;26448:20;:37;:::i;:::-;:48;;;;:::i;:::-;26422:74;;26515:31;26530:15;26515:14;:31::i;:::-;26403:159;26379:183;26594:18;;26590:189;;26633:23;26699:8;26659:37;26682:14;26659:20;:37;:::i;:::-;:48;;;;:::i;:::-;26633:74;;26726:37;26747:15;26726:20;:37::i;:::-;26614:165;26590:189;-1:-1:-1;;26805:8:0;:16;;-1:-1:-1;;26805:16:0;;;-1:-1:-1;25938:895:0;-1:-1:-1;;;;;26878:25:0;;26845:18;26878:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;26907:23:0;;;;;;:19;:23;;;;;;;;26878:52;:64;;;-1:-1:-1;26934:8:0;;;;26878:64;26874:333;;;-1:-1:-1;26972:1:0;26874:333;;;27003:13;;-1:-1:-1;;;;;27003:13:0;;;26995:21;;;;26991:216;;-1:-1:-1;27046:15:0;;26991:216;;;27089:13;;-1:-1:-1;;;;;27089:13:0;;;27083:19;;;;27079:128;;-1:-1:-1;27132:16:0;;27079:128;;;-1:-1:-1;27194:1:0;27079:128;27223:14;;27219:186;;27254:12;27293:6;27270:19;27279:10;27270:6;:19;:::i;:::-;27269:30;;;;:::i;:::-;27254:45;-1:-1:-1;27323:13:0;27254:45;27323:6;:13;:::i;:::-;27314:22;;27351:42;27367:4;27381;27388;27351:15;:42::i;:::-;27239:166;27219:186;27421:21;;;;27417:459;;;-1:-1:-1;;;;;27474:35:0;;;;;;:29;:35;;;;;;;;27473:36;:92;;;;-1:-1:-1;;;;;;27532:33:0;;;;;;:29;:33;;;;;;;;27531:34;27473:92;:132;;;;-1:-1:-1;27592:13:0;;-1:-1:-1;;;;;27586:19:0;;;27592:13;;27586:19;;27473:132;27469:396;;;-1:-1:-1;;;;;11527:18:0;;27640:15;11527:18;;;;;;;;;;;27741:15;;27721:16;27731:6;11527:18;27721:16;:::i;:::-;:35;;27691:158;;;;-1:-1:-1;;;27691:158:0;;17818:2:1;27691:158:0;;;17800:21:1;17857:2;17837:18;;;17830:30;17896:34;17876:18;;;17869:62;17967:18;17947;;;17940:46;18003:19;;27691:158:0;17616:412:1;27691:158:0;27621:244;27469:396;27888:33;27904:4;27910:2;27914:6;27888:15;:33::i;:::-;22486:5443;;;22408:5521;;;:::o;8979:266::-;9058:4;9107:6;9082:21;:31;;9074:73;;;;-1:-1:-1;;;9074:73:0;;18235:2:1;9074:73:0;;;18217:21:1;18274:2;18254:18;;;18247:30;18313:31;18293:18;;;18286:59;18362:18;;9074:73:0;18033:353:1;9074:73:0;9161:12;9179:9;-1:-1:-1;;;;;9179:14:0;9201:6;9179:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9160:52:0;;8979:266;-1:-1:-1;;;;;8979:266:0:o;13305:733::-;-1:-1:-1;;;;;13445:20:0;;13437:70;;;;-1:-1:-1;;;13437:70:0;;16094:2:1;13437:70:0;;;16076:21:1;16133:2;16113:18;;;16106:30;16172:34;16152:18;;;16145:62;-1:-1:-1;;;16223:18:1;;;16216:35;16268:19;;13437:70:0;15892:401:1;13437:70:0;-1:-1:-1;;;;;13526:23:0;;13518:71;;;;-1:-1:-1;;;13518:71:0;;16500:2:1;13518:71:0;;;16482:21:1;16539:2;16519:18;;;16512:30;16578:34;16558:18;;;16551:62;-1:-1:-1;;;16629:18:1;;;16622:33;16672:19;;13518:71:0;16298:399:1;13518:71:0;-1:-1:-1;;;;;13686:17:0;;13662:21;13686:17;;;;;;;;;;;13722:23;;;;13714:74;;;;-1:-1:-1;;;13714:74:0;;18803:2:1;13714:74:0;;;18785:21:1;18842:2;18822:18;;;18815:30;18881:34;18861:18;;;18854:62;18952:8;18932:18;;;18925:36;18978:19;;13714:74:0;18601:402:1;13714:74:0;-1:-1:-1;;;;;13824:17:0;;;:9;:17;;;;;;;;;;;13844:22;;;13824:42;;13888:20;;;;;;;;:30;;13860:6;;13824:9;13888:30;;13860:6;;13888:30;:::i;:::-;;;;;;;;13953:9;-1:-1:-1;;;;;13936:35:0;13945:6;-1:-1:-1;;;;;13936:35:0;;13964:6;13936:35;;;;160:25:1;;148:2;133:18;;14:177;13936:35:0;;;;;;;;13984:46;22408:5521;28436:876;28495:12;28510:10;28519:1;28510:6;:10;:::i;:::-;28495:25;-1:-1:-1;28531:17:0;28551:13;28495:25;28551:6;:13;:::i;:::-;28660:16;;;28674:1;28660:16;;;;;;;;28531:33;;-1:-1:-1;28602:21:0;;28577:22;;28660:16;;;;;;;;;;-1:-1:-1;28660:16:0;28636:40;;28705:4;28687;28692:1;28687:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28687:23:0;;;:7;;;;;;;;;;:23;;;;28731:15;;:22;;;-1:-1:-1;;;28731:22:0;;;;:15;;;;;:20;;:22;;;;;28687:7;;28731:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28721:4;28726:1;28721:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28721:32:0;;;:7;;;;;;;;;:32;28766:15;;:179;;-1:-1:-1;;;28766:179:0;;:15;;;:66;;:179;;28847:4;;28766:15;;28882:4;;28909;;28929:15;;28766:179;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28966:18;29011:14;28987:21;:38;;;;:::i;:::-;29038:15;;:205;;-1:-1:-1;;;29038:205:0;;29111:4;29038:205;;;20923:34:1;20973:18;;;20966:34;;;29038:15:0;21016:18:1;;;21009:34;;;21059:18;;;21052:34;29195:6:0;21102:19:1;;;21095:44;29217:15:0;21155:19:1;;;21148:35;28966:59:0;;-1:-1:-1;;;;;;29038:15:0;;:31;;28966:59;;20834:19:1;;29038:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;29261:43:0;;;21707:25:1;;;21763:2;21748:18;;21741:34;;;21791:18;;;21784:34;;;29261:43:0;;-1:-1:-1;21695:2:1;21680:18;29261:43:0;;;;;;;28484:828;;;;;28436:876;:::o;29320:647::-;29473:16;;;29487:1;29473:16;;;;;;;;29415:21;;29390:22;;29473:16;29487:1;29473:16;;;;;;;;;;-1:-1:-1;29473:16:0;29449:40;;29518:4;29500;29505:1;29500:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29500:23:0;;;:7;;;;;;;;;;:23;;;;29544:15;;:22;;;-1:-1:-1;;;29544:22:0;;;;:15;;;;;:20;;:22;;;;;29500:7;;29544:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29534:4;29539:1;29534:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29534:32:0;;;:7;;;;;;;;;:32;29579:15;;:186;;-1:-1:-1;;;29579:186:0;;:15;;;:66;;:186;;29660:11;;29579:15;;29702:4;;29729;;29749:15;;29579:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29778:18;29823:14;29799:21;:38;;;;:::i;:::-;29858:15;;29778:59;;-1:-1:-1;29850:46:0;;-1:-1:-1;;;;;29858:15:0;29778:59;29850:34;:46::i;:::-;-1:-1:-1;29914:45:0;;;5599:25:1;;;5655:2;5640:18;;5633:34;;;29914:45:0;;5572:18:1;29914:45:0;;;;;;;29379:588;;;29320:647;:::o;196:248:1:-;264:6;272;325:2;313:9;304:7;300:23;296:32;293:52;;;341:1;338;331:12;293:52;-1:-1:-1;;364:23:1;;;434:2;419:18;;;406:32;;-1:-1:-1;196:248:1:o;449:548::-;561:4;590:2;619;608:9;601:21;651:6;645:13;694:6;689:2;678:9;674:18;667:34;719:1;729:140;743:6;740:1;737:13;729:140;;;838:14;;;834:23;;828:30;804:17;;;823:2;800:26;793:66;758:10;;729:140;;;733:3;918:1;913:2;904:6;893:9;889:22;885:31;878:42;988:2;981;977:7;972:2;964:6;960:15;956:29;945:9;941:45;937:54;929:62;;;;449:548;;;;:::o;1002:154::-;-1:-1:-1;;;;;1081:5:1;1077:54;1070:5;1067:65;1057:93;;1146:1;1143;1136:12;1161:315;1229:6;1237;1290:2;1278:9;1269:7;1265:23;1261:32;1258:52;;;1306:1;1303;1296:12;1258:52;1345:9;1332:23;1364:31;1389:5;1364:31;:::i;:::-;1414:5;1466:2;1451:18;;;;1438:32;;-1:-1:-1;;;1161:315:1:o;1930:247::-;1989:6;2042:2;2030:9;2021:7;2017:23;2013:32;2010:52;;;2058:1;2055;2048:12;2010:52;2097:9;2084:23;2116:31;2141:5;2116:31;:::i;:::-;2166:5;1930:247;-1:-1:-1;;;1930:247:1:o;2182:456::-;2259:6;2267;2275;2328:2;2316:9;2307:7;2303:23;2299:32;2296:52;;;2344:1;2341;2334:12;2296:52;2383:9;2370:23;2402:31;2427:5;2402:31;:::i;:::-;2452:5;-1:-1:-1;2509:2:1;2494:18;;2481:32;2522:33;2481:32;2522:33;:::i;:::-;2182:456;;2574:7;;-1:-1:-1;;;2628:2:1;2613:18;;;;2600:32;;2182:456::o;2643:180::-;2702:6;2755:2;2743:9;2734:7;2730:23;2726:32;2723:52;;;2771:1;2768;2761:12;2723:52;-1:-1:-1;2794:23:1;;2643:180;-1:-1:-1;2643:180:1:o;2828:118::-;2914:5;2907:13;2900:21;2893:5;2890:32;2880:60;;2936:1;2933;2926:12;2951:241;3007:6;3060:2;3048:9;3039:7;3035:23;3031:32;3028:52;;;3076:1;3073;3066:12;3028:52;3115:9;3102:23;3134:28;3156:5;3134:28;:::i;3617:382::-;3682:6;3690;3743:2;3731:9;3722:7;3718:23;3714:32;3711:52;;;3759:1;3756;3749:12;3711:52;3798:9;3785:23;3817:31;3842:5;3817:31;:::i;:::-;3867:5;-1:-1:-1;3924:2:1;3909:18;;3896:32;3937:30;3896:32;3937:30;:::i;:::-;3986:7;3976:17;;;3617:382;;;;;:::o;4004:388::-;4072:6;4080;4133:2;4121:9;4112:7;4108:23;4104:32;4101:52;;;4149:1;4146;4139:12;4101:52;4188:9;4175:23;4207:31;4232:5;4207:31;:::i;:::-;4257:5;-1:-1:-1;4314:2:1;4299:18;;4286:32;4327:33;4286:32;4327:33;:::i;4758:127::-;4819:10;4814:3;4810:20;4807:1;4800:31;4850:4;4847:1;4840:15;4874:4;4871:1;4864:15;4890:125;4955:9;;;4976:10;;;4973:36;;;4989:18;;:::i;5678:380::-;5757:1;5753:12;;;;5800;;;5821:61;;5875:4;5867:6;5863:17;5853:27;;5821:61;5928:2;5920:6;5917:14;5897:18;5894:38;5891:161;;5974:10;5969:3;5965:20;5962:1;5955:31;6009:4;6006:1;5999:15;6037:4;6034:1;6027:15;5891:161;;5678:380;;;:::o;6472:422::-;6561:1;6604:5;6561:1;6618:270;6639:7;6629:8;6626:21;6618:270;;;6698:4;6694:1;6690:6;6686:17;6680:4;6677:27;6674:53;;;6707:18;;:::i;:::-;6757:7;6747:8;6743:22;6740:55;;;6777:16;;;;6740:55;6856:22;;;;6816:15;;;;6618:270;;;6622:3;6472:422;;;;;:::o;6899:806::-;6948:5;6978:8;6968:80;;-1:-1:-1;7019:1:1;7033:5;;6968:80;7067:4;7057:76;;-1:-1:-1;7104:1:1;7118:5;;7057:76;7149:4;7167:1;7162:59;;;;7235:1;7230:130;;;;7142:218;;7162:59;7192:1;7183:10;;7206:5;;;7230:130;7267:3;7257:8;7254:17;7251:43;;;7274:18;;:::i;:::-;-1:-1:-1;;7330:1:1;7316:16;;7345:5;;7142:218;;7444:2;7434:8;7431:16;7425:3;7419:4;7416:13;7412:36;7406:2;7396:8;7393:16;7388:2;7382:4;7379:12;7375:35;7372:77;7369:159;;;-1:-1:-1;7481:19:1;;;7513:5;;7369:159;7560:34;7585:8;7579:4;7560:34;:::i;:::-;7630:6;7626:1;7622:6;7618:19;7609:7;7606:32;7603:58;;;7641:18;;:::i;:::-;7679:20;;6899:806;-1:-1:-1;;;6899:806:1:o;7710:140::-;7768:5;7797:47;7838:4;7828:8;7824:19;7818:4;7797:47;:::i;7855:217::-;7895:1;7921;7911:132;;7965:10;7960:3;7956:20;7953:1;7946:31;8000:4;7997:1;7990:15;8028:4;8025:1;8018:15;7911:132;-1:-1:-1;8057:9:1;;7855:217::o;8491:168::-;8564:9;;;8595;;8612:15;;;8606:22;;8592:37;8582:71;;8633:18;;:::i;14343:184::-;14413:6;14466:2;14454:9;14445:7;14441:23;14437:32;14434:52;;;14482:1;14479;14472:12;14434:52;-1:-1:-1;14505:16:1;;14343:184;-1:-1:-1;14343:184:1:o;14834:245::-;14901:6;14954:2;14942:9;14933:7;14929:23;14925:32;14922:52;;;14970:1;14967;14960:12;14922:52;15002:9;14996:16;15021:28;15043:5;15021:28;:::i;17483:128::-;17550:9;;;17571:11;;;17568:37;;;17585:18;;:::i;19140:127::-;19201:10;19196:3;19192:20;19189:1;19182:31;19232:4;19229:1;19222:15;19256:4;19253:1;19246:15;19272:251;19342:6;19395:2;19383:9;19374:7;19370:23;19366:32;19363:52;;;19411:1;19408;19401:12;19363:52;19443:9;19437:16;19462:31;19487:5;19462:31;:::i;19528:1026::-;19790:4;19838:3;19827:9;19823:19;19869:6;19858:9;19851:25;19895:2;19933:6;19928:2;19917:9;19913:18;19906:34;19976:3;19971:2;19960:9;19956:18;19949:31;20000:6;20035;20029:13;20066:6;20058;20051:22;20104:3;20093:9;20089:19;20082:26;;20143:2;20135:6;20131:15;20117:29;;20164:1;20174:218;20188:6;20185:1;20182:13;20174:218;;;20253:13;;-1:-1:-1;;;;;20249:62:1;20237:75;;20367:15;;;;20332:12;;;;20210:1;20203:9;20174:218;;;-1:-1:-1;;;;;;;20448:55:1;;;;20443:2;20428:18;;20421:83;-1:-1:-1;;;20535:3:1;20520:19;20513:35;20409:3;19528:1026;-1:-1:-1;;;19528:1026:1:o;21194:306::-;21282:6;21290;21298;21351:2;21339:9;21330:7;21326:23;21322:32;21319:52;;;21367:1;21364;21357:12;21319:52;21396:9;21390:16;21380:26;;21446:2;21435:9;21431:18;21425:25;21415:35;;21490:2;21479:9;21475:18;21469:25;21459:35;;21194:306;;;;;:::o

Swarm Source

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