ETH Price: $3,321.02 (-3.72%)

Token

Junkyard Doge (JYD)
 

Overview

Max Total Supply

1,000,000,000,000 JYD

Holders

76

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
48,250,000.000000000845312787 JYD

Value
$0.00
0xf73c74813a774647a68e514b175e85836bc3c326
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:
JunkyardDoge

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity 0.8.16;

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

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

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) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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");

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, 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);
    }
}

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() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(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 swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    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 getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

contract TokenHandler is Ownable {
    function sendTokenToOwner(address token) external onlyOwner {
        if(IERC20(token).balanceOf(address(this)) > 0){
            IERC20(token).transfer(owner(), IERC20(token).balanceOf(address(this)));
        }
    }
}

contract JunkyardDoge is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public immutable dexRouter;
    address public immutable lpPair;

    IERC20 public immutable DC = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);

    bool private swapping;
    uint256 public swapTokensAtAmount;

    TokenHandler public tokenHandler;

    address public operationsAddress;
    address public reserveAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public restrictedWallets;
    address[] public earlyBuyers;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyReserveFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellReserveFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForOperations;
    uint256 public tokensForReserve;

    uint256 public constant FEE_DIVISOR = 10000;
    
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    mapping (address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event EnabledTrading();
    event RemovedLimits();
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdatedMaxBuyAmount(uint256 newAmount);
    event UpdatedMaxSellAmount(uint256 newAmount);
    event UpdatedMaxWalletAmount(uint256 newAmount);
    event UpdatedBuyFee(uint256 newAmount);
    event UpdatedSellFee(uint256 newAmount);
    event UpdatedOperationsAddress(address indexed newWallet);
    event UpdatedRewardsAddress(address indexed newWallet);
    event UpdatedReserveAddress(address indexed newWallet);
    event MaxTransactionExclusion(address _address, bool excluded);
    event OwnerForcedSwapBack(uint256 timestamp);
    event CaughtEarlyBuyer(address sniper);
    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("Junkyard Doge", "JYD") {

        address newOwner = 0x49bB9Bb32d07ff18614868675DBB6E03fA1EB55f;

        // initialize router
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), address(DC));
        setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 1 * 1e12 * 1e18;
        
        maxBuyAmount = totalSupply * 1 / 1000;
        maxSellAmount = totalSupply * 1 / 1000;
        maxWallet = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        tokenHandler = new TokenHandler();

        buyLiquidityFee = 50;
        buyReserveFee = 250;
        buyOperationsFee = 250;
        buyTotalFees = buyLiquidityFee + buyLiquidityFee + buyReserveFee;

        sellOperationsFee = 250;
        sellLiquidityFee = 50;
        sellReserveFee = 250;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellReserveFee;

        // update these!
        operationsAddress = address(0x379F2ecF477321e4759dCf9463566FE4197Bc573);
        reserveAddress = address(0x1E2C2fEF36B57173DC816CF3E472b14c0dDaf713);

        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(operationsAddress), true);
        _excludeFromMaxTransaction(address(reserveAddress), true);
        _excludeFromMaxTransaction(address(newOwner), true);

        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress), true);
        excludeFromFees(address(reserveAddress), true);
        excludeFromFees(address(newOwner), true);

        _createInitialSupply(address(newOwner), totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(blocksForPenalty < 10, "Cannot make penalty blocks more than 10");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
    }

    function pauseTrading() external onlyOwner {
        require(blockForPenaltyEnd > 0, "Cannot pause until token has launched");
        require(tradingActive, "Trading is already paused");
        tradingActive = false;
    }

    function unpauseTrading() external onlyOwner {
        require(blockForPenaltyEnd > 0, "Cannot unpause until token has launched");
        require(!tradingActive, "Trading is already unpaused");
        tradingActive = true;
    }

    function manageRestrictedWallets(address[] calldata wallets,  bool restricted) external onlyOwner {
        for(uint256 i = 0; i < wallets.length; i++){
            restrictedWallets[wallets[i]] = restricted;
        }
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        emit RemovedLimits();
    }

    function getEarlyBuyers() external view returns (address[] memory){
        return earlyBuyers;
    }

    function removeBoughtEarly(address wallet) external onlyOwner {
        restrictedWallets[wallet] = false;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/(10 ** decimals()), "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/(10 ** decimals()), "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100)/ (10 ** decimals()), "Cannot set max buy amount lower than 0.1%");
        maxWallet = newNum * (10 ** decimals());
        emit UpdatedMaxWalletAmount(maxWallet);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 600, "Can only airdrop 600 wallets per txn due to gas limits");
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != lpPair || value, "The pair cannot be removed from automatedMarketMakerPairs");
        automatedMarketMakerPairs[pair] = value;
        _excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _reserveFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyReserveFee = _reserveFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyReserveFee;
        require(buyTotalFees <= 600, "Must keep fees at 6% or less");
        emit UpdatedBuyFee(buyTotalFees);
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _reserveFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellReserveFee = _reserveFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellReserveFee;
        require(sellTotalFees <= 600, "Must keep sell fees at 6% or less");
        emit UpdatedSellFee(sellTotalFees);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    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");
        if(amount == 0){
            super._transfer(from, to, 0);
            return;
        }
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(!earlyBuyPenaltyInEffect() && tradingActive){
            require(!restrictedWallets[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferBlock[tx.origin] + 5 < block.number && _holderLastTransferBlock[to] + 5 < block.number, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferBlock[tx.origin] = block.number;
                        _holderLastTransferBlock[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                    require(amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && automatedMarketMakerPairs[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        uint256 liquidityTokens = 0;
        address currentLiquidityAddress;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && buyTotalFees > 0){

                if(!restrictedWallets[to]){
                    restrictedWallets[to] = true;
                    botsCaught += 1;
                    earlyBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }
                currentLiquidityAddress = from;
                fees = amount * buyTotalFees / FEE_DIVISOR;
                liquidityTokens = fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForReserve += fees * buyReserveFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                currentLiquidityAddress = to;
                fees = amount * sellTotalFees / FEE_DIVISOR;
                liquidityTokens = fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForReserve += fees * sellReserveFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                currentLiquidityAddress = from;
        	    fees = amount * buyTotalFees / FEE_DIVISOR;
                liquidityTokens = fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForReserve += fees * buyReserveFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }

            if (liquidityTokens > 0) {
                super._transfer(address(this), currentLiquidityAddress, liquidityTokens);
            }
        	
        	amount -= fees;
        }

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

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    function swapTokensForDC(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = address(DC);

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

        // make the swap
        dexRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(tokenHandler),
            block.timestamp
        );
    }

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForOperations + tokensForReserve;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }
        
        swapTokensForDC(contractBalance);

        tokenHandler.sendTokenToOwner(address(DC));
        
        uint256 dcBalance = DC.balanceOf(address(this));
        uint256 dcForReserve = dcBalance * tokensForReserve / totalTokensToSwap;

        tokensForOperations = 0;
        tokensForReserve = 0;

        if(dcForReserve > 0){
            DC.transfer(reserveAddress, dcForReserve);
        }

        if(DC.balanceOf(address(this)) > 0){
            DC.transfer(operationsAddress, DC.balanceOf(address(this)));
        }
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this) || !tradingActive, "Can't withdraw native tokens while trading is active");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "address cannot be 0");
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }

    function setReserveAddress(address _reserveAddress) external onlyOwner {
        require(_reserveAddress != address(0), "address cannot be 0");
        reserveAddress = payable(_reserveAddress);
        emit UpdatedReserveAddress(_reserveAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","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":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedReserveAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedRewardsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedSellFee","type":"event"},{"inputs":[],"name":"DC","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyReserveFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","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":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"restricted","type":"bool"}],"name":"manageRestrictedWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"restrictedWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellReserveFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_reserveAddress","type":"address"}],"name":"setReserveAddress","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":"tokenHandler","outputs":[{"internalType":"contract TokenHandler","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForReserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":"unpauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reserveFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reserveFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260c0526000600e556013805462ffffff191660019081179091556015805460ff191690911790553480156200004d57600080fd5b506040518060400160405280600d81526020016c4a756e6b7961726420446f676560981b8152506040518060400160405280600381526020016212965160ea1b8152508160039081620000a191906200096f565b506004620000b082826200096f565b5050506000620000c56200047b60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004f4e833981519152908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b815290517349bb9bb32d07ff18614868675dbb6e03fa1eb55f9291829163c45a0155916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000197919062000a3b565b60c0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015620001e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020f919062000a3b565b6001600160a01b031660a08190526200022a9060016200047f565b6c0c9f2c9cd04674edea400000006103e86200024882600162000a83565b62000254919062000aa5565b6006556103e86200026782600162000a83565b62000273919062000aa5565b60075560646200028582600162000a83565b62000291919062000aa5565b600855620186a0620002a582601962000a83565b620002b1919062000aa5565b600a55604051620002c290620008bc565b604051809103906000f080158015620002df573d6000803e3d6000fd5b50600b80546001600160a01b0319166001600160a01b03929092169190911790556032601981905560fa601881905560178190559062000320908062000ac8565b6200032c919062000ac8565b60165560fa601b8190556032601d819055601c8290556200034e908262000ac8565b6200035a919062000ac8565b601a55600c80546001600160a01b031990811673379f2ecf477321e4759dcf9463566fe4197bc57317909155600d8054909116731e2c2fef36b57173dc816cf3e472b14c0ddaf713179055620003b2306001620005cf565b620003c161dead6001620005cf565b600c54620003da906001600160a01b03166001620005cf565b600d54620003f3906001600160a01b03166001620005cf565b62000400836001620005cf565b6200040d30600162000632565b6200041c61dead600162000632565b600c5462000435906001600160a01b0316600162000632565b600d546200044e906001600160a01b0316600162000632565b6200045b83600162000632565b620004678382620006da565b6200047283620007bf565b50505062000ae4565b3390565b6005546001600160a01b03163314620004ce5760405162461bcd60e51b8152602060048201819052602482015260008051602062004f2e83398151915260448201526064015b60405180910390fd5b60a0516001600160a01b0316826001600160a01b0316141580620004ef5750805b620005635760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401620004c5565b6001600160a01b0382166000908152602260205260409020805460ff1916821515179055620005938282620005cf565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b038216600081815260216020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b031633146200067d5760405162461bcd60e51b8152602060048201819052602482015260008051602062004f2e8339815191526044820152606401620004c5565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007325760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004c5565b806002600082825462000746919062000ac8565b90915550506001600160a01b038216600090815260208190526040812080548392906200077590849062000ac8565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200080a5760405162461bcd60e51b8152602060048201819052602482015260008051602062004f2e8339815191526044820152606401620004c5565b6001600160a01b038116620008715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620004c5565b6005546040516001600160a01b0380841692169060008051602062004f4e83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6104d68062004a5883390190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008f557607f821691505b6020821081036200091657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200096a57600081815260208120601f850160051c81016020861015620009455750805b601f850160051c820191505b81811015620009665782815560010162000951565b5050505b505050565b81516001600160401b038111156200098b576200098b620008ca565b620009a3816200099c8454620008e0565b846200091c565b602080601f831160018114620009db5760008415620009c25750858301515b600019600386901b1c1916600185901b17855562000966565b600085815260208120601f198616915b8281101562000a0c57888601518255948401946001909101908401620009eb565b508582101562000a2b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a4e57600080fd5b81516001600160a01b038116811462000a6657600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000aa05762000aa062000a6d565b500290565b60008262000ac357634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000ade5762000ade62000a6d565b92915050565b60805160a05160c051613ef062000b686000396000818161080d01528181613224015281816132a00152818161336c015281816133f50152818161348e0152613635015260008181610630015281816116e901528181611ca401526129c3015260008181610452015281816129860152818161368d01526136cc0152613ef06000f3fe6080604052600436106104095760003560e01c80638366e79a11610213578063d257b34f11610123578063ee40166e116100ab578063f5648a4f1161007a578063f5648a4f14610c14578063f637434214610c29578063f79ed94b14610c3f578063f8b45b0514610c5f578063fb002c9714610c7557600080fd5b8063ee40166e14610b98578063f076e53514610bae578063f11a24d314610bde578063f2fde38b14610bf457600080fd5b8063de51eae5116100f2578063de51eae514610b17578063e2f4560514610b2d578063e884f26014610b43578063ea4cfe1214610b58578063eb472fc414610b7857600080fd5b8063d257b34f14610a7b578063d85ba06314610a9b578063dc3f0d0f14610ab1578063dd62ed3e14610ad157600080fd5b8063a62068ce116101a6578063bbc0c74211610175578063bbc0c742146109ec578063c024666814610a0b578063c17b5b8c14610a2b578063c876d0b914610a4b578063d1d5fe0b14610a6557600080fd5b8063a62068ce14610966578063a9059cbb1461097c578063ac8e33281461099c578063b62496f5146109bc57600080fd5b80639a5bd2dd116101e25780639a5bd2dd146108ee5780639a7a23d6146109105780639e93ad8e14610930578063a457c2d71461094657600080fd5b80638366e79a1461088557806388e765ff146108a55780638da5cb5b146108bb57806395d89b41146108d957600080fd5b80634a62bb65116103195780636ddd1713116102a15780637571336a116102705780637571336a146107db578063780249cd146107fb5780638095d5641461082f57806380fa79421461084f57806382aa7c681461086557600080fd5b80636ddd17131461075b57806370a082311461077b578063715018a6146107b1578063751039fc146107c657600080fd5b80635a139dd4116102e85780635a139dd4146106e35780635bb988c9146106f957806366d602ae146107195780636a486a8e1461072f5780636b0a894c1461074557600080fd5b80634a62bb65146106875780634f77f6c0146106a157806351f205e4146106b757806358a6d531146106cc57600080fd5b80631c499ab01161039c578063313ce5671161036b578063313ce567146105e257806339509351146105fe578063452ed4f11461061e578063456068d214610652578063499b83941461066757600080fd5b80631c499ab0146105625780632307b4411461058257806323b872dd146105a25780632be32b61146105c257600080fd5b806310d5de53116103d857806310d5de53146104d357806314673d311461050357806318160ddd146105235780631b3d6e871461054257600080fd5b806306fdde03146104155780630758d92414610440578063095ea7b31461048c5780631031e36e146104bc57600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061042a610c8b565b6040516104379190613744565b60405180910390f35b34801561044c57600080fd5b506104747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610437565b34801561049857600080fd5b506104ac6104a73660046137ae565b610d1d565b6040519015158152602001610437565b3480156104c857600080fd5b506104d1610d34565b005b3480156104df57600080fd5b506104ac6104ee3660046137d8565b60216020526000908152604090205460ff1681565b34801561050f57600080fd5b506104d161051e3660046137d8565b610e2b565b34801561052f57600080fd5b506002545b604051908152602001610437565b34801561054e57600080fd5b50600b54610474906001600160a01b031681565b34801561056e57600080fd5b506104d161057d3660046137fa565b610eeb565b34801561058e57600080fd5b506104d161059d3660046138e9565b610fbc565b3480156105ae57600080fd5b506104ac6105bd3660046139a9565b611115565b3480156105ce57600080fd5b506104d16105dd3660046137fa565b6111bf565b3480156105ee57600080fd5b5060405160128152602001610437565b34801561060a57600080fd5b506104ac6106193660046137ae565b61128a565b34801561062a57600080fd5b506104747f000000000000000000000000000000000000000000000000000000000000000081565b34801561065e57600080fd5b506104d16112c6565b34801561067357600080fd5b506104d16106823660046137d8565b6113bb565b34801561069357600080fd5b506013546104ac9060ff1681565b3480156106ad57600080fd5b50610534601b5481565b3480156106c357600080fd5b506104d161147b565b3480156106d857600080fd5b50600f5443106104ac565b3480156106ef57600080fd5b5061053460175481565b34801561070557600080fd5b506104d16107143660046137d8565b611582565b34801561072557600080fd5b5061053460075481565b34801561073b57600080fd5b50610534601a5481565b34801561075157600080fd5b5061053460125481565b34801561076757600080fd5b506013546104ac9062010000900460ff1681565b34801561078757600080fd5b506105346107963660046137d8565b6001600160a01b031660009081526020819052604090205490565b3480156107bd57600080fd5b506104d16115cd565b3480156107d257600080fd5b506104d1611641565b3480156107e757600080fd5b506104d16107f63660046139f6565b6116b8565b34801561080757600080fd5b506104747f000000000000000000000000000000000000000000000000000000000000000081565b34801561083b57600080fd5b506104d161084a366004613a2d565b6117a3565b34801561085b57600080fd5b50610534601f5481565b34801561087157600080fd5b506104d16108803660046137fa565b611887565b34801561089157600080fd5b506104ac6108a0366004613a59565b6119ce565b3480156108b157600080fd5b5061053460065481565b3480156108c757600080fd5b506005546001600160a01b0316610474565b3480156108e557600080fd5b5061042a611c08565b3480156108fa57600080fd5b50610903611c17565b6040516104379190613ad0565b34801561091c57600080fd5b506104d161092b3660046139f6565b611c78565b34801561093c57600080fd5b5061053461271081565b34801561095257600080fd5b506104ac6109613660046137ae565b611dbc565b34801561097257600080fd5b50610534600f5481565b34801561098857600080fd5b506104ac6109973660046137ae565b611e55565b3480156109a857600080fd5b506104d16109b7366004613ae3565b611e62565b3480156109c857600080fd5b506104ac6109d73660046137d8565b60226020526000908152604090205460ff1681565b3480156109f857600080fd5b506013546104ac90610100900460ff1681565b348015610a1757600080fd5b506104d1610a263660046139f6565b611f03565b348015610a3757600080fd5b506104d1610a46366004613a2d565b611f8a565b348015610a5757600080fd5b506015546104ac9060ff1681565b348015610a7157600080fd5b50610534601c5481565b348015610a8757600080fd5b506104d1610a963660046137fa565b61206b565b348015610aa757600080fd5b5061053460165481565b348015610abd57600080fd5b506104d1610acc3660046137fa565b6121b6565b348015610add57600080fd5b50610534610aec366004613a59565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b2357600080fd5b5061053460185481565b348015610b3957600080fd5b50610534600a5481565b348015610b4f57600080fd5b506104d16122c0565b348015610b6457600080fd5b50600c54610474906001600160a01b031681565b348015610b8457600080fd5b50610474610b933660046137fa565b6122f6565b348015610ba457600080fd5b50610534600e5481565b348015610bba57600080fd5b506104ac610bc93660046137d8565b60106020526000908152604090205460ff1681565b348015610bea57600080fd5b5061053460195481565b348015610c0057600080fd5b506104d1610c0f3660046137d8565b612320565b348015610c2057600080fd5b506104d161240b565b348015610c3557600080fd5b50610534601d5481565b348015610c4b57600080fd5b50600d54610474906001600160a01b031681565b348015610c6b57600080fd5b5061053460085481565b348015610c8157600080fd5b50610534601e5481565b606060038054610c9a90613b69565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc690613b69565b8015610d135780601f10610ce857610100808354040283529160200191610d13565b820191906000526020600020905b815481529060010190602001808311610cf657829003601f168201915b5050505050905090565b6000610d2a338484612477565b5060015b92915050565b6005546001600160a01b03163314610d675760405162461bcd60e51b8152600401610d5e90613ba3565b60405180910390fd5b6000600f5411610dc75760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f7420706175736520756e74696c20746f6b656e20686173206c61756044820152641b98da195960da1b6064820152608401610d5e565b601354610100900460ff16610e1e5760405162461bcd60e51b815260206004820152601960248201527f54726164696e6720697320616c726561647920706175736564000000000000006044820152606401610d5e565b6013805461ff0019169055565b6005546001600160a01b03163314610e555760405162461bcd60e51b8152600401610d5e90613ba3565b6001600160a01b038116610ea15760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610d5e565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f67a8387efd56341f0ec50712ede82505c42e2b9a4b88c7fd312e01c6fcba64d690600090a250565b6005546001600160a01b03163314610f155760405162461bcd60e51b8152600401610d5e90613ba3565b610f216012600a613cd2565b6064610f2c60025490565b610f37906001613ce1565b610f419190613d00565b610f4b9190613d00565b811015610f6a5760405162461bcd60e51b8152600401610d5e90613d22565b610f766012600a613cd2565b610f809082613ce1565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b03163314610fe65760405162461bcd60e51b8152600401610d5e90613ba3565b80518251146110375760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d5e565b6102588251106110a85760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610d5e565b60005b82518110156111105760008382815181106110c8576110c8613d6b565b6020026020010151905060008383815181106110e6576110e6613d6b565b602002602001015190506110fb33838361259b565b5050808061110890613d81565b9150506110ab565b505050565b60006111228484846126f0565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156111a75760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d5e565b6111b48533858403612477565b506001949350505050565b6005546001600160a01b031633146111e95760405162461bcd60e51b8152600401610d5e90613ba3565b6111f56012600a613cd2565b6103e861120160025490565b61120c906001613ce1565b6112169190613d00565b6112209190613d00565b81101561123f5760405162461bcd60e51b8152600401610d5e90613d22565b61124b6012600a613cd2565b6112559082613ce1565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610fb1565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d2a9185906112c1908690613d9a565b612477565b6005546001600160a01b031633146112f05760405162461bcd60e51b8152600401610d5e90613ba3565b6000600f54116113525760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420756e706175736520756e74696c20746f6b656e20686173206c604482015266185d5b98da195960ca1b6064820152608401610d5e565b601354610100900460ff16156113aa5760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920756e70617573656400000000006044820152606401610d5e565b6013805461ff001916610100179055565b6005546001600160a01b031633146113e55760405162461bcd60e51b8152600401610d5e90613ba3565b6001600160a01b0381166114315760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610d5e565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146114a55760405162461bcd60e51b8152600401610d5e90613ba3565b600a5430600090815260208190526040902054101561152e576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610d5e565b6009805460ff191660011790556115436131a3565b6009805460ff191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146115ac5760405162461bcd60e51b8152600401610d5e90613ba3565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146115f75760405162461bcd60e51b8152600401610d5e90613ba3565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461166b5760405162461bcd60e51b8152600401610d5e90613ba3565b6013805460ff199081169091556015805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146116e25760405162461bcd60e51b8152600401610d5e90613ba3565b80611778577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036117785760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610d5e565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146117cd5760405162461bcd60e51b8152600401610d5e90613ba3565b601783905560198290556018819055806117e78385613d9a565b6117f19190613d9a565b601681905561025810156118475760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203625206f72206c657373000000006044820152606401610d5e565b7f03cd3090e7c409e4a7ffd2d90ff610979f4a94a87a512188b7b615671bfb772f60165460405161187a91815260200190565b60405180910390a1505050565b6005546001600160a01b031633146118b15760405162461bcd60e51b8152600401610d5e90613ba3565b601354610100900460ff161561191d5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610d5e565b600a811061197d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610d5e565b6013805462ffff0019166201010017905543600e81905561199f908290613d9a565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146119fb5760405162461bcd60e51b8152600401610d5e90613ba3565b6001600160a01b038316611a515760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d5e565b6001600160a01b03831630141580611a715750601354610100900460ff16155b611ada5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610d5e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b459190613dad565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611b98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbc9190613dc6565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610c9a90613b69565b60606011805480602002602001604051908101604052809291908181526020018280548015610d1357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611c51575050505050905090565b6005546001600160a01b03163314611ca25760405162461bcd60e51b8152600401610d5e90613ba3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141580611ce05750805b611d525760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d5e565b6001600160a01b0382166000908152602260205260409020805460ff1916821515179055611d80828261357b565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611e3e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d5e565b611e4b3385858403612477565b5060019392505050565b6000610d2a3384846126f0565b6005546001600160a01b03163314611e8c5760405162461bcd60e51b8152600401610d5e90613ba3565b60005b82811015611efd578160106000868685818110611eae57611eae613d6b565b9050602002016020810190611ec391906137d8565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611ef581613d81565b915050611e8f565b50505050565b6005546001600160a01b03163314611f2d5760405162461bcd60e51b8152600401610d5e90613ba3565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611fb45760405162461bcd60e51b8152600401610d5e90613ba3565b601b839055601d829055601c81905580611fce8385613d9a565b611fd89190613d9a565b601a81905561025810156120385760405162461bcd60e51b815260206004820152602160248201527f4d757374206b6565702073656c6c2066656573206174203625206f72206c65736044820152607360f81b6064820152608401610d5e565b7f274faecd49018fb411281f27986b6b4acc86e5db4100735531acd18b7b6d5f93601a5460405161187a91815260200190565b6005546001600160a01b031633146120955760405162461bcd60e51b8152600401610d5e90613ba3565b620186a06120a260025490565b6120ad906001613ce1565b6120b79190613d00565b8110156121245760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d5e565b6103e861213060025490565b61213b906001613ce1565b6121459190613d00565b8111156121b15760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610d5e565b600a55565b6005546001600160a01b031633146121e05760405162461bcd60e51b8152600401610d5e90613ba3565b6121ec6012600a613cd2565b6103e86121f860025490565b612203906001613ce1565b61220d9190613d00565b6122179190613d00565b8110156122795760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610d5e565b61228b81670de0b6b3a7640000613ce1565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610fb1565b6005546001600160a01b031633146122ea5760405162461bcd60e51b8152600401610d5e90613ba3565b6015805460ff19169055565b6011818154811061230657600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b0316331461234a5760405162461bcd60e51b8152600401610d5e90613ba3565b6001600160a01b0381166123af5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d5e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146124355760405162461bcd60e51b8152600401610d5e90613ba3565b604051600090339047908381818185875af1925050503d8060008114611efd576040519150601f19603f3d011682016040523d82523d6000602084013e611efd565b6001600160a01b0383166124d95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d5e565b6001600160a01b03821661253a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d5e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166125c15760405162461bcd60e51b8152600401610d5e90613de3565b6001600160a01b0382166125e75760405162461bcd60e51b8152600401610d5e90613e28565b6001600160a01b0383166000908152602081905260409020548181101561265f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d5e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612696908490613d9a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126e291815260200190565b60405180910390a350505050565b6001600160a01b0383166127165760405162461bcd60e51b8152600401610d5e90613de3565b6001600160a01b03821661273c5760405162461bcd60e51b8152600401610d5e90613e28565b80600003612750576111108383600061259b565b601354610100900460ff166127e1576001600160a01b038316600090815260208052604090205460ff168061279c57506001600160a01b038216600090815260208052604090205460ff165b6127e15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d5e565b600f5443101580156127fa5750601354610100900460ff165b156128ca576001600160a01b03831660009081526010602052604090205460ff16158061283457506005546001600160a01b038381169116145b8061284957506001600160a01b03821661dead145b6128ca5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610d5e565b60135460ff1615612d26576005546001600160a01b0384811691161480159061290157506005546001600160a01b03838116911614155b801561291557506001600160a01b03821615155b801561292c57506001600160a01b03821661dead14155b801561295057506001600160a01b038316600090815260208052604090205460ff16155b801561297457506001600160a01b038216600090815260208052604090205460ff16155b15612d265760155460ff1615612ad9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141580156129f857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15612ad957326000908152601460205260409020544390612a1a906005613d9a565b108015612a4a57506001600160a01b0382166000908152601460205260409020544390612a48906005613d9a565b105b612ab45760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610d5e565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526022602052604090205460ff168015612b1a57506001600160a01b03821660009081526021602052604090205460ff16155b15612bf157600654811115612b825760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610d5e565b6008546001600160a01b038316600090815260208190526040902054612ba89083613d9a565b1115612bec5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d5e565b612d26565b6001600160a01b03821660009081526022602052604090205460ff168015612c3257506001600160a01b03831660009081526021602052604090205460ff16155b15612c9c57600754811115612bec5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610d5e565b6001600160a01b03821660009081526021602052604090205460ff16612d26576008546001600160a01b038316600090815260208190526040902054612ce29083613d9a565b1115612d265760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d5e565b30600090815260208190526040902054600a5481108015908190612d52575060135462010000900460ff165b8015612d61575060095460ff16155b8015612d8557506001600160a01b03841660009081526022602052604090205460ff165b15612daa576009805460ff19166001179055612d9f6131a3565b6009805460ff191690555b6001600160a01b038516600090815260208052604090205460019060ff1680612dea57506001600160a01b038516600090815260208052604090205460ff165b15612df3575060005b6000806000831561318d57600f5443108015612e2757506001600160a01b03891660009081526022602052604090205460ff165b8015612e4c57506001600160a01b03881660009081526022602052604090205460ff16155b8015612e5a57506000601654115b15612fe3576001600160a01b03881660009081526010602052604090205460ff16612f3f576001600160a01b0388166000908152601060205260408120805460ff191660019081179091556012805491929091612eb8908490613d9a565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b038a169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b88905061271060165488612f539190613ce1565b612f5d9190613d00565b925060165460195484612f709190613ce1565b612f7a9190613d00565b915060165460175484612f8d9190613ce1565b612f979190613d00565b601e6000828254612fa89190613d9a565b9091555050601654601854612fbd9085613ce1565b612fc79190613d00565b601f6000828254612fd89190613d9a565b9091555061315e9050565b6001600160a01b03881660009081526022602052604090205460ff16801561300d57506000601a54115b1561309057879050612710601a54886130269190613ce1565b6130309190613d00565b9250601a54601d54846130439190613ce1565b61304d9190613d00565b9150601a54601b54846130609190613ce1565b61306a9190613d00565b601e600082825461307b9190613d9a565b9091555050601a54601c54612fbd9085613ce1565b6001600160a01b03891660009081526022602052604090205460ff1680156130ba57506000601654115b1561315e57889050612710601654886130d39190613ce1565b6130dd9190613d00565b9250601654601954846130f09190613ce1565b6130fa9190613d00565b91506016546017548461310d9190613ce1565b6131179190613d00565b601e60008282546131289190613d9a565b909155505060165460185461313d9085613ce1565b6131479190613d00565b601f60008282546131589190613d9a565b90915550505b821561316f5761316f89308561259b565b81156131805761318030828461259b565b61318a8388613e6b565b96505b61319889898961259b565b505050505050505050565b3060009081526020819052604081205490506000601f54601e546131c79190613d9a565b90508115806131d4575080155b156131dd575050565b600a80546131ea91613ce1565b82111561320157600a80546131fe91613ce1565b91505b61320a826135de565b600b546040516304fa881160e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152909116906313ea204490602401600060405180830381600087803b15801561327157600080fd5b505af1158015613285573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506370a0823190602401602060405180830381865afa1580156132f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133149190613dad565b9050600082601f54836133279190613ce1565b6133319190613d00565b6000601e819055601f55905080156133dd57600d5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af11580156133b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133db9190613dc6565b505b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015613444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134689190613dad565b1115611efd57600c546040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263a9059cbb9291169083906370a0823190602401602060405180830381865afa1580156134e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135059190613dad565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015613550573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135749190613dc6565b5050505050565b6001600160a01b038216600081815260216020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061361357613613613d6b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061366757613667613d6b565b60200260200101906001600160a01b031690816001600160a01b0316815250506136b2307f000000000000000000000000000000000000000000000000000000000000000084612477565b600b54604051635c11d79560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692635c11d7959261370e928792600092889291909116904290600401613e7e565b600060405180830381600087803b15801561372857600080fd5b505af115801561373c573d6000803e3d6000fd5b505050505050565b600060208083528351808285015260005b8181101561377157858101830151858201604001528201613755565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146137a957600080fd5b919050565b600080604083850312156137c157600080fd5b6137ca83613792565b946020939093013593505050565b6000602082840312156137ea57600080fd5b6137f382613792565b9392505050565b60006020828403121561380c57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561385257613852613813565b604052919050565b600067ffffffffffffffff82111561387457613874613813565b5060051b60200190565b600082601f83011261388f57600080fd5b813560206138a461389f8361385a565b613829565b82815260059290921b840181019181810190868411156138c357600080fd5b8286015b848110156138de57803583529183019183016138c7565b509695505050505050565b600080604083850312156138fc57600080fd5b823567ffffffffffffffff8082111561391457600080fd5b818501915085601f83011261392857600080fd5b8135602061393861389f8361385a565b82815260059290921b8401810191818101908984111561395757600080fd5b948201945b8386101561397c5761396d86613792565b8252948201949082019061395c565b9650508601359250508082111561399257600080fd5b5061399f8582860161387e565b9150509250929050565b6000806000606084860312156139be57600080fd5b6139c784613792565b92506139d560208501613792565b9150604084013590509250925092565b80151581146139f357600080fd5b50565b60008060408385031215613a0957600080fd5b613a1283613792565b91506020830135613a22816139e5565b809150509250929050565b600080600060608486031215613a4257600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613a6c57600080fd5b613a7583613792565b9150613a8360208401613792565b90509250929050565b600081518084526020808501945080840160005b83811015613ac55781516001600160a01b031687529582019590820190600101613aa0565b509495945050505050565b6020815260006137f36020830184613a8c565b600080600060408486031215613af857600080fd5b833567ffffffffffffffff80821115613b1057600080fd5b818601915086601f830112613b2457600080fd5b813581811115613b3357600080fd5b8760208260051b8501011115613b4857600080fd5b60209283019550935050840135613b5e816139e5565b809150509250925092565b600181811c90821680613b7d57607f821691505b602082108103613b9d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613c29578160001904821115613c0f57613c0f613bd8565b80851615613c1c57918102915b93841c9390800290613bf3565b509250929050565b600082613c4057506001610d2e565b81613c4d57506000610d2e565b8160018114613c635760028114613c6d57613c89565b6001915050610d2e565b60ff841115613c7e57613c7e613bd8565b50506001821b610d2e565b5060208310610133831016604e8410600b8410161715613cac575081810a610d2e565b613cb68383613bee565b8060001904821115613cca57613cca613bd8565b029392505050565b60006137f360ff841683613c31565b6000816000190483118215151615613cfb57613cfb613bd8565b500290565b600082613d1d57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206040820152687468616e20302e312560b81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060018201613d9357613d93613bd8565b5060010190565b80820180821115610d2e57610d2e613bd8565b600060208284031215613dbf57600080fd5b5051919050565b600060208284031215613dd857600080fd5b81516137f3816139e5565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610d2e57610d2e613bd8565b85815284602082015260a060408201526000613e9d60a0830186613a8c565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122037c0130fa7436e1f54daabf7a9d24dbde4f2cb30f7db037fbf7e55db439e649764736f6c63430008100033608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610475806100616000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806313ea204414610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b1461008d575b600080fd5b61006461005f36600461039f565b6100a0565b005b610064610241565b600054604080516001600160a01b039092168252519081900360200190f35b61006461009b36600461039f565b6102b5565b6000546001600160a01b031633146100d35760405162461bcd60e51b81526004016100ca906103cf565b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561011a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061013e9190610404565b111561023e57806001600160a01b031663a9059cbb6101656000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156101a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101cd9190610404565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023c919061041d565b505b50565b6000546001600160a01b0316331461026b5760405162461bcd60e51b81526004016100ca906103cf565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146102df5760405162461bcd60e51b81526004016100ca906103cf565b6001600160a01b0381166103445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100ca565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000602082840312156103b157600080fd5b81356001600160a01b03811681146103c857600080fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561041657600080fd5b5051919050565b60006020828403121561042f57600080fd5b815180151581146103c857600080fdfea264697066735822122055dbef0cfafb0a7b5a3bdea88e28bcb6b8bab5ad06845dea155df47ba0d57aab64736f6c634300081000334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104095760003560e01c80638366e79a11610213578063d257b34f11610123578063ee40166e116100ab578063f5648a4f1161007a578063f5648a4f14610c14578063f637434214610c29578063f79ed94b14610c3f578063f8b45b0514610c5f578063fb002c9714610c7557600080fd5b8063ee40166e14610b98578063f076e53514610bae578063f11a24d314610bde578063f2fde38b14610bf457600080fd5b8063de51eae5116100f2578063de51eae514610b17578063e2f4560514610b2d578063e884f26014610b43578063ea4cfe1214610b58578063eb472fc414610b7857600080fd5b8063d257b34f14610a7b578063d85ba06314610a9b578063dc3f0d0f14610ab1578063dd62ed3e14610ad157600080fd5b8063a62068ce116101a6578063bbc0c74211610175578063bbc0c742146109ec578063c024666814610a0b578063c17b5b8c14610a2b578063c876d0b914610a4b578063d1d5fe0b14610a6557600080fd5b8063a62068ce14610966578063a9059cbb1461097c578063ac8e33281461099c578063b62496f5146109bc57600080fd5b80639a5bd2dd116101e25780639a5bd2dd146108ee5780639a7a23d6146109105780639e93ad8e14610930578063a457c2d71461094657600080fd5b80638366e79a1461088557806388e765ff146108a55780638da5cb5b146108bb57806395d89b41146108d957600080fd5b80634a62bb65116103195780636ddd1713116102a15780637571336a116102705780637571336a146107db578063780249cd146107fb5780638095d5641461082f57806380fa79421461084f57806382aa7c681461086557600080fd5b80636ddd17131461075b57806370a082311461077b578063715018a6146107b1578063751039fc146107c657600080fd5b80635a139dd4116102e85780635a139dd4146106e35780635bb988c9146106f957806366d602ae146107195780636a486a8e1461072f5780636b0a894c1461074557600080fd5b80634a62bb65146106875780634f77f6c0146106a157806351f205e4146106b757806358a6d531146106cc57600080fd5b80631c499ab01161039c578063313ce5671161036b578063313ce567146105e257806339509351146105fe578063452ed4f11461061e578063456068d214610652578063499b83941461066757600080fd5b80631c499ab0146105625780632307b4411461058257806323b872dd146105a25780632be32b61146105c257600080fd5b806310d5de53116103d857806310d5de53146104d357806314673d311461050357806318160ddd146105235780631b3d6e871461054257600080fd5b806306fdde03146104155780630758d92414610440578063095ea7b31461048c5780631031e36e146104bc57600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061042a610c8b565b6040516104379190613744565b60405180910390f35b34801561044c57600080fd5b506104747f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610437565b34801561049857600080fd5b506104ac6104a73660046137ae565b610d1d565b6040519015158152602001610437565b3480156104c857600080fd5b506104d1610d34565b005b3480156104df57600080fd5b506104ac6104ee3660046137d8565b60216020526000908152604090205460ff1681565b34801561050f57600080fd5b506104d161051e3660046137d8565b610e2b565b34801561052f57600080fd5b506002545b604051908152602001610437565b34801561054e57600080fd5b50600b54610474906001600160a01b031681565b34801561056e57600080fd5b506104d161057d3660046137fa565b610eeb565b34801561058e57600080fd5b506104d161059d3660046138e9565b610fbc565b3480156105ae57600080fd5b506104ac6105bd3660046139a9565b611115565b3480156105ce57600080fd5b506104d16105dd3660046137fa565b6111bf565b3480156105ee57600080fd5b5060405160128152602001610437565b34801561060a57600080fd5b506104ac6106193660046137ae565b61128a565b34801561062a57600080fd5b506104747f000000000000000000000000ba7880e26661667c1bda33893be31c2ca72b10da81565b34801561065e57600080fd5b506104d16112c6565b34801561067357600080fd5b506104d16106823660046137d8565b6113bb565b34801561069357600080fd5b506013546104ac9060ff1681565b3480156106ad57600080fd5b50610534601b5481565b3480156106c357600080fd5b506104d161147b565b3480156106d857600080fd5b50600f5443106104ac565b3480156106ef57600080fd5b5061053460175481565b34801561070557600080fd5b506104d16107143660046137d8565b611582565b34801561072557600080fd5b5061053460075481565b34801561073b57600080fd5b50610534601a5481565b34801561075157600080fd5b5061053460125481565b34801561076757600080fd5b506013546104ac9062010000900460ff1681565b34801561078757600080fd5b506105346107963660046137d8565b6001600160a01b031660009081526020819052604090205490565b3480156107bd57600080fd5b506104d16115cd565b3480156107d257600080fd5b506104d1611641565b3480156107e757600080fd5b506104d16107f63660046139f6565b6116b8565b34801561080757600080fd5b506104747f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561083b57600080fd5b506104d161084a366004613a2d565b6117a3565b34801561085b57600080fd5b50610534601f5481565b34801561087157600080fd5b506104d16108803660046137fa565b611887565b34801561089157600080fd5b506104ac6108a0366004613a59565b6119ce565b3480156108b157600080fd5b5061053460065481565b3480156108c757600080fd5b506005546001600160a01b0316610474565b3480156108e557600080fd5b5061042a611c08565b3480156108fa57600080fd5b50610903611c17565b6040516104379190613ad0565b34801561091c57600080fd5b506104d161092b3660046139f6565b611c78565b34801561093c57600080fd5b5061053461271081565b34801561095257600080fd5b506104ac6109613660046137ae565b611dbc565b34801561097257600080fd5b50610534600f5481565b34801561098857600080fd5b506104ac6109973660046137ae565b611e55565b3480156109a857600080fd5b506104d16109b7366004613ae3565b611e62565b3480156109c857600080fd5b506104ac6109d73660046137d8565b60226020526000908152604090205460ff1681565b3480156109f857600080fd5b506013546104ac90610100900460ff1681565b348015610a1757600080fd5b506104d1610a263660046139f6565b611f03565b348015610a3757600080fd5b506104d1610a46366004613a2d565b611f8a565b348015610a5757600080fd5b506015546104ac9060ff1681565b348015610a7157600080fd5b50610534601c5481565b348015610a8757600080fd5b506104d1610a963660046137fa565b61206b565b348015610aa757600080fd5b5061053460165481565b348015610abd57600080fd5b506104d1610acc3660046137fa565b6121b6565b348015610add57600080fd5b50610534610aec366004613a59565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b2357600080fd5b5061053460185481565b348015610b3957600080fd5b50610534600a5481565b348015610b4f57600080fd5b506104d16122c0565b348015610b6457600080fd5b50600c54610474906001600160a01b031681565b348015610b8457600080fd5b50610474610b933660046137fa565b6122f6565b348015610ba457600080fd5b50610534600e5481565b348015610bba57600080fd5b506104ac610bc93660046137d8565b60106020526000908152604090205460ff1681565b348015610bea57600080fd5b5061053460195481565b348015610c0057600080fd5b506104d1610c0f3660046137d8565b612320565b348015610c2057600080fd5b506104d161240b565b348015610c3557600080fd5b50610534601d5481565b348015610c4b57600080fd5b50600d54610474906001600160a01b031681565b348015610c6b57600080fd5b5061053460085481565b348015610c8157600080fd5b50610534601e5481565b606060038054610c9a90613b69565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc690613b69565b8015610d135780601f10610ce857610100808354040283529160200191610d13565b820191906000526020600020905b815481529060010190602001808311610cf657829003601f168201915b5050505050905090565b6000610d2a338484612477565b5060015b92915050565b6005546001600160a01b03163314610d675760405162461bcd60e51b8152600401610d5e90613ba3565b60405180910390fd5b6000600f5411610dc75760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f7420706175736520756e74696c20746f6b656e20686173206c61756044820152641b98da195960da1b6064820152608401610d5e565b601354610100900460ff16610e1e5760405162461bcd60e51b815260206004820152601960248201527f54726164696e6720697320616c726561647920706175736564000000000000006044820152606401610d5e565b6013805461ff0019169055565b6005546001600160a01b03163314610e555760405162461bcd60e51b8152600401610d5e90613ba3565b6001600160a01b038116610ea15760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610d5e565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f67a8387efd56341f0ec50712ede82505c42e2b9a4b88c7fd312e01c6fcba64d690600090a250565b6005546001600160a01b03163314610f155760405162461bcd60e51b8152600401610d5e90613ba3565b610f216012600a613cd2565b6064610f2c60025490565b610f37906001613ce1565b610f419190613d00565b610f4b9190613d00565b811015610f6a5760405162461bcd60e51b8152600401610d5e90613d22565b610f766012600a613cd2565b610f809082613ce1565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b03163314610fe65760405162461bcd60e51b8152600401610d5e90613ba3565b80518251146110375760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d5e565b6102588251106110a85760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610d5e565b60005b82518110156111105760008382815181106110c8576110c8613d6b565b6020026020010151905060008383815181106110e6576110e6613d6b565b602002602001015190506110fb33838361259b565b5050808061110890613d81565b9150506110ab565b505050565b60006111228484846126f0565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156111a75760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d5e565b6111b48533858403612477565b506001949350505050565b6005546001600160a01b031633146111e95760405162461bcd60e51b8152600401610d5e90613ba3565b6111f56012600a613cd2565b6103e861120160025490565b61120c906001613ce1565b6112169190613d00565b6112209190613d00565b81101561123f5760405162461bcd60e51b8152600401610d5e90613d22565b61124b6012600a613cd2565b6112559082613ce1565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610fb1565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d2a9185906112c1908690613d9a565b612477565b6005546001600160a01b031633146112f05760405162461bcd60e51b8152600401610d5e90613ba3565b6000600f54116113525760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420756e706175736520756e74696c20746f6b656e20686173206c604482015266185d5b98da195960ca1b6064820152608401610d5e565b601354610100900460ff16156113aa5760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920756e70617573656400000000006044820152606401610d5e565b6013805461ff001916610100179055565b6005546001600160a01b031633146113e55760405162461bcd60e51b8152600401610d5e90613ba3565b6001600160a01b0381166114315760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610d5e565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146114a55760405162461bcd60e51b8152600401610d5e90613ba3565b600a5430600090815260208190526040902054101561152e576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610d5e565b6009805460ff191660011790556115436131a3565b6009805460ff191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146115ac5760405162461bcd60e51b8152600401610d5e90613ba3565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146115f75760405162461bcd60e51b8152600401610d5e90613ba3565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461166b5760405162461bcd60e51b8152600401610d5e90613ba3565b6013805460ff199081169091556015805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146116e25760405162461bcd60e51b8152600401610d5e90613ba3565b80611778577f000000000000000000000000ba7880e26661667c1bda33893be31c2ca72b10da6001600160a01b0316826001600160a01b0316036117785760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610d5e565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146117cd5760405162461bcd60e51b8152600401610d5e90613ba3565b601783905560198290556018819055806117e78385613d9a565b6117f19190613d9a565b601681905561025810156118475760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203625206f72206c657373000000006044820152606401610d5e565b7f03cd3090e7c409e4a7ffd2d90ff610979f4a94a87a512188b7b615671bfb772f60165460405161187a91815260200190565b60405180910390a1505050565b6005546001600160a01b031633146118b15760405162461bcd60e51b8152600401610d5e90613ba3565b601354610100900460ff161561191d5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610d5e565b600a811061197d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610d5e565b6013805462ffff0019166201010017905543600e81905561199f908290613d9a565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146119fb5760405162461bcd60e51b8152600401610d5e90613ba3565b6001600160a01b038316611a515760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d5e565b6001600160a01b03831630141580611a715750601354610100900460ff16155b611ada5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610d5e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b459190613dad565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611b98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbc9190613dc6565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610c9a90613b69565b60606011805480602002602001604051908101604052809291908181526020018280548015610d1357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611c51575050505050905090565b6005546001600160a01b03163314611ca25760405162461bcd60e51b8152600401610d5e90613ba3565b7f000000000000000000000000ba7880e26661667c1bda33893be31c2ca72b10da6001600160a01b0316826001600160a01b0316141580611ce05750805b611d525760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d5e565b6001600160a01b0382166000908152602260205260409020805460ff1916821515179055611d80828261357b565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611e3e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d5e565b611e4b3385858403612477565b5060019392505050565b6000610d2a3384846126f0565b6005546001600160a01b03163314611e8c5760405162461bcd60e51b8152600401610d5e90613ba3565b60005b82811015611efd578160106000868685818110611eae57611eae613d6b565b9050602002016020810190611ec391906137d8565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611ef581613d81565b915050611e8f565b50505050565b6005546001600160a01b03163314611f2d5760405162461bcd60e51b8152600401610d5e90613ba3565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611fb45760405162461bcd60e51b8152600401610d5e90613ba3565b601b839055601d829055601c81905580611fce8385613d9a565b611fd89190613d9a565b601a81905561025810156120385760405162461bcd60e51b815260206004820152602160248201527f4d757374206b6565702073656c6c2066656573206174203625206f72206c65736044820152607360f81b6064820152608401610d5e565b7f274faecd49018fb411281f27986b6b4acc86e5db4100735531acd18b7b6d5f93601a5460405161187a91815260200190565b6005546001600160a01b031633146120955760405162461bcd60e51b8152600401610d5e90613ba3565b620186a06120a260025490565b6120ad906001613ce1565b6120b79190613d00565b8110156121245760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d5e565b6103e861213060025490565b61213b906001613ce1565b6121459190613d00565b8111156121b15760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610d5e565b600a55565b6005546001600160a01b031633146121e05760405162461bcd60e51b8152600401610d5e90613ba3565b6121ec6012600a613cd2565b6103e86121f860025490565b612203906001613ce1565b61220d9190613d00565b6122179190613d00565b8110156122795760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610d5e565b61228b81670de0b6b3a7640000613ce1565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610fb1565b6005546001600160a01b031633146122ea5760405162461bcd60e51b8152600401610d5e90613ba3565b6015805460ff19169055565b6011818154811061230657600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b0316331461234a5760405162461bcd60e51b8152600401610d5e90613ba3565b6001600160a01b0381166123af5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d5e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146124355760405162461bcd60e51b8152600401610d5e90613ba3565b604051600090339047908381818185875af1925050503d8060008114611efd576040519150601f19603f3d011682016040523d82523d6000602084013e611efd565b6001600160a01b0383166124d95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d5e565b6001600160a01b03821661253a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d5e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166125c15760405162461bcd60e51b8152600401610d5e90613de3565b6001600160a01b0382166125e75760405162461bcd60e51b8152600401610d5e90613e28565b6001600160a01b0383166000908152602081905260409020548181101561265f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d5e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612696908490613d9a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126e291815260200190565b60405180910390a350505050565b6001600160a01b0383166127165760405162461bcd60e51b8152600401610d5e90613de3565b6001600160a01b03821661273c5760405162461bcd60e51b8152600401610d5e90613e28565b80600003612750576111108383600061259b565b601354610100900460ff166127e1576001600160a01b038316600090815260208052604090205460ff168061279c57506001600160a01b038216600090815260208052604090205460ff165b6127e15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d5e565b600f5443101580156127fa5750601354610100900460ff165b156128ca576001600160a01b03831660009081526010602052604090205460ff16158061283457506005546001600160a01b038381169116145b8061284957506001600160a01b03821661dead145b6128ca5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610d5e565b60135460ff1615612d26576005546001600160a01b0384811691161480159061290157506005546001600160a01b03838116911614155b801561291557506001600160a01b03821615155b801561292c57506001600160a01b03821661dead14155b801561295057506001600160a01b038316600090815260208052604090205460ff16155b801561297457506001600160a01b038216600090815260208052604090205460ff16155b15612d265760155460ff1615612ad9577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b0316141580156129f857507f000000000000000000000000ba7880e26661667c1bda33893be31c2ca72b10da6001600160a01b0316826001600160a01b031614155b15612ad957326000908152601460205260409020544390612a1a906005613d9a565b108015612a4a57506001600160a01b0382166000908152601460205260409020544390612a48906005613d9a565b105b612ab45760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610d5e565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526022602052604090205460ff168015612b1a57506001600160a01b03821660009081526021602052604090205460ff16155b15612bf157600654811115612b825760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610d5e565b6008546001600160a01b038316600090815260208190526040902054612ba89083613d9a565b1115612bec5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d5e565b612d26565b6001600160a01b03821660009081526022602052604090205460ff168015612c3257506001600160a01b03831660009081526021602052604090205460ff16155b15612c9c57600754811115612bec5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610d5e565b6001600160a01b03821660009081526021602052604090205460ff16612d26576008546001600160a01b038316600090815260208190526040902054612ce29083613d9a565b1115612d265760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d5e565b30600090815260208190526040902054600a5481108015908190612d52575060135462010000900460ff165b8015612d61575060095460ff16155b8015612d8557506001600160a01b03841660009081526022602052604090205460ff165b15612daa576009805460ff19166001179055612d9f6131a3565b6009805460ff191690555b6001600160a01b038516600090815260208052604090205460019060ff1680612dea57506001600160a01b038516600090815260208052604090205460ff165b15612df3575060005b6000806000831561318d57600f5443108015612e2757506001600160a01b03891660009081526022602052604090205460ff165b8015612e4c57506001600160a01b03881660009081526022602052604090205460ff16155b8015612e5a57506000601654115b15612fe3576001600160a01b03881660009081526010602052604090205460ff16612f3f576001600160a01b0388166000908152601060205260408120805460ff191660019081179091556012805491929091612eb8908490613d9a565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b038a169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b88905061271060165488612f539190613ce1565b612f5d9190613d00565b925060165460195484612f709190613ce1565b612f7a9190613d00565b915060165460175484612f8d9190613ce1565b612f979190613d00565b601e6000828254612fa89190613d9a565b9091555050601654601854612fbd9085613ce1565b612fc79190613d00565b601f6000828254612fd89190613d9a565b9091555061315e9050565b6001600160a01b03881660009081526022602052604090205460ff16801561300d57506000601a54115b1561309057879050612710601a54886130269190613ce1565b6130309190613d00565b9250601a54601d54846130439190613ce1565b61304d9190613d00565b9150601a54601b54846130609190613ce1565b61306a9190613d00565b601e600082825461307b9190613d9a565b9091555050601a54601c54612fbd9085613ce1565b6001600160a01b03891660009081526022602052604090205460ff1680156130ba57506000601654115b1561315e57889050612710601654886130d39190613ce1565b6130dd9190613d00565b9250601654601954846130f09190613ce1565b6130fa9190613d00565b91506016546017548461310d9190613ce1565b6131179190613d00565b601e60008282546131289190613d9a565b909155505060165460185461313d9085613ce1565b6131479190613d00565b601f60008282546131589190613d9a565b90915550505b821561316f5761316f89308561259b565b81156131805761318030828461259b565b61318a8388613e6b565b96505b61319889898961259b565b505050505050505050565b3060009081526020819052604081205490506000601f54601e546131c79190613d9a565b90508115806131d4575080155b156131dd575050565b600a80546131ea91613ce1565b82111561320157600a80546131fe91613ce1565b91505b61320a826135de565b600b546040516304fa881160e21b81526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281166004830152909116906313ea204490602401600060405180830381600087803b15801561327157600080fd5b505af1158015613285573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031691506370a0823190602401602060405180830381865afa1580156132f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133149190613dad565b9050600082601f54836133279190613ce1565b6133319190613d00565b6000601e819055601f55905080156133dd57600d5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29091169063a9059cbb906044016020604051808303816000875af11580156133b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133db9190613dc6565b505b6040516370a0823160e01b81523060048201526000907f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316906370a0823190602401602060405180830381865afa158015613444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134689190613dad565b1115611efd57600c546040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281169263a9059cbb9291169083906370a0823190602401602060405180830381865afa1580156134e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135059190613dad565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015613550573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135749190613dc6565b5050505050565b6001600160a01b038216600081815260216020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061361357613613613d6b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061366757613667613d6b565b60200260200101906001600160a01b031690816001600160a01b0316815250506136b2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612477565b600b54604051635c11d79560e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d811692635c11d7959261370e928792600092889291909116904290600401613e7e565b600060405180830381600087803b15801561372857600080fd5b505af115801561373c573d6000803e3d6000fd5b505050505050565b600060208083528351808285015260005b8181101561377157858101830151858201604001528201613755565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146137a957600080fd5b919050565b600080604083850312156137c157600080fd5b6137ca83613792565b946020939093013593505050565b6000602082840312156137ea57600080fd5b6137f382613792565b9392505050565b60006020828403121561380c57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561385257613852613813565b604052919050565b600067ffffffffffffffff82111561387457613874613813565b5060051b60200190565b600082601f83011261388f57600080fd5b813560206138a461389f8361385a565b613829565b82815260059290921b840181019181810190868411156138c357600080fd5b8286015b848110156138de57803583529183019183016138c7565b509695505050505050565b600080604083850312156138fc57600080fd5b823567ffffffffffffffff8082111561391457600080fd5b818501915085601f83011261392857600080fd5b8135602061393861389f8361385a565b82815260059290921b8401810191818101908984111561395757600080fd5b948201945b8386101561397c5761396d86613792565b8252948201949082019061395c565b9650508601359250508082111561399257600080fd5b5061399f8582860161387e565b9150509250929050565b6000806000606084860312156139be57600080fd5b6139c784613792565b92506139d560208501613792565b9150604084013590509250925092565b80151581146139f357600080fd5b50565b60008060408385031215613a0957600080fd5b613a1283613792565b91506020830135613a22816139e5565b809150509250929050565b600080600060608486031215613a4257600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613a6c57600080fd5b613a7583613792565b9150613a8360208401613792565b90509250929050565b600081518084526020808501945080840160005b83811015613ac55781516001600160a01b031687529582019590820190600101613aa0565b509495945050505050565b6020815260006137f36020830184613a8c565b600080600060408486031215613af857600080fd5b833567ffffffffffffffff80821115613b1057600080fd5b818601915086601f830112613b2457600080fd5b813581811115613b3357600080fd5b8760208260051b8501011115613b4857600080fd5b60209283019550935050840135613b5e816139e5565b809150509250925092565b600181811c90821680613b7d57607f821691505b602082108103613b9d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613c29578160001904821115613c0f57613c0f613bd8565b80851615613c1c57918102915b93841c9390800290613bf3565b509250929050565b600082613c4057506001610d2e565b81613c4d57506000610d2e565b8160018114613c635760028114613c6d57613c89565b6001915050610d2e565b60ff841115613c7e57613c7e613bd8565b50506001821b610d2e565b5060208310610133831016604e8410600b8410161715613cac575081810a610d2e565b613cb68383613bee565b8060001904821115613cca57613cca613bd8565b029392505050565b60006137f360ff841683613c31565b6000816000190483118215151615613cfb57613cfb613bd8565b500290565b600082613d1d57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206040820152687468616e20302e312560b81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060018201613d9357613d93613bd8565b5060010190565b80820180821115610d2e57610d2e613bd8565b600060208284031215613dbf57600080fd5b5051919050565b600060208284031215613dd857600080fd5b81516137f3816139e5565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610d2e57610d2e613bd8565b85815284602082015260a060408201526000613e9d60a0830186613a8c565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122037c0130fa7436e1f54daabf7a9d24dbde4f2cb30f7db037fbf7e55db439e649764736f6c63430008100033

Deployed Bytecode Sourcemap

7908:18780:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1880:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8059:37;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;8059:37:0;567:221:1;2794:169:0;;;;;;;;;;-1:-1:-1;2794:169:0;;;;;:::i;:::-;;:::i;:::-;;;1395:14:1;;1388:22;1370:41;;1358:2;1343:18;2794:169:0;1230:187:1;13006:228:0;;;;;;;;;;;;;:::i;:::-;;9502:64;;;;;;;;;;-1:-1:-1;9502:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26064:257;;;;;;;;;;-1:-1:-1;26064:257:0;;;;;:::i;:::-;;:::i;2201:108::-;;;;;;;;;;-1:-1:-1;2289:12:0;;2201:108;;;1759:25:1;;;1747:2;1732:18;2201:108:0;1613:177:1;8301:32:0;;;;;;;;;;-1:-1:-1;8301:32:0;;;;-1:-1:-1;;;;;8301:32:0;;;15006:287;;;;;;;;;;-1:-1:-1;15006:287:0;;;;;:::i;:::-;;:::i;15936:520::-;;;;;;;;;;-1:-1:-1;15936:520:0;;;;;:::i;:::-;;:::i;2971:458::-;;;;;;;;;;-1:-1:-1;2971:458:0;;;;;:::i;:::-;;:::i;14405:293::-;;;;;;;;;;-1:-1:-1;14405:293:0;;;;;:::i;:::-;;:::i;2100:93::-;;;;;;;;;;-1:-1:-1;2100:93:0;;2183:2;5101:36:1;;5089:2;5074:18;2100:93:0;4959:184:1;3437:215:0;;;;;;;;;;-1:-1:-1;3437:215:0;;;;;:::i;:::-;;:::i;8103:31::-;;;;;;;;;;;;;;;13242:234;;;;;;;;;;;;;:::i;25778:278::-;;;;;;;;;;-1:-1:-1;25778:278:0;;;;;:::i;:::-;;:::i;8662:33::-;;;;;;;;;;-1:-1:-1;8662:33:0;;;;;;;;9190:32;;;;;;;;;;;;;;;;26373:312;;;;;;;;;;;;;:::i;23381:120::-;;;;;;;;;;-1:-1:-1;23475:18:0;;23460:12;:33;23381:120;;9043:31;;;;;;;;;;;;;;;;14120:114;;;;;;;;;;-1:-1:-1;14120:114:0;;;;;:::i;:::-;;:::i;7991:28::-;;;;;;;;;;;;;;;;9155;;;;;;;;;;;;;;;;8628:25;;;;;;;;;;;;;;;;8742:31;;;;;;;;;;-1:-1:-1;8742:31:0;;;;;;;;;;;2317:127;;;;;;;;;;-1:-1:-1;2317:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;2418:18:0;2391:7;2418:18;;;;;;;;;;;;2317:127;5859:150;;;;;;;;;;;;;:::i;13768:233::-;;;;;;;;;;;;;:::i;16468:260::-;;;;;;;;;;-1:-1:-1;16468:260:0;;;;;:::i;:::-;;:::i;8143:79::-;;;;;;;;;;;;;;;17092:432;;;;;;;;;;-1:-1:-1;17092:432:0;;;;;:::i;:::-;;:::i;9346:31::-;;;;;;;;;;;;;;;;12552:446;;;;;;;;;;-1:-1:-1;12552:446:0;;;;;:::i;:::-;;:::i;25042:498::-;;;;;;;;;;-1:-1:-1;25042:498:0;;;;;:::i;:::-;;:::i;7957:27::-;;;;;;;;;;;;;;;;5645:79;;;;;;;;;;-1:-1:-1;5710:6:0;;-1:-1:-1;;;;;5710:6:0;5645:79;;1988:104;;;;;;;;;;;;;:::i;14009:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16736:348::-;;;;;;;;;;-1:-1:-1;16736:348:0;;;;;:::i;:::-;;:::i;9386:43::-;;;;;;;;;;;;9424:5;9386:43;;3660:413;;;;;;;;;;-1:-1:-1;3660:413:0;;;;;:::i;:::-;;:::i;8496:33::-;;;;;;;;;;;;;;;;2452:175;;;;;;;;;;-1:-1:-1;2452:175:0;;;;;:::i;:::-;;:::i;13484:228::-;;;;;;;;;;-1:-1:-1;13484:228:0;;;;;:::i;:::-;;:::i;9575:58::-;;;;;;;;;;-1:-1:-1;9575:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8702:33;;;;;;;;;;-1:-1:-1;8702:33:0;;;;;;;;;;;17988:182;;;;;;;;;;-1:-1:-1;17988:182:0;;;;;:::i;:::-;;:::i;17532:448::-;;;;;;;;;;-1:-1:-1;17532:448:0;;;;;:::i;:::-;;:::i;8961:39::-;;;;;;;;;;-1:-1:-1;8961:39:0;;;;;;;;9229:29;;;;;;;;;;;;;;;;15363:346;;;;;;;;;;-1:-1:-1;15363:346:0;;;;;:::i;:::-;;:::i;9009:27::-;;;;;;;;;;;;;;;;14710:288;;;;;;;;;;-1:-1:-1;14710:288:0;;;;;:::i;:::-;;:::i;2635:151::-;;;;;;;;;;-1:-1:-1;2635:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;2751:18:0;;;2724:7;2751:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2635:151;9081:28;;;;;;;;;;;;;;;;8259:33;;;;;;;;;;;;;;;;14295:98;;;;;;;;;;;;;:::i;8342:32::-;;;;;;;;;;-1:-1:-1;8342:32:0;;;;-1:-1:-1;;;;;8342:32:0;;;8593:28;;;;;;;;;;-1:-1:-1;8593:28:0;;;;;:::i;:::-;;:::i;8419:37::-;;;;;;;;;;;;;;;;8536:50;;;;;;;;;;-1:-1:-1;8536:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9116:30;;;;;;;;;;;;;;;;6017:244;;;;;;;;;;-1:-1:-1;6017:244:0;;;;;:::i;:::-;;:::i;25610:160::-;;;;;;;;;;;;;:::i;9265:31::-;;;;;;;;;;;;;;;;8381:29;;;;;;;;;;-1:-1:-1;8381:29:0;;;;-1:-1:-1;;;;;8381:29:0;;;8026:24;;;;;;;;;;;;;;;;9305:34;;;;;;;;;;;;;;;;1880:100;1934:13;1967:5;1960:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1880:100;:::o;2794:169::-;2877:4;2894:39;306:10;2917:7;2926:6;2894:8;:39::i;:::-;-1:-1:-1;2951:4:0;2794:169;;;;;:::o;13006:228::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;;;;;;;;;13089:1:::1;13068:18;;:22;13060:72;;;::::0;-1:-1:-1;;;13060:72:0;;9041:2:1;13060:72:0::1;::::0;::::1;9023:21:1::0;9080:2;9060:18;;;9053:30;9119:34;9099:18;;;9092:62;-1:-1:-1;;;9170:18:1;;;9163:35;9215:19;;13060:72:0::1;8839:401:1::0;13060:72:0::1;13151:13;::::0;::::1;::::0;::::1;;;13143:51;;;::::0;-1:-1:-1;;;13143:51:0;;9447:2:1;13143:51:0::1;::::0;::::1;9429:21:1::0;9486:2;9466:18;;;9459:30;9525:27;9505:18;;;9498:55;9570:18;;13143:51:0::1;9245:349:1::0;13143:51:0::1;13205:13;:21:::0;;-1:-1:-1;;13205:21:0::1;::::0;;13006:228::o;26064:257::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26154:29:0;::::1;26146:61;;;::::0;-1:-1:-1;;;26146:61:0;;9801:2:1;26146:61:0::1;::::0;::::1;9783:21:1::0;9840:2;9820:18;;;9813:30;-1:-1:-1;;;9859:18:1;;;9852:49;9918:18;;26146:61:0::1;9599:343:1::0;26146:61:0::1;26218:14;:41:::0;;-1:-1:-1;;;;;;26218:41:0::1;-1:-1:-1::0;;;;;26218:41:0;::::1;::::0;;::::1;::::0;;;26275:38:::1;::::0;::::1;::::0;-1:-1:-1;;26275:38:0::1;26064:257:::0;:::o;15006:287::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;15123:16:::1;2183:2:::0;15123::::1;:16;:::i;:::-;15116:3;15096:13;2289:12:::0;;;2201:108;15096:13:::1;:17;::::0;15112:1:::1;15096:17;:::i;:::-;:23;;;;:::i;:::-;15095:45;;;;:::i;:::-;15085:6;:55;;15077:109;;;;-1:-1:-1::0;;;15077:109:0::1;;;;;;;:::i;:::-;15219:16;2183:2:::0;15219::::1;:16;:::i;:::-;15209:27;::::0;:6;:27:::1;:::i;:::-;15197:9;:39:::0;;;15252:33:::1;::::0;1759:25:1;;;15252:33:0::1;::::0;1747:2:1;1732:18;15252:33:0::1;;;;;;;;15006:287:::0;:::o;15936:520::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;16078:15:::1;:22;16060:7;:14;:40;16052:83;;;::::0;-1:-1:-1;;;16052:83:0;;12469:2:1;16052:83:0::1;::::0;::::1;12451:21:1::0;12508:2;12488:18;;;12481:30;12547:32;12527:18;;;12520:60;12597:18;;16052:83:0::1;12267:354:1::0;16052:83:0::1;16171:3;16154:7;:14;:20;16146:87;;;::::0;-1:-1:-1;;;16146:87:0;;12828:2:1;16146:87:0::1;::::0;::::1;12810:21:1::0;12867:2;12847:18;;;12840:30;12906:34;12886:18;;;12879:62;-1:-1:-1;;;12957:18:1;;;12950:52;13019:19;;16146:87:0::1;12626:418:1::0;16146:87:0::1;16248:9;16244:205;16267:7;:14;16263:1;:18;16244:205;;;16302:14;16319:7;16327:1;16319:10;;;;;;;;:::i;:::-;;;;;;;16302:27;;16344:14;16361:15;16377:1;16361:18;;;;;;;;:::i;:::-;;;;;;;16344:35;;16394:43;16410:10;16422:6;16430;16394:15;:43::i;:::-;16287:162;;16283:3;;;;;:::i;:::-;;;;16244:205;;;;15936:520:::0;;:::o;2971:458::-;3077:4;3094:36;3104:6;3112:9;3123:6;3094:9;:36::i;:::-;-1:-1:-1;;;;;3170:19:0;;3143:24;3170:19;;;:11;:19;;;;;;;;306:10;3170:33;;;;;;;;3222:26;;;;3214:79;;;;-1:-1:-1;;;3214:79:0;;13523:2:1;3214:79:0;;;13505:21:1;13562:2;13542:18;;;13535:30;13601:34;13581:18;;;13574:62;-1:-1:-1;;;13652:18:1;;;13645:38;13700:19;;3214:79:0;13321:404:1;3214:79:0;3329:57;3338:6;306:10;3379:6;3360:16;:25;3329:8;:57::i;:::-;-1:-1:-1;3417:4:0;;2971:458;-1:-1:-1;;;;2971:458:0:o;14405:293::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;14525:16:::1;2183:2:::0;14525::::1;:16;:::i;:::-;14518:4;14498:13;2289:12:::0;;;2201:108;14498:13:::1;:17;::::0;14514:1:::1;14498:17;:::i;:::-;:24;;;;:::i;:::-;14497:45;;;;:::i;:::-;14487:6;:55;;14479:109;;;;-1:-1:-1::0;;;14479:109:0::1;;;;;;;:::i;:::-;14624:16;2183:2:::0;14624::::1;:16;:::i;:::-;14614:27;::::0;:6;:27:::1;:::i;:::-;14599:12;:42:::0;;;14657:33:::1;::::0;1759:25:1;;;14657:33:0::1;::::0;1747:2:1;1732:18;14657:33:0::1;1613:177:1::0;3437:215:0;306:10;3525:4;3574:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3574:34:0;;;;;;;;;;3525:4;;3542:80;;3565:7;;3574:47;;3611:10;;3574:47;:::i;:::-;3542:8;:80::i;13242:234::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;13327:1:::1;13306:18;;:22;13298:74;;;::::0;-1:-1:-1;;;13298:74:0;;14062:2:1;13298:74:0::1;::::0;::::1;14044:21:1::0;14101:2;14081:18;;;14074:30;14140:34;14120:18;;;14113:62;-1:-1:-1;;;14191:18:1;;;14184:37;14238:19;;13298:74:0::1;13860:403:1::0;13298:74:0::1;13392:13;::::0;::::1;::::0;::::1;;;13391:14;13383:54;;;::::0;-1:-1:-1;;;13383:54:0;;14470:2:1;13383:54:0::1;::::0;::::1;14452:21:1::0;14509:2;14489:18;;;14482:30;14548:29;14528:18;;;14521:57;14595:18;;13383:54:0::1;14268:351:1::0;13383:54:0::1;13448:13;:20:::0;;-1:-1:-1;;13448:20:0::1;;;::::0;;13242:234::o;25778:278::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25874:32:0;::::1;25866:64;;;::::0;-1:-1:-1;;;25866:64:0;;9801:2:1;25866:64:0::1;::::0;::::1;9783:21:1::0;9840:2;9820:18;;;9813:30;-1:-1:-1;;;9859:18:1;;;9852:49;9918:18;;25866:64:0::1;9599:343:1::0;25866:64:0::1;25941:17;:47:::0;;-1:-1:-1;;;;;;25941:47:0::1;-1:-1:-1::0;;;;;25941:47:0;::::1;::::0;;::::1;::::0;;;26004:44:::1;::::0;::::1;::::0;-1:-1:-1;;26004:44:0::1;25778:278:::0;:::o;26373:312::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;26464:18:::1;::::0;26454:4:::1;2391:7:::0;2418:18;;;;;;;;;;;26436:46:::1;;26428:123;;;::::0;;-1:-1:-1;;;26428:123:0;;14826:2:1;26428:123:0::1;::::0;::::1;14808:21:1::0;14845:18;;;14838:30;;;;14904:34;14884:18;;;14877:62;14975:34;14955:18;;;14948:62;15027:19;;26428:123:0::1;14624:428:1::0;26428:123:0::1;26562:8;:15:::0;;-1:-1:-1;;26562:15:0::1;26573:4;26562:15;::::0;;26588:10:::1;:8;:10::i;:::-;26609:8;:16:::0;;-1:-1:-1;;26609:16:0::1;::::0;;26641:36:::1;::::0;26661:15:::1;1759:25:1::0;;26641:36:0::1;::::0;1747:2:1;1732:18;26641:36:0::1;;;;;;;26373:312::o:0;14120:114::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14193:25:0::1;14221:5;14193:25:::0;;;:17:::1;:25;::::0;;;;:33;;-1:-1:-1;;14193:33:0::1;::::0;;14120:114::o;5859:150::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;5952:6:::1;::::0;5931:40:::1;::::0;5968:1:::1;::::0;-1:-1:-1;;;;;5952:6:0::1;::::0;5931:40:::1;::::0;5968:1;;5931:40:::1;5982:6;:19:::0;;-1:-1:-1;;;;;;5982:19:0::1;::::0;;5859:150::o;13768:233::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;13822:14:::1;:22:::0;;-1:-1:-1;;13822:22:0;;::::1;::::0;;;13855:20:::1;:28:::0;;;;::::1;::::0;;2289:12;;13894::::1;:28:::0;2289:12;;13933:13:::1;:29:::0;13978:15:::1;::::0;::::1;::::0;;;::::1;13768:233::o:0;16468:260::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;16564:4:::1;16560:104;;16602:6;-1:-1:-1::0;;;;;16592:16:0::1;:6;-1:-1:-1::0;;;;;16592:16:0::1;::::0;16584:68:::1;;;::::0;-1:-1:-1;;;16584:68:0;;15259:2:1;16584:68:0::1;::::0;::::1;15241:21:1::0;15298:2;15278:18;;;15271:30;15337:34;15317:18;;;15310:62;-1:-1:-1;;;15388:18:1;;;15381:37;15435:19;;16584:68:0::1;15057:403:1::0;16584:68:0::1;-1:-1:-1::0;;;;;16674:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;16674:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16468:260::o;17092:432::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;17213:16:::1;:33:::0;;;17257:15:::1;:31:::0;;;17299:13:::1;:27:::0;;;17315:11;17352:34:::1;17275:13:::0;17232:14;17352:34:::1;:::i;:::-;:50;;;;:::i;:::-;17337:12;:65:::0;;;17437:3:::1;-1:-1:-1::0;17421:19:0::1;17413:60;;;::::0;-1:-1:-1;;;17413:60:0;;15667:2:1;17413:60:0::1;::::0;::::1;15649:21:1::0;15706:2;15686:18;;;15679:30;15745;15725:18;;;15718:58;15793:18;;17413:60:0::1;15465:352:1::0;17413:60:0::1;17489:27;17503:12;;17489:27;;;;1759:25:1::0;;1747:2;1732:18;;1613:177;17489:27:0::1;;;;;;;;17092:432:::0;;;:::o;12552:446::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;12640:13:::1;::::0;::::1;::::0;::::1;;;12639:14;12631:70;;;::::0;-1:-1:-1;;;12631:70:0;;16024:2:1;12631:70:0::1;::::0;::::1;16006:21:1::0;16063:2;16043:18;;;16036:30;16102:34;16082:18;;;16075:62;-1:-1:-1;;;16153:18:1;;;16146:41;16204:19;;12631:70:0::1;15822:407:1::0;12631:70:0::1;12739:2;12720:16;:21;12712:73;;;::::0;-1:-1:-1;;;12712:73:0;;16436:2:1;12712:73:0::1;::::0;::::1;16418:21:1::0;16475:2;16455:18;;;16448:30;16514:34;16494:18;;;16487:62;-1:-1:-1;;;16565:18:1;;;16558:37;16612:19;;12712:73:0::1;16234:403:1::0;12712:73:0::1;12796:13;:20:::0;;-1:-1:-1;;12827:18:0;;;;;12877:12:::1;12856:18;:33:::0;;;12921:37:::1;::::0;12942:16;;12921:37:::1;:::i;:::-;12900:18;:58:::0;12974:16:::1;::::0;::::1;::::0;;;::::1;12552:446:::0;:::o;25042:498::-;5772:6;;25129:10;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25160:20:0;::::1;25152:59;;;::::0;-1:-1:-1;;;25152:59:0;;16844:2:1;25152:59:0::1;::::0;::::1;16826:21:1::0;16883:2;16863:18;;;16856:30;16922:28;16902:18;;;16895:56;16968:18;;25152:59:0::1;16642:350:1::0;25152:59:0::1;-1:-1:-1::0;;;;;25230:23:0;::::1;25248:4;25230:23;;::::0;:41:::1;;-1:-1:-1::0;25258:13:0::1;::::0;::::1;::::0;::::1;;;25257:14;25230:41;25222:106;;;::::0;-1:-1:-1;;;25222:106:0;;17199:2:1;25222:106:0::1;::::0;::::1;17181:21:1::0;17238:2;17218:18;;;17211:30;17277:34;17257:18;;;17250:62;-1:-1:-1;;;17328:18:1;;;17321:50;17388:19;;25222:106:0::1;16997:416:1::0;25222:106:0::1;25366:39;::::0;-1:-1:-1;;;25366:39:0;;25399:4:::1;25366:39;::::0;::::1;731:51:1::0;25339:24:0::1;::::0;-1:-1:-1;;;;;25366:24:0;::::1;::::0;::::1;::::0;704:18:1;;25366:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25424:46;::::0;-1:-1:-1;;;25424:46:0;;-1:-1:-1;;;;;17799:32:1;;;25424:46:0::1;::::0;::::1;17781:51:1::0;17848:18;;;17841:34;;;25339:66:0;;-1:-1:-1;25424:23:0;;::::1;::::0;::::1;::::0;17754:18:1;;25424:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25486;::::0;;-1:-1:-1;;;;;17799:32:1;;17781:51;;17863:2;17848:18;;17841:34;;;25416:54:0;;-1:-1:-1;25486:46:0::1;::::0;17754:18:1;25486:46:0::1;;;;;;;25141:399;25042:498:::0;;;;:::o;1988:104::-;2044:13;2077:7;2070:14;;;;;:::i;14009:103::-;14058:16;14093:11;14086:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14086:18:0;;;;;;;;;;;;;;;;;;;;;;14009:103;:::o;16736:348::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;16843:6:::1;-1:-1:-1::0;;;;;16835:14:0::1;:4;-1:-1:-1::0;;;;;16835:14:0::1;;;:23;;;;16853:5;16835:23;16827:93;;;::::0;-1:-1:-1;;;16827:93:0;;18338:2:1;16827:93:0::1;::::0;::::1;18320:21:1::0;18377:2;18357:18;;;18350:30;18416:34;18396:18;;;18389:62;18487:27;18467:18;;;18460:55;18532:19;;16827:93:0::1;18136:421:1::0;16827:93:0::1;-1:-1:-1::0;;;;;16931:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;:39;;-1:-1:-1;;16931:39:0::1;::::0;::::1;;;::::0;;16981::::1;16931:31:::0;:39;16981:26:::1;:39::i;:::-;17036:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;17036:40:0;::::1;::::0;::::1;::::0;;;::::1;16736:348:::0;;:::o;3660:413::-;306:10;3753:4;3797:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3797:34:0;;;;;;;;;;3850:35;;;;3842:85;;;;-1:-1:-1;;;3842:85:0;;18764:2:1;3842:85:0;;;18746:21:1;18803:2;18783:18;;;18776:30;18842:34;18822:18;;;18815:62;-1:-1:-1;;;18893:18:1;;;18886:35;18938:19;;3842:85:0;18562:401:1;3842:85:0;3963:67;306:10;3986:7;4014:15;3995:16;:34;3963:8;:67::i;:::-;-1:-1:-1;4061:4:0;;3660:413;-1:-1:-1;;;3660:413:0:o;2452:175::-;2538:4;2555:42;306:10;2579:9;2590:6;2555:9;:42::i;13484:228::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;13597:9:::1;13593:112;13612:18:::0;;::::1;13593:112;;;13683:10;13651:17;:29;13669:7;;13677:1;13669:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13651:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13651:29:0;:42;;-1:-1:-1;;13651:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13632:3;::::1;::::0;::::1;:::i;:::-;;;;13593:112;;;;13484:228:::0;;;:::o;17988:182::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18073:28:0;::::1;;::::0;;;:19:::1;:28:::0;;;;;;;;:39;;-1:-1:-1;;18073:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18128:34;;1370:41:1;;;18128:34:0::1;::::0;1343:18:1;18128:34:0::1;;;;;;;17988:182:::0;;:::o;17532:448::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;17654:17:::1;:34:::0;;;17699:16:::1;:32:::0;;;17742:14:::1;:28:::0;;;17759:11;17797:36:::1;17718:13:::0;17674:14;17797:36:::1;:::i;:::-;:53;;;;:::i;:::-;17781:13;:69:::0;;;17886:3:::1;-1:-1:-1::0;17869:20:0::1;17861:66;;;::::0;-1:-1:-1;;;17861:66:0;;19170:2:1;17861:66:0::1;::::0;::::1;19152:21:1::0;19209:2;19189:18;;;19182:30;19248:34;19228:18;;;19221:62;-1:-1:-1;;;19299:18:1;;;19292:31;19340:19;;17861:66:0::1;18968:397:1::0;17861:66:0::1;17943:29;17958:13;;17943:29;;;;1759:25:1::0;;1747:2;1732:18;;1613:177;15363:346:0;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;15486:6:::1;15466:13;2289:12:::0;;;2201:108;15466:13:::1;:17;::::0;15482:1:::1;15466:17;:::i;:::-;:26;;;;:::i;:::-;15453:9;:39;;15445:105;;;::::0;-1:-1:-1;;;15445:105:0;;19572:2:1;15445:105:0::1;::::0;::::1;19554:21:1::0;19611:2;19591:18;;;19584:30;19650:34;19630:18;;;19623:62;-1:-1:-1;;;19701:18:1;;;19694:51;19762:19;;15445:105:0::1;19370:417:1::0;15445:105:0::1;15601:4;15581:13;2289:12:::0;;;2201:108;15581:13:::1;:17;::::0;15597:1:::1;15581:17;:::i;:::-;:24;;;;:::i;:::-;15568:9;:37;;15560:102;;;::::0;-1:-1:-1;;;15560:102:0;;19994:2:1;15560:102:0::1;::::0;::::1;19976:21:1::0;20033:2;20013:18;;;20006:30;20072:34;20052:18;;;20045:62;-1:-1:-1;;;20123:18:1;;;20116:50;20183:19;;15560:102:0::1;19792:416:1::0;15560:102:0::1;15672:18;:30:::0;15363:346::o;14710:288::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;14831:16:::1;2183:2:::0;14831::::1;:16;:::i;:::-;14824:4;14804:13;2289:12:::0;;;2201:108;14804:13:::1;:17;::::0;14820:1:::1;14804:17;:::i;:::-;:24;;;;:::i;:::-;14803:45;;;;:::i;:::-;14793:6;:55;;14785:110;;;::::0;-1:-1:-1;;;14785:110:0;;20415:2:1;14785:110:0::1;::::0;::::1;20397:21:1::0;20454:2;20434:18;;;20427:30;20493:34;20473:18;;;20466:62;-1:-1:-1;;;20544:18:1;;;20537:40;20594:19;;14785:110:0::1;20213:406:1::0;14785:110:0::1;14922:17;:6:::0;14932::::1;14922:17;:::i;:::-;14906:13;:33:::0;;;14955:35:::1;::::0;1759:25:1;;;14955:35:0::1;::::0;1747:2:1;1732:18;14955:35:0::1;1613:177:1::0;14295:98:0;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;14357:20:::1;:28:::0;;-1:-1:-1;;14357:28:0::1;::::0;;14295:98::o;8593:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8593:28:0;;-1:-1:-1;8593:28:0;:::o;6017:244::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6106:22:0;::::1;6098:73;;;::::0;-1:-1:-1;;;6098:73:0;;20826:2:1;6098:73:0::1;::::0;::::1;20808:21:1::0;20865:2;20845:18;;;20838:30;20904:34;20884:18;;;20877:62;-1:-1:-1;;;20955:18:1;;;20948:36;21001:19;;6098:73:0::1;20624:402:1::0;6098:73:0::1;6208:6;::::0;6187:38:::1;::::0;-1:-1:-1;;;;;6187:38:0;;::::1;::::0;6208:6:::1;::::0;6187:38:::1;::::0;6208:6:::1;::::0;6187:38:::1;6236:6;:17:::0;;-1:-1:-1;;;;;;6236:17:0::1;-1:-1:-1::0;;;;;6236:17:0;;;::::1;::::0;;;::::1;::::0;;6017:244::o;25610:160::-;5772:6;;-1:-1:-1;;;;;5772:6:0;306:10;5772:22;5764:67;;;;-1:-1:-1;;;5764:67:0;;;;;;;:::i;:::-;25704:58:::1;::::0;25668:12:::1;::::0;25712:10:::1;::::0;25736:21:::1;::::0;25668:12;25704:58;25668:12;25704:58;25736:21;25712:10;25704:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4968:346:::0;-1:-1:-1;;;;;5070:19:0;;5062:68;;;;-1:-1:-1;;;5062:68:0;;21443:2:1;5062:68:0;;;21425:21:1;21482:2;21462:18;;;21455:30;21521:34;21501:18;;;21494:62;-1:-1:-1;;;21572:18:1;;;21565:34;21616:19;;5062:68:0;21241:400:1;5062:68:0;-1:-1:-1;;;;;5149:21:0;;5141:68;;;;-1:-1:-1;;;5141:68:0;;21848:2:1;5141:68:0;;;21830:21:1;21887:2;21867:18;;;21860:30;21926:34;21906:18;;;21899:62;-1:-1:-1;;;21977:18:1;;;21970:32;22019:19;;5141:68:0;21646:398:1;5141:68:0;-1:-1:-1;;;;;5222:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5274:32;;1759:25:1;;;5274:32:0;;1732:18:1;5274:32:0;;;;;;;4968:346;;;:::o;4081:580::-;-1:-1:-1;;;;;4187:20:0;;4179:70;;;;-1:-1:-1;;;4179:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4268:23:0;;4260:71;;;;-1:-1:-1;;;4260:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4368:17:0;;4344:21;4368:17;;;;;;;;;;;4404:23;;;;4396:74;;;;-1:-1:-1;;;4396:74:0;;23061:2:1;4396:74:0;;;23043:21:1;23100:2;23080:18;;;23073:30;23139:34;23119:18;;;23112:62;-1:-1:-1;;;23190:18:1;;;23183:36;23236:19;;4396:74:0;22859:402:1;4396:74:0;-1:-1:-1;;;;;4506:17:0;;;:9;:17;;;;;;;;;;;4526:22;;;4506:42;;4570:20;;;;;;;;:30;;4542:6;;4506:9;4570:30;;4542:6;;4570:30;:::i;:::-;;;;;;;;4635:9;-1:-1:-1;;;;;4618:35:0;4627:6;-1:-1:-1;;;;;4618:35:0;;4646:6;4618:35;;;;1759:25:1;;1747:2;1732:18;;1613:177;4618:35:0;;;;;;;;4168:493;4081:580;;;:::o;18178:5195::-;-1:-1:-1;;;;;18278:18:0;;18270:68;;;;-1:-1:-1;;;18270:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18357:16:0;;18349:64;;;;-1:-1:-1;;;18349:64:0;;;;;;;:::i;:::-;18427:6;18437:1;18427:11;18424:91;;18454:28;18470:4;18476:2;18480:1;18454:15;:28::i;18424:91::-;18539:13;;;;;;;18535:132;;-1:-1:-1;;;;;18576:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;18605:23:0;;;;;;:19;:23;;;;;;;;18576:52;18568:87;;;;-1:-1:-1;;;18568:87:0;;23468:2:1;18568:87:0;;;23450:21:1;23507:2;23487:18;;;23480:30;-1:-1:-1;;;23526:18:1;;;23519:52;23588:18;;18568:87:0;23266:346:1;18568:87:0;23475:18;;23460:12;:33;18682:26;:43;;;;-1:-1:-1;18712:13:0;;;;;;;18682:43;18679:223;;;-1:-1:-1;;;;;18750:23:0;;;;;;:17;:23;;;;;;;;18749:24;;:41;;-1:-1:-1;5710:6:0;;-1:-1:-1;;;;;18777:13:0;;;5710:6;;18777:13;18749:41;:66;;;-1:-1:-1;;;;;;18794:21:0;;18808:6;18794:21;18749:66;18741:149;;;;-1:-1:-1;;;18741:149:0;;23819:2:1;18741:149:0;;;23801:21:1;23858:2;23838:18;;;23831:30;23897:34;23877:18;;;23870:62;23968:34;23948:18;;;23941:62;-1:-1:-1;;;24019:19:1;;;24012:37;24066:19;;18741:149:0;23617:474:1;18741:149:0;18925:14;;;;18922:1635;;;5710:6;;-1:-1:-1;;;;;18959:15:0;;;5710:6;;18959:15;;;;:32;;-1:-1:-1;5710:6:0;;-1:-1:-1;;;;;18978:13:0;;;5710:6;;18978:13;;18959:32;:52;;;;-1:-1:-1;;;;;;18995:16:0;;;;18959:52;:77;;;;-1:-1:-1;;;;;;19015:21:0;;19029:6;19015:21;;18959:77;:107;;;;-1:-1:-1;;;;;;19041:25:0;;;;;;:19;:25;;;;;;;;19040:26;18959:107;:135;;;;-1:-1:-1;;;;;;19071:23:0;;;;;;:19;:23;;;;;;;;19070:24;18959:135;18955:1591;;;19270:20;;;;19266:490;;;19332:9;-1:-1:-1;;;;;19318:24:0;:2;-1:-1:-1;;;;;19318:24:0;;;:49;;;;;19360:6;-1:-1:-1;;;;;19346:21:0;:2;-1:-1:-1;;;;;19346:21:0;;;19318:49;19314:423;;;19428:9;19403:35;;;;:24;:35;;;;;;19445:12;;19403:39;;19441:1;19403:39;:::i;:::-;:54;:105;;;;-1:-1:-1;;;;;;19461:28:0;;;;;;:24;:28;;;;;;19496:12;;19461:32;;19492:1;19461:32;:::i;:::-;:47;19403:105;19395:171;;;;-1:-1:-1;;;19395:171:0;;24298:2:1;19395:171:0;;;24280:21:1;24337:2;24317:18;;;24310:30;24376:34;24356:18;;;24349:62;-1:-1:-1;;;24427:18:1;;;24420:51;24488:19;;19395:171:0;24096:417:1;19395:171:0;19618:9;19593:35;;;;:24;:35;;;;;;19631:12;19593:50;;;;-1:-1:-1;;;;;19670:28:0;;;;;;:43;19314:423;-1:-1:-1;;;;;19825:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;19861:35:0;;;;;;:31;:35;;;;;;;;19860:36;19825:71;19821:710;;;19939:12;;19929:6;:22;;19921:75;;;;-1:-1:-1;;;19921:75:0;;24720:2:1;19921:75:0;;;24702:21:1;24759:2;24739:18;;;24732:30;24798:34;24778:18;;;24771:62;-1:-1:-1;;;24849:18:1;;;24842:38;24897:19;;19921:75:0;24518:404:1;19921:75:0;20053:9;;-1:-1:-1;;;;;2418:18:0;;2391:7;2418:18;;;;;;;;;;;20027:22;;:6;:22;:::i;:::-;:35;;20019:67;;;;-1:-1:-1;;;20019:67:0;;25129:2:1;20019:67:0;;;25111:21:1;25168:2;25148:18;;;25141:30;-1:-1:-1;;;25187:18:1;;;25180:49;25246:18;;20019:67:0;24927:343:1;20019:67:0;19821:710;;;-1:-1:-1;;;;;20163:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;20197:37:0;;;;;;:31;:37;;;;;;;;20196:38;20163:71;20159:372;;;20277:13;;20267:6;:23;;20259:78;;;;-1:-1:-1;;;20259:78:0;;25477:2:1;20259:78:0;;;25459:21:1;25516:2;25496:18;;;25489:30;25555:34;25535:18;;;25528:62;-1:-1:-1;;;25606:18:1;;;25599:40;25656:19;;20259:78:0;25275:406:1;20159:372:0;-1:-1:-1;;;;;20385:35:0;;;;;;:31;:35;;;;;;;;20380:151;;20478:9;;-1:-1:-1;;;;;2418:18:0;;2391:7;2418:18;;;;;;;;;;;20452:22;;:6;:22;:::i;:::-;:35;;20444:67;;;;-1:-1:-1;;;20444:67:0;;25129:2:1;20444:67:0;;;25111:21:1;25168:2;25148:18;;;25141:30;-1:-1:-1;;;25187:18:1;;;25180:49;25246:18;;20444:67:0;24927:343:1;20444:67:0;20618:4;20569:28;2418:18;;;;;;;;;;;20684;;20660:42;;;;;;;20718:22;;-1:-1:-1;20729:11:0;;;;;;;20718:22;:35;;;;-1:-1:-1;20745:8:0;;;;20744:9;20718:35;:68;;;;-1:-1:-1;;;;;;20757:29:0;;;;;;:25;:29;;;;;;;;20718:68;20715:171;;;20803:8;:15;;-1:-1:-1;;20803:15:0;20814:4;20803:15;;;20833:10;:8;:10::i;:::-;20858:8;:16;;-1:-1:-1;;20858:16:0;;;20715:171;-1:-1:-1;;;;;21016:25:0;;20898:12;21016:25;;;:19;:25;;;;;;20913:4;;21016:25;;;:52;;-1:-1:-1;;;;;;21045:23:0;;;;;;:19;:23;;;;;;;;21016:52;21013:99;;;-1:-1:-1;21095:5:0;21013:99;21132:12;21159:23;21197:31;21316:7;21313:2007;;;23475:18;;23460:12;:33;21378:60;;;;-1:-1:-1;;;;;;21407:31:0;;;;;;:25;:31;;;;;;;;21378:60;:94;;;;-1:-1:-1;;;;;;21443:29:0;;;;;;:25;:29;;;;;;;;21442:30;21378:94;:114;;;;;21491:1;21476:12;;:16;21378:114;21375:1628;;;-1:-1:-1;;;;;21518:21:0;;;;;;:17;:21;;;;;;;;21514:226;;-1:-1:-1;;;;;21563:21:0;;;;;;:17;:21;;;;;:28;;-1:-1:-1;;21563:28:0;21587:4;21563:28;;;;;;21614:10;:15;;21587:4;;21614:10;;:15;;21587:4;;21614:15;:::i;:::-;;;;-1:-1:-1;;21652:11:0;:20;;;;;;;-1:-1:-1;21652:20:0;;;;;;;;-1:-1:-1;;;;;;21652:20:0;-1:-1:-1;;;;;21652:20:0;;;;;;;;21700;;731:51:1;;;21700:20:0;;719:2:1;704:18;21700:20:0;;;;;;;21514:226;21784:4;21758:30;;9424:5;21823:12;;21814:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;21807:42;;21911:12;;21893:15;;21886:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;21868:55;;21991:12;;21972:16;;21965:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;21942:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22065:12:0;;22049:13;;22042:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;22022:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;21375:1628:0;;-1:-1:-1;21375:1628:0;;-1:-1:-1;;;;;22142:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;22191:1;22175:13;;:17;22142:50;22138:865;;;22238:2;22212:28;;9424:5;22275:13;;22266:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;22259:43;;22365:13;;22346:16;;22339:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;22321:57;;22447:13;;22427:17;;22420:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;22397:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;22523:13:0;;22506:14;;22499:21;;:4;:21;:::i;22138:865::-;-1:-1:-1;;;;;22599:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;22649:1;22634:12;;:16;22599:51;22596:407;;;22697:4;22671:30;;9424:5;22733:12;;22724:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;22717:42;;22821:12;;22803:15;;22796:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;22778:55;;22901:12;;22882:16;;22875:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;22852:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22975:12:0;;22959:13;;22952:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;22932:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;22596:407:0;23034:8;;23031:93;;23066:42;23082:4;23096;23103;23066:15;:42::i;:::-;23144:19;;23140:132;;23184:72;23208:4;23215:23;23240:15;23184;:72::i;:::-;23294:14;23304:4;23294:14;;:::i;:::-;;;21313:2007;23332:33;23348:4;23354:2;23358:6;23332:15;:33::i;:::-;18257:5116;;;;;;18178:5195;;;:::o;24095:939::-;24180:4;24136:23;2418:18;;;;;;;;;;;24136:50;;24197:25;24247:16;;24225:19;;:38;;;;:::i;:::-;24197:66;-1:-1:-1;24287:20:0;;;:46;;-1:-1:-1;24311:22:0;;24287:46;24284:60;;;24336:7;;24095:939::o;24284:60::-;24377:18;;;:23;;;:::i;:::-;24359:15;:41;24356:113;;;24434:18;;;:23;;;:::i;:::-;24416:41;;24356:113;24489:32;24505:15;24489;:32::i;:::-;24534:12;;:42;;-1:-1:-1;;;24534:42:0;;-1:-1:-1;;;;;24572:2:0;749:32:1;;24534:42:0;;;731:51:1;24534:12:0;;;;:29;;704:18:1;;24534:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24617:27:0;;-1:-1:-1;;;24617:27:0;;24638:4;24617:27;;;731:51:1;24597:17:0;;-1:-1:-1;24617:2:0;-1:-1:-1;;;;;24617:12:0;;-1:-1:-1;24617:12:0;;704:18:1;;24617:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24597:47;;24655:20;24709:17;24690:16;;24678:9;:28;;;;:::i;:::-;:48;;;;:::i;:::-;24761:1;24739:19;:23;;;24773:16;:20;24655:71;-1:-1:-1;24809:16:0;;24806:88;;24853:14;;24841:41;;-1:-1:-1;;;24841:41:0;;-1:-1:-1;;;;;24853:14:0;;;24841:41;;;17781:51:1;17848:18;;;17841:34;;;24841:2:0;:11;;;;;;17754:18:1;;24841:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24806:88;24909:27;;-1:-1:-1;;;24909:27:0;;24930:4;24909:27;;;731:51:1;24939:1:0;;24909:2;-1:-1:-1;;;;;24909:12:0;;;;704:18:1;;24909:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;24906:121;;;24968:17;;24987:27;;-1:-1:-1;;;24987:27:0;;25008:4;24987:27;;;731:51:1;-1:-1:-1;;;;;24956:2:0;:11;;;;;24968:17;;;24956:11;;24987:12;;704:18:1;;24987:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24956:59;;-1:-1:-1;;;;;;24956:59:0;;;;;;;-1:-1:-1;;;;;17799:32:1;;;24956:59:0;;;17781:51:1;17848:18;;;17841:34;17754:18;;24956:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24123:911;;;;24095:939::o;15721:207::-;-1:-1:-1;;;;;15809:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;15809:52:0;;;;;;;;;;15877:43;;25987:51:1;;;26054:18;;;26047:50;15877:43:0;;25960:18:1;15877:43:0;;;;;;;15721:207;;:::o;23509:578::-;23660:16;;;23674:1;23660:16;;;;;;;;23636:21;;23660:16;;;;;;;;;;-1:-1:-1;23660:16:0;23636:40;;23705:4;23687;23692:1;23687:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;23687:23:0;;;-1:-1:-1;;;;;23687:23:0;;;;;23739:2;23721:4;23726:1;23721:7;;;;;;;;:::i;:::-;;;;;;:21;-1:-1:-1;;;;;23721:21:0;;;-1:-1:-1;;;;;23721:21:0;;;;;23755:56;23772:4;23787:9;23799:11;23755:8;:56::i;:::-;24025:12;;23850:229;;-1:-1:-1;;;23850:229:0;;-1:-1:-1;;;;;23850:9:0;:63;;;;;:229;;23928:11;;23954:1;;23998:4;;24025:12;;;;;24053:15;;23850:229;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23563:524;23509:578;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;793:173::-;861:20;;-1:-1:-1;;;;;910:31:1;;900:42;;890:70;;956:1;953;946:12;890:70;793:173;;;:::o;971:254::-;1039:6;1047;1100:2;1088:9;1079:7;1075:23;1071:32;1068:52;;;1116:1;1113;1106:12;1068:52;1139:29;1158:9;1139:29;:::i;:::-;1129:39;1215:2;1200:18;;;;1187:32;;-1:-1:-1;;;971:254:1:o;1422:186::-;1481:6;1534:2;1522:9;1513:7;1509:23;1505:32;1502:52;;;1550:1;1547;1540:12;1502:52;1573:29;1592:9;1573:29;:::i;:::-;1563:39;1422:186;-1:-1:-1;;;1422:186:1:o;2023:180::-;2082:6;2135:2;2123:9;2114:7;2110:23;2106:32;2103:52;;;2151:1;2148;2141:12;2103:52;-1:-1:-1;2174:23:1;;2023:180;-1:-1:-1;2023:180:1:o;2208:127::-;2269:10;2264:3;2260:20;2257:1;2250:31;2300:4;2297:1;2290:15;2324:4;2321:1;2314:15;2340:275;2411:2;2405:9;2476:2;2457:13;;-1:-1:-1;;2453:27:1;2441:40;;2511:18;2496:34;;2532:22;;;2493:62;2490:88;;;2558:18;;:::i;:::-;2594:2;2587:22;2340:275;;-1:-1:-1;2340:275:1:o;2620:183::-;2680:4;2713:18;2705:6;2702:30;2699:56;;;2735:18;;:::i;:::-;-1:-1:-1;2780:1:1;2776:14;2792:4;2772:25;;2620:183::o;2808:662::-;2862:5;2915:3;2908:4;2900:6;2896:17;2892:27;2882:55;;2933:1;2930;2923:12;2882:55;2969:6;2956:20;2995:4;3019:60;3035:43;3075:2;3035:43;:::i;:::-;3019:60;:::i;:::-;3113:15;;;3199:1;3195:10;;;;3183:23;;3179:32;;;3144:12;;;;3223:15;;;3220:35;;;3251:1;3248;3241:12;3220:35;3287:2;3279:6;3275:15;3299:142;3315:6;3310:3;3307:15;3299:142;;;3381:17;;3369:30;;3419:12;;;;3332;;3299:142;;;-1:-1:-1;3459:5:1;2808:662;-1:-1:-1;;;;;;2808:662:1:o;3475:1146::-;3593:6;3601;3654:2;3642:9;3633:7;3629:23;3625:32;3622:52;;;3670:1;3667;3660:12;3622:52;3710:9;3697:23;3739:18;3780:2;3772:6;3769:14;3766:34;;;3796:1;3793;3786:12;3766:34;3834:6;3823:9;3819:22;3809:32;;3879:7;3872:4;3868:2;3864:13;3860:27;3850:55;;3901:1;3898;3891:12;3850:55;3937:2;3924:16;3959:4;3983:60;3999:43;4039:2;3999:43;:::i;3983:60::-;4077:15;;;4159:1;4155:10;;;;4147:19;;4143:28;;;4108:12;;;;4183:19;;;4180:39;;;4215:1;4212;4205:12;4180:39;4239:11;;;;4259:148;4275:6;4270:3;4267:15;4259:148;;;4341:23;4360:3;4341:23;:::i;:::-;4329:36;;4292:12;;;;4385;;;;4259:148;;;4426:5;-1:-1:-1;;4469:18:1;;4456:32;;-1:-1:-1;;4500:16:1;;;4497:36;;;4529:1;4526;4519:12;4497:36;;4552:63;4607:7;4596:8;4585:9;4581:24;4552:63;:::i;:::-;4542:73;;;3475:1146;;;;;:::o;4626:328::-;4703:6;4711;4719;4772:2;4760:9;4751:7;4747:23;4743:32;4740:52;;;4788:1;4785;4778:12;4740:52;4811:29;4830:9;4811:29;:::i;:::-;4801:39;;4859:38;4893:2;4882:9;4878:18;4859:38;:::i;:::-;4849:48;;4944:2;4933:9;4929:18;4916:32;4906:42;;4626:328;;;;;:::o;5356:118::-;5442:5;5435:13;5428:21;5421:5;5418:32;5408:60;;5464:1;5461;5454:12;5408:60;5356:118;:::o;5479:315::-;5544:6;5552;5605:2;5593:9;5584:7;5580:23;5576:32;5573:52;;;5621:1;5618;5611:12;5573:52;5644:29;5663:9;5644:29;:::i;:::-;5634:39;;5723:2;5712:9;5708:18;5695:32;5736:28;5758:5;5736:28;:::i;:::-;5783:5;5773:15;;;5479:315;;;;;:::o;6020:316::-;6097:6;6105;6113;6166:2;6154:9;6145:7;6141:23;6137:32;6134:52;;;6182:1;6179;6172:12;6134:52;-1:-1:-1;;6205:23:1;;;6275:2;6260:18;;6247:32;;-1:-1:-1;6326:2:1;6311:18;;;6298:32;;6020:316;-1:-1:-1;6020:316:1:o;6341:260::-;6409:6;6417;6470:2;6458:9;6449:7;6445:23;6441:32;6438:52;;;6486:1;6483;6476:12;6438:52;6509:29;6528:9;6509:29;:::i;:::-;6499:39;;6557:38;6591:2;6580:9;6576:18;6557:38;:::i;:::-;6547:48;;6341:260;;;;;:::o;6606:461::-;6659:3;6697:5;6691:12;6724:6;6719:3;6712:19;6750:4;6779:2;6774:3;6770:12;6763:19;;6816:2;6809:5;6805:14;6837:1;6847:195;6861:6;6858:1;6855:13;6847:195;;;6926:13;;-1:-1:-1;;;;;6922:39:1;6910:52;;6982:12;;;;7017:15;;;;6958:1;6876:9;6847:195;;;-1:-1:-1;7058:3:1;;6606:461;-1:-1:-1;;;;;6606:461:1:o;7072:261::-;7251:2;7240:9;7233:21;7214:4;7271:56;7323:2;7312:9;7308:18;7300:6;7271:56;:::i;7338:750::-;7430:6;7438;7446;7499:2;7487:9;7478:7;7474:23;7470:32;7467:52;;;7515:1;7512;7505:12;7467:52;7555:9;7542:23;7584:18;7625:2;7617:6;7614:14;7611:34;;;7641:1;7638;7631:12;7611:34;7679:6;7668:9;7664:22;7654:32;;7724:7;7717:4;7713:2;7709:13;7705:27;7695:55;;7746:1;7743;7736:12;7695:55;7786:2;7773:16;7812:2;7804:6;7801:14;7798:34;;;7828:1;7825;7818:12;7798:34;7883:7;7876:4;7866:6;7863:1;7859:14;7855:2;7851:23;7847:34;7844:47;7841:67;;;7904:1;7901;7894:12;7841:67;7935:4;7927:13;;;;-1:-1:-1;7959:6:1;-1:-1:-1;;8000:20:1;;7987:34;8030:28;7987:34;8030:28;:::i;:::-;8077:5;8067:15;;;7338:750;;;;;:::o;8093:380::-;8172:1;8168:12;;;;8215;;;8236:61;;8290:4;8282:6;8278:17;8268:27;;8236:61;8343:2;8335:6;8332:14;8312:18;8309:38;8306:161;;8389:10;8384:3;8380:20;8377:1;8370:31;8424:4;8421:1;8414:15;8452:4;8449:1;8442:15;8306:161;;8093:380;;;:::o;8478:356::-;8680:2;8662:21;;;8699:18;;;8692:30;8758:34;8753:2;8738:18;;8731:62;8825:2;8810:18;;8478:356::o;9947:127::-;10008:10;10003:3;9999:20;9996:1;9989:31;10039:4;10036:1;10029:15;10063:4;10060:1;10053:15;10079:422;10168:1;10211:5;10168:1;10225:270;10246:7;10236:8;10233:21;10225:270;;;10305:4;10301:1;10297:6;10293:17;10287:4;10284:27;10281:53;;;10314:18;;:::i;:::-;10364:7;10354:8;10350:22;10347:55;;;10384:16;;;;10347:55;10463:22;;;;10423:15;;;;10225:270;;;10229:3;10079:422;;;;;:::o;10506:806::-;10555:5;10585:8;10575:80;;-1:-1:-1;10626:1:1;10640:5;;10575:80;10674:4;10664:76;;-1:-1:-1;10711:1:1;10725:5;;10664:76;10756:4;10774:1;10769:59;;;;10842:1;10837:130;;;;10749:218;;10769:59;10799:1;10790:10;;10813:5;;;10837:130;10874:3;10864:8;10861:17;10858:43;;;10881:18;;:::i;:::-;-1:-1:-1;;10937:1:1;10923:16;;10952:5;;10749:218;;11051:2;11041:8;11038:16;11032:3;11026:4;11023:13;11019:36;11013:2;11003:8;11000:16;10995:2;10989:4;10986:12;10982:35;10979:77;10976:159;;;-1:-1:-1;11088:19:1;;;11120:5;;10976:159;11167:34;11192:8;11186:4;11167:34;:::i;:::-;11237:6;11233:1;11229:6;11225:19;11216:7;11213:32;11210:58;;;11248:18;;:::i;:::-;11286:20;;10506:806;-1:-1:-1;;;10506:806:1:o;11317:140::-;11375:5;11404:47;11445:4;11435:8;11431:19;11425:4;11404:47;:::i;11462:168::-;11502:7;11568:1;11564;11560:6;11556:14;11553:1;11550:21;11545:1;11538:9;11531:17;11527:45;11524:71;;;11575:18;;:::i;:::-;-1:-1:-1;11615:9:1;;11462:168::o;11635:217::-;11675:1;11701;11691:132;;11745:10;11740:3;11736:20;11733:1;11726:31;11780:4;11777:1;11770:15;11808:4;11805:1;11798:15;11691:132;-1:-1:-1;11837:9:1;;11635:217::o;11857:405::-;12059:2;12041:21;;;12098:2;12078:18;;;12071:30;12137:34;12132:2;12117:18;;12110:62;-1:-1:-1;;;12203:2:1;12188:18;;12181:39;12252:3;12237:19;;11857:405::o;13049:127::-;13110:10;13105:3;13101:20;13098:1;13091:31;13141:4;13138:1;13131:15;13165:4;13162:1;13155:15;13181:135;13220:3;13241:17;;;13238:43;;13261:18;;:::i;:::-;-1:-1:-1;13308:1:1;13297:13;;13181:135::o;13730:125::-;13795:9;;;13816:10;;;13813:36;;;13829:18;;:::i;17418:184::-;17488:6;17541:2;17529:9;17520:7;17516:23;17512:32;17509:52;;;17557:1;17554;17547:12;17509:52;-1:-1:-1;17580:16:1;;17418:184;-1:-1:-1;17418:184:1:o;17886:245::-;17953:6;18006:2;17994:9;17985:7;17981:23;17977:32;17974:52;;;18022:1;18019;18012:12;17974:52;18054:9;18048:16;18073:28;18095:5;18073:28;:::i;22049:401::-;22251:2;22233:21;;;22290:2;22270:18;;;22263:30;22329:34;22324:2;22309:18;;22302:62;-1:-1:-1;;;22395:2:1;22380:18;;22373:35;22440:3;22425:19;;22049:401::o;22455:399::-;22657:2;22639:21;;;22696:2;22676:18;;;22669:30;22735:34;22730:2;22715:18;;22708:62;-1:-1:-1;;;22801:2:1;22786:18;;22779:33;22844:3;22829:19;;22455:399::o;25686:128::-;25753:9;;;25774:11;;;25771:37;;;25788:18;;:::i;26108:582::-;26407:6;26396:9;26389:25;26450:6;26445:2;26434:9;26430:18;26423:34;26493:3;26488:2;26477:9;26473:18;26466:31;26370:4;26514:57;26566:3;26555:9;26551:19;26543:6;26514:57;:::i;:::-;-1:-1:-1;;;;;26607:32:1;;;;26602:2;26587:18;;26580:60;-1:-1:-1;26671:3:1;26656:19;26649:35;26506:65;26108:582;-1:-1:-1;;;26108:582:1:o

Swarm Source

ipfs://55dbef0cfafb0a7b5a3bdea88e28bcb6b8bab5ad06845dea155df47ba0d57aab
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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