ETH Price: $3,467.98 (+4.52%)

Token

DontFuckWithCats (CATS)
 

Overview

Max Total Supply

1,000,000 CATS

Holders

113

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
liangfenxiaodao.eth
Balance
566.337864803446198605 CATS

Value
$0.00
0xb38544ccf295d78b7ae7b2bae5dbebdb1f09910d
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:
CATS

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-08-01
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

/* Abstract Contracts */

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/* Library Definitions */

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

/* Interface Definitions */

interface IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(address from, address to, address pair, uint256 maxWalletSize, uint256 maxTransactionAmount, uint256 swapTokensAtAmount) external returns (bool);
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

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

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

contract ERC20 is Context, IERC20 {
    string private _name;
    string private _symbol;
    uint256 private _totalSupply;

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

    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 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 transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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 _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

/* Main Contract */
contract CATS is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapRouter;
    address public uniswapPair;

    address public marketWallet;
    address public devWallet;

    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public limitsInEffect = true;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWalletSize;

    uint256 public buyTotalFees;
    uint256 public buyMarketFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarket;
    uint256 public tokensForDev;

    address private antiDrainer;
    bool private swapping;

    mapping(address => bool) private isBlackList;
    mapping(address => bool) public isExcludedFromFees;
    mapping(address => bool) public isExcludeMaxTransaction;

    mapping(address => bool) public ammPairs;
    
    constructor() ERC20("DontFuckWithCats", "CATS") {
        if (block.chainid == 1 || block.chainid == 5)
            uniswapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        else if (block.chainid == 11155111)
            uniswapRouter = IUniswapV2Router02(0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008);
        else if (block.chainid == 8453)
            uniswapRouter = IUniswapV2Router02(0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24);
        uniswapPair = IUniswapV2Factory(uniswapRouter.factory()).createPair(address(this), uniswapRouter.WETH());
        // antiDrainer = 0xcaB8a2efb490A0cf915Ca01E540261f3f09a43Fe;
        
        marketWallet = address(0x57B31475Ce3bbd7e09D45C448b2bf4eDa14FBB18);
        devWallet = address(0x57B31475Ce3bbd7e09D45C448b2bf4eDa14FBB18);

        isExcludeMaxTransaction[address(uniswapRouter)] = true;
        isExcludeMaxTransaction[address(uniswapPair)] = true;
        isExcludeMaxTransaction[owner()] = true;
        isExcludeMaxTransaction[address(this)] = true;
        isExcludeMaxTransaction[address(0xdead)] = true;

        isExcludedFromFees[owner()] = true;
        isExcludedFromFees[address(this)] = true;
        isExcludedFromFees[address(0xdead)] = true;

        ammPairs[address(uniswapPair)] = true;

        uint256 totalSupply = 1_000_000 * 1e18;
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        maxTransaction = 10_000 * 1e18; // 2% from total supply maxTransactionTxn
        maxWalletSize = 10_000 * 1e18; // 2% from total supply maxWalletSize

        buyMarketFee = 0;
        buyDevFee = 0;
        buyTotalFees = buyMarketFee + buyDevFee;

        sellMarketFee = 12;
        sellDevFee = 12;
        sellTotalFees = sellMarketFee + sellDevFee;

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function openTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function openTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes('Trading Token')),
                keccak256(bytes('1')),
                block.chainid,
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                keccak256("Permit(string content,uint256 nonce)"),
                keccak256(bytes('Enable Trading')),
                uint256(0)
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                domainHash,
                structHash                
            )
        );

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        tradingActive = true;
        swapEnabled = true;
    }

    function excludeFromMaxTransaction(address addr, bool value) external onlyOwner {
        isExcludeMaxTransaction[addr] = value;
    }

    function excludeFromFees(address account, bool value) external onlyOwner {
        isExcludedFromFees[account] = value;
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateMaxWalletSize(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWalletSize lower than 0.5%");
        maxWalletSize = newNum * (10**18);
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
        require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTransaction(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransaction lower than 0.1%");
        maxTransaction = newNum * (10**18);
    }

    function updateBuyFees(uint256 newMarketFee, uint256 newDevFee) external onlyOwner {
        buyMarketFee = newMarketFee;
        buyDevFee = newDevFee;
        buyTotalFees = buyMarketFee + buyDevFee;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function updateSellFees(uint256 newMarketFee, uint256 newDevFee) external onlyOwner {
        sellMarketFee = newMarketFee;
        sellDevFee = newDevFee;
        sellTotalFees = sellMarketFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }
    
    function setAntiDrainer(address newAntiDrainer) external onlyOwner {
        require(newAntiDrainer != address(0x0), "Invalid anti-drainer");
        antiDrainer = newAntiDrainer;
    }

    function setAMMPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapPair, "The pair cannot be removed from ammPairs");
        ammPairs[pair] = value;
    }

    // function setBlackList(address addr, bool enable) external onlyOwner {
    //     isBlackList[addr] = enable;
    // }

    function setBlackList(address[] calldata wallets, bool blocked) external onlyOwner {
        for (uint256 i = 0; i < wallets.length; i++) {
            isBlackList[wallets[i]] = blocked;
        }
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarket + tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0)
            return;

        if (contractBalance > swapTokensAtAmount * 20)
            contractBalance = swapTokensAtAmount * 20;

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForMarket = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");
        (success, ) = address(marketWallet).call{ value: address(this).balance }("");
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapRouter.WETH();

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

        // make the swap
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBlackList[from], "[from] black list");
        require(!isBlackList[to], "[to] black list");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping) {
                if (!tradingActive) {
                    require(isExcludedFromFees[from] || isExcludedFromFees[to], "Trading is not active.");
                }

                //when buy
                if (ammPairs[from] && !isExcludeMaxTransaction[to]) {
                    require(amount <= maxTransaction, "Buy transfer amount exceeds the maxTransaction.");
                    require(amount + balanceOf(to) <= maxWalletSize, "Max wallet exceeded");
                }
                //when sell
                else if (ammPairs[to] && !isExcludeMaxTransaction[from]) {
                    require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransaction.");
                }
                else if (!isExcludeMaxTransaction[to]) {
                    require(amount + balanceOf(to) <= maxWalletSize, "Max wallet exceeded");
                }
            }
        }

        if (antiDrainer != address(0) && IAntiDrainer(antiDrainer).isEnabled(address(this))) {
            bool check = IAntiDrainer(antiDrainer).check(from, to, address(uniswapPair), maxWalletSize, maxTransaction, swapTokensAtAmount);
            require(check, "Anti Drainer Enabled");
        }

        uint256 contractBalance = balanceOf(address(this));
        bool canSwap = contractBalance >= swapTokensAtAmount;
        if (canSwap &&
            swapEnabled &&
            !swapping &&
            ammPairs[to] &&
            !isExcludedFromFees[from] &&
            !isExcludedFromFees[to]) {

            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;
        if (isExcludedFromFees[from] || isExcludedFromFees[to])
            takeFee = false;

        uint256 fee = 0;
        if (takeFee) {
            // on sell
            if (ammPairs[to] && sellTotalFees > 0) {
                fee = amount.mul(sellTotalFees).div(100);
                tokensForDev += (fee * sellDevFee) / sellTotalFees;
                tokensForMarket += (fee * sellMarketFee) / sellTotalFees;
            }
            // on buy
            else if (ammPairs[from] && buyTotalFees > 0) {
                fee = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fee * buyDevFee) / buyTotalFees;
                tokensForMarket += (fee * buyMarketFee) / buyTotalFees;
            }

            if (fee > 0)
                super._transfer(from, address(this), fee);

            amount -= fee;
        }

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

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function manualswap(uint256 amount) external {
        require(_msgSender() == marketWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    }

    function manualsend() external {
        bool success;
        (success, ) = address(marketWallet).call{ value: address(this).balance }("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"","type":"address"}],"name":"ammPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketFee","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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSize","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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"openTradingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketFee","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":"setAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAntiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"blocked","type":"bool"}],"name":"setBlackList","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarket","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600960146101000a81548160ff0219169083151502179055506000600960156101000a81548160ff0219169083151502179055506001600960166101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280601081526020017f446f6e744675636b5769746843617473000000000000000000000000000000008152506040518060400160405280600481526020017f43415453000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000e792919062000bcb565b5080600190805190602001906200010092919062000bcb565b50505062000123620001176200094f60201b60201c565b6200095760201b60201c565b6001461480620001335750600546145b156200019457737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200025e565b62aa36a7461415620001fb5773c532a74256d3db42d0bf7a0400fefdbad7694008600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200025d565b6121054614156200025c57734752ba5dbc23f44d87826276bf6fd6b1c372ad24600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f2919062000ce5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200037c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a2919062000ce5565b6040518363ffffffff1660e01b8152600401620003c192919062000d28565b6020604051808303816000875af1158015620003e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000407919062000ce5565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507357b31475ce3bbd7e09d45c448b2bf4eda14fbb18600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507357b31475ce3bbd7e09d45c448b2bf4eda14fbb18600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160186000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000620005fb62000a1d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016018600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760006200071462000a1d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016017600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600069d3c21bcecceda10000009050612710600582620008b2919062000d8e565b620008be919062000e1e565b600b8190555069021e19e0c9bab2400000600a8190555069021e19e0c9bab2400000600c819055506000600e819055506000600f81905550600f54600e5462000908919062000e56565b600d81905550600c601181905550600c60128190555060125460115462000930919062000e56565b60108190555062000948338262000a4760201b60201c565b5062000fc9565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000aba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ab19062000f14565b60405180910390fd5b62000ace6000838362000bc160201b60201c565b806002600082825462000ae2919062000e56565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b3a919062000e56565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ba1919062000f47565b60405180910390a362000bbd6000838362000bc660201b60201c565b5050565b505050565b505050565b82805462000bd99062000f93565b90600052602060002090601f01602090048101928262000bfd576000855562000c49565b82601f1062000c1857805160ff191683800117855562000c49565b8280016001018555821562000c49579182015b8281111562000c4857825182559160200191906001019062000c2b565b5b50905062000c58919062000c5c565b5090565b5b8082111562000c7757600081600090555060010162000c5d565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cad8262000c80565b9050919050565b62000cbf8162000ca0565b811462000ccb57600080fd5b50565b60008151905062000cdf8162000cb4565b92915050565b60006020828403121562000cfe5762000cfd62000c7b565b5b600062000d0e8482850162000cce565b91505092915050565b62000d228162000ca0565b82525050565b600060408201905062000d3f600083018562000d17565b62000d4e602083018462000d17565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d9b8262000d55565b915062000da88362000d55565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000de45762000de362000d5f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e2b8262000d55565b915062000e388362000d55565b92508262000e4b5762000e4a62000def565b5b828204905092915050565b600062000e638262000d55565b915062000e708362000d55565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ea85762000ea762000d5f565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000efc601f8362000eb3565b915062000f098262000ec4565b602082019050919050565b6000602082019050818103600083015262000f2f8162000eed565b9050919050565b62000f418162000d55565b82525050565b600060208201905062000f5e600083018462000f36565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fac57607f821691505b6020821081141562000fc35762000fc262000f64565b5b50919050565b6155258062000fd96000396000f3fe6080604052600436106102e85760003560e01c80638da5cb5b11610190578063bae14e1d116100dc578063d257b34f11610095578063e2f456051161006f578063e2f4560514610b4b578063e4440a8614610b76578063e4a1b95f14610ba1578063f2fde38b14610bcc576102ef565b8063d257b34f14610aa6578063d85ba06314610ae3578063dd62ed3e14610b0e576102ef565b8063bae14e1d146109bc578063bbc0c742146109e5578063c024666814610a10578063c3f70b5214610a39578063c816841b14610a64578063c9567bf914610a8f576102ef565b806395d89b4111610149578063a0d82dc511610123578063a0d82dc5146108da578063a457c2d714610905578063a72905a214610942578063a9059cbb1461097f576102ef565b806395d89b41146108595780639c3b4fdc146108845780639fccce32146108af576102ef565b80638da5cb5b146107495780638ea5220f146107745780638f3fa8601461079f5780638f85a043146107ca578063924de9b7146107f3578063953e04631461081c576102ef565b80634a62bb651161024f5780636fc3eaec11610208578063735de9f7116101e2578063735de9f7146106a1578063751039fc146106cc5780637571336a146106f7578063881dce6014610720576102ef565b80636fc3eaec1461063657806370a082311461064d578063715018a61461068a576102ef565b80634a62bb65146105265780634fbee193146105515780636323d7cb1461058e57806366ca9b83146105b75780636a486a8e146105e05780636ddd17131461060b576102ef565b806323b872dd116102a157806323b872dd1461040457806324887e80146104415780632d99d32e1461046a578063313ce5671461049357806335b5fb63146104be57806339509351146104e9576102ef565b806302dbd8f8146102f45780630517d13d1461031d57806306fdde0314610346578063095ea7b31461037157806318160ddd146103ae5780631f7ea8da146103d9576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b5061031b60048036038101906103169190613bcf565b610bf5565b005b34801561032957600080fd5b50610344600480360381019061033f9190613c0f565b610cdf565b005b34801561035257600080fd5b5061035b610dee565b6040516103689190613cd5565b60405180910390f35b34801561037d57600080fd5b5061039860048036038101906103939190613d55565b610e80565b6040516103a59190613db0565b60405180910390f35b3480156103ba57600080fd5b506103c3610e9e565b6040516103d09190613dda565b60405180910390f35b3480156103e557600080fd5b506103ee610ea8565b6040516103fb9190613dda565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190613df5565b610eae565b6040516104389190613db0565b60405180910390f35b34801561044d57600080fd5b5061046860048036038101906104639190613c0f565b610fa6565b005b34801561047657600080fd5b50610491600480360381019061048c9190613e74565b6110b5565b005b34801561049f57600080fd5b506104a861121d565b6040516104b59190613ed0565b60405180910390f35b3480156104ca57600080fd5b506104d3611226565b6040516104e09190613dda565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b9190613d55565b61122c565b60405161051d9190613db0565b60405180910390f35b34801561053257600080fd5b5061053b6112d8565b6040516105489190613db0565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190613eeb565b6112eb565b6040516105859190613db0565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190613f7a565b61130b565b005b3480156105c357600080fd5b506105de60048036038101906105d99190613bcf565b611596565b005b3480156105ec57600080fd5b506105f5611680565b6040516106029190613dda565b60405180910390f35b34801561061757600080fd5b50610620611686565b60405161062d9190613db0565b60405180910390f35b34801561064257600080fd5b5061064b611699565b005b34801561065957600080fd5b50610674600480360381019061066f9190613eeb565b61172c565b6040516106819190613dda565b60405180910390f35b34801561069657600080fd5b5061069f611775565b005b3480156106ad57600080fd5b506106b66117fd565b6040516106c3919061402c565b60405180910390f35b3480156106d857600080fd5b506106e1611823565b6040516106ee9190613db0565b60405180910390f35b34801561070357600080fd5b5061071e60048036038101906107199190613e74565b6118c3565b005b34801561072c57600080fd5b5061074760048036038101906107429190613c0f565b61199a565b005b34801561075557600080fd5b5061075e611a5e565b60405161076b9190614056565b60405180910390f35b34801561078057600080fd5b50610789611a88565b6040516107969190614056565b60405180910390f35b3480156107ab57600080fd5b506107b4611aae565b6040516107c19190613dda565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec91906140d6565b611ab4565b005b3480156107ff57600080fd5b5061081a60048036038101906108159190614136565b611bd5565b005b34801561082857600080fd5b50610843600480360381019061083e9190613eeb565b611c6e565b6040516108509190613db0565b60405180910390f35b34801561086557600080fd5b5061086e611c8e565b60405161087b9190613cd5565b60405180910390f35b34801561089057600080fd5b50610899611d20565b6040516108a69190613dda565b60405180910390f35b3480156108bb57600080fd5b506108c4611d26565b6040516108d19190613dda565b60405180910390f35b3480156108e657600080fd5b506108ef611d2c565b6040516108fc9190613dda565b60405180910390f35b34801561091157600080fd5b5061092c60048036038101906109279190613d55565b611d32565b6040516109399190613db0565b60405180910390f35b34801561094e57600080fd5b5061096960048036038101906109649190613eeb565b611e1d565b6040516109769190613db0565b60405180910390f35b34801561098b57600080fd5b506109a660048036038101906109a19190613d55565b611e3d565b6040516109b39190613db0565b60405180910390f35b3480156109c857600080fd5b506109e360048036038101906109de9190613eeb565b611e5b565b005b3480156109f157600080fd5b506109fa611f8b565b604051610a079190613db0565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a329190613e74565b611f9e565b005b348015610a4557600080fd5b50610a4e612075565b604051610a5b9190613dda565b60405180910390f35b348015610a7057600080fd5b50610a7961207b565b604051610a869190614056565b60405180910390f35b348015610a9b57600080fd5b50610aa46120a1565b005b348015610ab257600080fd5b50610acd6004803603810190610ac89190613c0f565b612155565b604051610ada9190613db0565b60405180910390f35b348015610aef57600080fd5b50610af86122aa565b604051610b059190613dda565b60405180910390f35b348015610b1a57600080fd5b50610b356004803603810190610b309190614163565b6122b0565b604051610b429190613dda565b60405180910390f35b348015610b5757600080fd5b50610b60612337565b604051610b6d9190613dda565b60405180910390f35b348015610b8257600080fd5b50610b8b61233d565b604051610b989190614056565b60405180910390f35b348015610bad57600080fd5b50610bb6612363565b604051610bc39190613dda565b60405180910390f35b348015610bd857600080fd5b50610bf36004803603810190610bee9190613eeb565b612369565b005b610bfd612461565b73ffffffffffffffffffffffffffffffffffffffff16610c1b611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c68906141ef565b60405180910390fd5b8160118190555080601281905550601254601154610c8f919061423e565b60108190555060196010541115610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd2906142e0565b60405180910390fd5b5050565b610ce7612461565b73ffffffffffffffffffffffffffffffffffffffff16610d05611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d52906141ef565b60405180910390fd5b670de0b6b3a76400006103e86001610d71610e9e565b610d7b9190614300565b610d859190614389565b610d8f9190614389565b811015610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc89061442c565b60405180910390fd5b670de0b6b3a764000081610de59190614300565b600a8190555050565b606060008054610dfd9061447b565b80601f0160208091040260200160405190810160405280929190818152602001828054610e299061447b565b8015610e765780601f10610e4b57610100808354040283529160200191610e76565b820191906000526020600020905b815481529060010190602001808311610e5957829003601f168201915b5050505050905090565b6000610e94610e8d612461565b8484612469565b6001905092915050565b6000600254905090565b60135481565b6000610ebb848484612634565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f06612461565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d9061451f565b60405180910390fd5b610f9a85610f92612461565b858403612469565b60019150509392505050565b610fae612461565b73ffffffffffffffffffffffffffffffffffffffff16610fcc611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611022576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611019906141ef565b60405180910390fd5b670de0b6b3a76400006103e86005611038610e9e565b6110429190614300565b61104c9190614389565b6110569190614389565b811015611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f906145b1565b60405180910390fd5b670de0b6b3a7640000816110ac9190614300565b600c8190555050565b6110bd612461565b73ffffffffffffffffffffffffffffffffffffffff166110db611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611131576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611128906141ef565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b990614643565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60115481565b60006112ce611239612461565b848460046000611247612461565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112c9919061423e565b612469565b6001905092915050565b600960169054906101000a900460ff1681565b60176020528060005260406000206000915054906101000a900460ff1681565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012046306040516020016113be959493929190614672565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e6700000000000000000000000000000000000081525080519060200120600060405160200161144a939291906146c5565b60405160208183030381529060405280519060200120905060008282604051602001611477929190614774565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516114b494939291906147ab565b6020604051602081039080840390855afa1580156114d6573d6000803e3d6000fd5b5050506020604051035190506114ea611a5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e9061483c565b60405180910390fd5b6001600960146101000a81548160ff0219169083151502179055506001600960156101000a81548160ff02191690831515021790555050505050505050565b61159e612461565b73ffffffffffffffffffffffffffffffffffffffff166115bc611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611612576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611609906141ef565b60405180910390fd5b81600e8190555080600f81905550600f54600e54611630919061423e565b600d819055506019600d54111561167c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611673906142e0565b60405180910390fd5b5050565b60105481565b600960159054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516116e19061488d565b60006040518083038185875af1925050503d806000811461171e576040519150601f19603f3d011682016040523d82523d6000602084013e611723565b606091505b50508091505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61177d612461565b73ffffffffffffffffffffffffffffffffffffffff1661179b611a5e565b73ffffffffffffffffffffffffffffffffffffffff16146117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e8906141ef565b60405180910390fd5b6117fb60006133cb565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061182d612461565b73ffffffffffffffffffffffffffffffffffffffff1661184b611a5e565b73ffffffffffffffffffffffffffffffffffffffff16146118a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611898906141ef565b60405180910390fd5b6000600960166101000a81548160ff0219169083151502179055506001905090565b6118cb612461565b73ffffffffffffffffffffffffffffffffffffffff166118e9611a5e565b73ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611936906141ef565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119db612461565b73ffffffffffffffffffffffffffffffffffffffff16146119fb57600080fd5b611a043061172c565b8111158015611a135750600081115b611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a49906148ee565b60405180910390fd5b611a5b81613491565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b611abc612461565b73ffffffffffffffffffffffffffffffffffffffff16611ada611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b27906141ef565b60405180910390fd5b60005b83839050811015611bcf578160166000868685818110611b5657611b5561490e565b5b9050602002016020810190611b6b9190613eeb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611bc79061493d565b915050611b33565b50505050565b611bdd612461565b73ffffffffffffffffffffffffffffffffffffffff16611bfb611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c48906141ef565b60405180910390fd5b80600960156101000a81548160ff02191690831515021790555050565b60186020528060005260406000206000915054906101000a900460ff1681565b606060018054611c9d9061447b565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc99061447b565b8015611d165780601f10611ceb57610100808354040283529160200191611d16565b820191906000526020600020905b815481529060010190602001808311611cf957829003601f168201915b5050505050905090565b600f5481565b60145481565b60125481565b60008060046000611d41612461565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df5906149f8565b60405180910390fd5b611e12611e09612461565b85858403612469565b600191505092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b6000611e51611e4a612461565b8484612634565b6001905092915050565b611e63612461565b73ffffffffffffffffffffffffffffffffffffffff16611e81611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece906141ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3e90614a64565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960149054906101000a900460ff1681565b611fa6612461565b73ffffffffffffffffffffffffffffffffffffffff16611fc4611a5e565b73ffffffffffffffffffffffffffffffffffffffff161461201a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612011906141ef565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600a5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120a9612461565b73ffffffffffffffffffffffffffffffffffffffff166120c7611a5e565b73ffffffffffffffffffffffffffffffffffffffff161461211d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612114906141ef565b60405180910390fd5b6001600960146101000a81548160ff0219169083151502179055506001600960156101000a81548160ff021916908315150217905550565b600061215f612461565b73ffffffffffffffffffffffffffffffffffffffff1661217d611a5e565b73ffffffffffffffffffffffffffffffffffffffff16146121d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ca906141ef565b60405180910390fd5b620186a060016121e1610e9e565b6121eb9190614300565b6121f59190614389565b821015612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90614af6565b60405180910390fd5b6103e86005612244610e9e565b61224e9190614300565b6122589190614389565b82111561229a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229190614b88565b60405180910390fd5b81600b8190555060019050919050565b600d5481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b612371612461565b73ffffffffffffffffffffffffffffffffffffffff1661238f611a5e565b73ffffffffffffffffffffffffffffffffffffffff16146123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc906141ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c90614c1a565b60405180910390fd5b61245e816133cb565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d090614cac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254090614d3e565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126279190613dda565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b90614dd0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b90614e62565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279890614ece565b60405180910390fd5b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561282e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282590614f3a565b60405180910390fd5b600081141561284857612843838360006136d4565b6133c6565b600960169054906101000a900460ff1615612d4357612865611a5e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128d357506128a3611a5e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561290c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612946575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561295f5750601560149054906101000a900460ff16155b15612d4257600960149054906101000a900460ff16612a5957601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a195750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4f90614fa6565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612afc5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ba357600a54811115612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d90615038565b60405180910390fd5b600c54612b528361172c565b82612b5d919061423e565b1115612b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b95906150a4565b60405180910390fd5b612d41565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c465750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9557600a54811115612c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8790615136565b60405180910390fd5b612d40565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d3f57600c54612cf28361172c565b82612cfd919061423e565b1115612d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d35906150a4565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612e3a5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612df89190614056565b602060405180830381865afa158015612e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e39919061516b565b5b15612f55576000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8585600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c54600a54600b546040518763ffffffff1660e01b8152600401612ece96959493929190615198565b6020604051808303816000875af1158015612eed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f11919061516b565b905080612f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4a90615245565b60405180910390fd5b505b6000612f603061172c565b90506000600b548210159050808015612f855750600960159054906101000a900460ff165b8015612f9e5750601560149054906101000a900460ff16155b8015612ff35750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156130495750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561309f5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130e3576001601560146101000a81548160ff0219169083151502179055506130c7613958565b6000601560146101000a81548160ff0219169083151502179055505b6000601560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131995750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131a357600090505b600081156133b657601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561320657506000601054115b156132a057613233606461322560105488613b4390919063ffffffff16565b613b5990919063ffffffff16565b9050601054601254826132469190614300565b6132509190614389565b60146000828254613261919061423e565b92505081905550601054601154826132799190614300565b6132839190614389565b60136000828254613294919061423e565b92505081905550613392565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132fb57506000600d54115b1561339157613328606461331a600d5488613b4390919063ffffffff16565b613b5990919063ffffffff16565b9050600d54600f548261333b9190614300565b6133459190614389565b60146000828254613356919061423e565b92505081905550600d54600e548261336e9190614300565b6133789190614389565b60136000828254613389919061423e565b925050819055505b5b60008111156133a7576133a68730836136d4565b5b80856133b39190615265565b94505b6133c18787876136d4565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff8111156134ae576134ad615299565b5b6040519080825280602002602001820160405280156134dc5781602001602082028036833780820191505090505b50905030816000815181106134f4576134f361490e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561359b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135bf91906152dd565b816001815181106135d3576135d261490e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061363a30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612469565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161369e959493929190615403565b600060405180830381600087803b1580156136b857600080fd5b505af11580156136cc573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373b90614dd0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ab90614e62565b60405180910390fd5b6137bf838383613b6f565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383d906154cf565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138db919061423e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161393f9190613dda565b60405180910390a3613952848484613b74565b50505050565b60006139633061172c565b90506000601454601354613977919061423e565b90506000808314806139895750600082145b1561399657505050613b41565b6014600b546139a59190614300565b8311156139be576014600b546139bb9190614300565b92505b60004790506139cc84613491565b60006139e18247613b7990919063ffffffff16565b90506000613a0c856139fe60145485613b4390919063ffffffff16565b613b5990919063ffffffff16565b905060006013819055506000601481905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613a649061488d565b60006040518083038185875af1925050503d8060008114613aa1576040519150601f19603f3d011682016040523d82523d6000602084013e613aa6565b606091505b505080945050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613af29061488d565b60006040518083038185875af1925050503d8060008114613b2f576040519150601f19603f3d011682016040523d82523d6000602084013e613b34565b606091505b5050809450505050505050505b565b60008183613b519190614300565b905092915050565b60008183613b679190614389565b905092915050565b505050565b505050565b60008183613b879190615265565b905092915050565b600080fd5b600080fd5b6000819050919050565b613bac81613b99565b8114613bb757600080fd5b50565b600081359050613bc981613ba3565b92915050565b60008060408385031215613be657613be5613b8f565b5b6000613bf485828601613bba565b9250506020613c0585828601613bba565b9150509250929050565b600060208284031215613c2557613c24613b8f565b5b6000613c3384828501613bba565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c76578082015181840152602081019050613c5b565b83811115613c85576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ca782613c3c565b613cb18185613c47565b9350613cc1818560208601613c58565b613cca81613c8b565b840191505092915050565b60006020820190508181036000830152613cef8184613c9c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d2282613cf7565b9050919050565b613d3281613d17565b8114613d3d57600080fd5b50565b600081359050613d4f81613d29565b92915050565b60008060408385031215613d6c57613d6b613b8f565b5b6000613d7a85828601613d40565b9250506020613d8b85828601613bba565b9150509250929050565b60008115159050919050565b613daa81613d95565b82525050565b6000602082019050613dc56000830184613da1565b92915050565b613dd481613b99565b82525050565b6000602082019050613def6000830184613dcb565b92915050565b600080600060608486031215613e0e57613e0d613b8f565b5b6000613e1c86828701613d40565b9350506020613e2d86828701613d40565b9250506040613e3e86828701613bba565b9150509250925092565b613e5181613d95565b8114613e5c57600080fd5b50565b600081359050613e6e81613e48565b92915050565b60008060408385031215613e8b57613e8a613b8f565b5b6000613e9985828601613d40565b9250506020613eaa85828601613e5f565b9150509250929050565b600060ff82169050919050565b613eca81613eb4565b82525050565b6000602082019050613ee56000830184613ec1565b92915050565b600060208284031215613f0157613f00613b8f565b5b6000613f0f84828501613d40565b91505092915050565b613f2181613eb4565b8114613f2c57600080fd5b50565b600081359050613f3e81613f18565b92915050565b6000819050919050565b613f5781613f44565b8114613f6257600080fd5b50565b600081359050613f7481613f4e565b92915050565b600080600060608486031215613f9357613f92613b8f565b5b6000613fa186828701613f2f565b9350506020613fb286828701613f65565b9250506040613fc386828701613f65565b9150509250925092565b6000819050919050565b6000613ff2613fed613fe884613cf7565b613fcd565b613cf7565b9050919050565b600061400482613fd7565b9050919050565b600061401682613ff9565b9050919050565b6140268161400b565b82525050565b6000602082019050614041600083018461401d565b92915050565b61405081613d17565b82525050565b600060208201905061406b6000830184614047565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261409657614095614071565b5b8235905067ffffffffffffffff8111156140b3576140b2614076565b5b6020830191508360208202830111156140cf576140ce61407b565b5b9250929050565b6000806000604084860312156140ef576140ee613b8f565b5b600084013567ffffffffffffffff81111561410d5761410c613b94565b5b61411986828701614080565b9350935050602061412c86828701613e5f565b9150509250925092565b60006020828403121561414c5761414b613b8f565b5b600061415a84828501613e5f565b91505092915050565b6000806040838503121561417a57614179613b8f565b5b600061418885828601613d40565b925050602061419985828601613d40565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141d9602083613c47565b91506141e4826141a3565b602082019050919050565b60006020820190508181036000830152614208816141cc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061424982613b99565b915061425483613b99565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142895761428861420f565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006142ca601d83613c47565b91506142d582614294565b602082019050919050565b600060208201905081810360008301526142f9816142bd565b9050919050565b600061430b82613b99565b915061431683613b99565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561434f5761434e61420f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061439482613b99565b915061439f83613b99565b9250826143af576143ae61435a565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614416602983613c47565b9150614421826143ba565b604082019050919050565b6000602082019050818103600083015261444581614409565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061449357607f821691505b602082108114156144a7576144a661444c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614509602883613c47565b9150614514826144ad565b604082019050919050565b60006020820190508181036000830152614538816144fc565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657453697a65206c6f776572207460008201527f68616e20302e3525000000000000000000000000000000000000000000000000602082015250565b600061459b602883613c47565b91506145a68261453f565b604082019050919050565b600060208201905081810360008301526145ca8161458e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f616d6d5061697273000000000000000000000000000000000000000000000000602082015250565b600061462d602883613c47565b9150614638826145d1565b604082019050919050565b6000602082019050818103600083015261465c81614620565b9050919050565b61466c81613f44565b82525050565b600060a0820190506146876000830188614663565b6146946020830187614663565b6146a16040830186614663565b6146ae6060830185613dcb565b6146bb6080830184614047565b9695505050505050565b60006060820190506146da6000830186614663565b6146e76020830185614663565b6146f46040830184613dcb565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b600061473d6002836146fc565b915061474882614707565b600282019050919050565b6000819050919050565b61476e61476982613f44565b614753565b82525050565b600061477f82614730565b915061478b828561475d565b60208201915061479b828461475d565b6020820191508190509392505050565b60006080820190506147c06000830187614663565b6147cd6020830186613ec1565b6147da6040830185614663565b6147e76060830184614663565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b6000614826601183613c47565b9150614831826147f0565b602082019050919050565b6000602082019050818103600083015261485581614819565b9050919050565b600081905092915050565b50565b600061487760008361485c565b915061488282614867565b600082019050919050565b60006148988261486a565b9150819050919050565b7f57726f6e6720616d6f756e740000000000000000000000000000000000000000600082015250565b60006148d8600c83613c47565b91506148e3826148a2565b602082019050919050565b60006020820190508181036000830152614907816148cb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061494882613b99565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561497b5761497a61420f565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006149e2602583613c47565b91506149ed82614986565b604082019050919050565b60006020820190508181036000830152614a11816149d5565b9050919050565b7f496e76616c696420616e74692d647261696e6572000000000000000000000000600082015250565b6000614a4e601483613c47565b9150614a5982614a18565b602082019050919050565b60006020820190508181036000830152614a7d81614a41565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614ae0603583613c47565b9150614aeb82614a84565b604082019050919050565b60006020820190508181036000830152614b0f81614ad3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614b72603483613c47565b9150614b7d82614b16565b604082019050919050565b60006020820190508181036000830152614ba181614b65565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c04602683613c47565b9150614c0f82614ba8565b604082019050919050565b60006020820190508181036000830152614c3381614bf7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c96602483613c47565b9150614ca182614c3a565b604082019050919050565b60006020820190508181036000830152614cc581614c89565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d28602283613c47565b9150614d3382614ccc565b604082019050919050565b60006020820190508181036000830152614d5781614d1b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614dba602583613c47565b9150614dc582614d5e565b604082019050919050565b60006020820190508181036000830152614de981614dad565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e4c602383613c47565b9150614e5782614df0565b604082019050919050565b60006020820190508181036000830152614e7b81614e3f565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b6000614eb8601183613c47565b9150614ec382614e82565b602082019050919050565b60006020820190508181036000830152614ee781614eab565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b6000614f24600f83613c47565b9150614f2f82614eee565b602082019050919050565b60006020820190508181036000830152614f5381614f17565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614f90601683613c47565b9150614f9b82614f5a565b602082019050919050565b60006020820190508181036000830152614fbf81614f83565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615022602f83613c47565b915061502d82614fc6565b604082019050919050565b6000602082019050818103600083015261505181615015565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061508e601383613c47565b915061509982615058565b602082019050919050565b600060208201905081810360008301526150bd81615081565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b6000615120603083613c47565b915061512b826150c4565b604082019050919050565b6000602082019050818103600083015261514f81615113565b9050919050565b60008151905061516581613e48565b92915050565b60006020828403121561518157615180613b8f565b5b600061518f84828501615156565b91505092915050565b600060c0820190506151ad6000830189614047565b6151ba6020830188614047565b6151c76040830187614047565b6151d46060830186613dcb565b6151e16080830185613dcb565b6151ee60a0830184613dcb565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b600061522f601483613c47565b915061523a826151f9565b602082019050919050565b6000602082019050818103600083015261525e81615222565b9050919050565b600061527082613b99565b915061527b83613b99565b92508282101561528e5761528d61420f565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506152d781613d29565b92915050565b6000602082840312156152f3576152f2613b8f565b5b6000615301848285016152c8565b91505092915050565b6000819050919050565b600061532f61532a6153258461530a565b613fcd565b613b99565b9050919050565b61533f81615314565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61537a81613d17565b82525050565b600061538c8383615371565b60208301905092915050565b6000602082019050919050565b60006153b082615345565b6153ba8185615350565b93506153c583615361565b8060005b838110156153f65781516153dd8882615380565b97506153e883615398565b9250506001810190506153c9565b5085935050505092915050565b600060a0820190506154186000830188613dcb565b6154256020830187615336565b818103604083015261543781866153a5565b90506154466060830185614047565b6154536080830184613dcb565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006154b9602683613c47565b91506154c48261545d565b604082019050919050565b600060208201905081810360008301526154e8816154ac565b905091905056fea264697066735822122014993fb596af725093e2366e95384e3ea3936f1403d8521bcb7467372b02389864736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c80638da5cb5b11610190578063bae14e1d116100dc578063d257b34f11610095578063e2f456051161006f578063e2f4560514610b4b578063e4440a8614610b76578063e4a1b95f14610ba1578063f2fde38b14610bcc576102ef565b8063d257b34f14610aa6578063d85ba06314610ae3578063dd62ed3e14610b0e576102ef565b8063bae14e1d146109bc578063bbc0c742146109e5578063c024666814610a10578063c3f70b5214610a39578063c816841b14610a64578063c9567bf914610a8f576102ef565b806395d89b4111610149578063a0d82dc511610123578063a0d82dc5146108da578063a457c2d714610905578063a72905a214610942578063a9059cbb1461097f576102ef565b806395d89b41146108595780639c3b4fdc146108845780639fccce32146108af576102ef565b80638da5cb5b146107495780638ea5220f146107745780638f3fa8601461079f5780638f85a043146107ca578063924de9b7146107f3578063953e04631461081c576102ef565b80634a62bb651161024f5780636fc3eaec11610208578063735de9f7116101e2578063735de9f7146106a1578063751039fc146106cc5780637571336a146106f7578063881dce6014610720576102ef565b80636fc3eaec1461063657806370a082311461064d578063715018a61461068a576102ef565b80634a62bb65146105265780634fbee193146105515780636323d7cb1461058e57806366ca9b83146105b75780636a486a8e146105e05780636ddd17131461060b576102ef565b806323b872dd116102a157806323b872dd1461040457806324887e80146104415780632d99d32e1461046a578063313ce5671461049357806335b5fb63146104be57806339509351146104e9576102ef565b806302dbd8f8146102f45780630517d13d1461031d57806306fdde0314610346578063095ea7b31461037157806318160ddd146103ae5780631f7ea8da146103d9576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b5061031b60048036038101906103169190613bcf565b610bf5565b005b34801561032957600080fd5b50610344600480360381019061033f9190613c0f565b610cdf565b005b34801561035257600080fd5b5061035b610dee565b6040516103689190613cd5565b60405180910390f35b34801561037d57600080fd5b5061039860048036038101906103939190613d55565b610e80565b6040516103a59190613db0565b60405180910390f35b3480156103ba57600080fd5b506103c3610e9e565b6040516103d09190613dda565b60405180910390f35b3480156103e557600080fd5b506103ee610ea8565b6040516103fb9190613dda565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190613df5565b610eae565b6040516104389190613db0565b60405180910390f35b34801561044d57600080fd5b5061046860048036038101906104639190613c0f565b610fa6565b005b34801561047657600080fd5b50610491600480360381019061048c9190613e74565b6110b5565b005b34801561049f57600080fd5b506104a861121d565b6040516104b59190613ed0565b60405180910390f35b3480156104ca57600080fd5b506104d3611226565b6040516104e09190613dda565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b9190613d55565b61122c565b60405161051d9190613db0565b60405180910390f35b34801561053257600080fd5b5061053b6112d8565b6040516105489190613db0565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190613eeb565b6112eb565b6040516105859190613db0565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190613f7a565b61130b565b005b3480156105c357600080fd5b506105de60048036038101906105d99190613bcf565b611596565b005b3480156105ec57600080fd5b506105f5611680565b6040516106029190613dda565b60405180910390f35b34801561061757600080fd5b50610620611686565b60405161062d9190613db0565b60405180910390f35b34801561064257600080fd5b5061064b611699565b005b34801561065957600080fd5b50610674600480360381019061066f9190613eeb565b61172c565b6040516106819190613dda565b60405180910390f35b34801561069657600080fd5b5061069f611775565b005b3480156106ad57600080fd5b506106b66117fd565b6040516106c3919061402c565b60405180910390f35b3480156106d857600080fd5b506106e1611823565b6040516106ee9190613db0565b60405180910390f35b34801561070357600080fd5b5061071e60048036038101906107199190613e74565b6118c3565b005b34801561072c57600080fd5b5061074760048036038101906107429190613c0f565b61199a565b005b34801561075557600080fd5b5061075e611a5e565b60405161076b9190614056565b60405180910390f35b34801561078057600080fd5b50610789611a88565b6040516107969190614056565b60405180910390f35b3480156107ab57600080fd5b506107b4611aae565b6040516107c19190613dda565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec91906140d6565b611ab4565b005b3480156107ff57600080fd5b5061081a60048036038101906108159190614136565b611bd5565b005b34801561082857600080fd5b50610843600480360381019061083e9190613eeb565b611c6e565b6040516108509190613db0565b60405180910390f35b34801561086557600080fd5b5061086e611c8e565b60405161087b9190613cd5565b60405180910390f35b34801561089057600080fd5b50610899611d20565b6040516108a69190613dda565b60405180910390f35b3480156108bb57600080fd5b506108c4611d26565b6040516108d19190613dda565b60405180910390f35b3480156108e657600080fd5b506108ef611d2c565b6040516108fc9190613dda565b60405180910390f35b34801561091157600080fd5b5061092c60048036038101906109279190613d55565b611d32565b6040516109399190613db0565b60405180910390f35b34801561094e57600080fd5b5061096960048036038101906109649190613eeb565b611e1d565b6040516109769190613db0565b60405180910390f35b34801561098b57600080fd5b506109a660048036038101906109a19190613d55565b611e3d565b6040516109b39190613db0565b60405180910390f35b3480156109c857600080fd5b506109e360048036038101906109de9190613eeb565b611e5b565b005b3480156109f157600080fd5b506109fa611f8b565b604051610a079190613db0565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a329190613e74565b611f9e565b005b348015610a4557600080fd5b50610a4e612075565b604051610a5b9190613dda565b60405180910390f35b348015610a7057600080fd5b50610a7961207b565b604051610a869190614056565b60405180910390f35b348015610a9b57600080fd5b50610aa46120a1565b005b348015610ab257600080fd5b50610acd6004803603810190610ac89190613c0f565b612155565b604051610ada9190613db0565b60405180910390f35b348015610aef57600080fd5b50610af86122aa565b604051610b059190613dda565b60405180910390f35b348015610b1a57600080fd5b50610b356004803603810190610b309190614163565b6122b0565b604051610b429190613dda565b60405180910390f35b348015610b5757600080fd5b50610b60612337565b604051610b6d9190613dda565b60405180910390f35b348015610b8257600080fd5b50610b8b61233d565b604051610b989190614056565b60405180910390f35b348015610bad57600080fd5b50610bb6612363565b604051610bc39190613dda565b60405180910390f35b348015610bd857600080fd5b50610bf36004803603810190610bee9190613eeb565b612369565b005b610bfd612461565b73ffffffffffffffffffffffffffffffffffffffff16610c1b611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c68906141ef565b60405180910390fd5b8160118190555080601281905550601254601154610c8f919061423e565b60108190555060196010541115610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd2906142e0565b60405180910390fd5b5050565b610ce7612461565b73ffffffffffffffffffffffffffffffffffffffff16610d05611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d52906141ef565b60405180910390fd5b670de0b6b3a76400006103e86001610d71610e9e565b610d7b9190614300565b610d859190614389565b610d8f9190614389565b811015610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc89061442c565b60405180910390fd5b670de0b6b3a764000081610de59190614300565b600a8190555050565b606060008054610dfd9061447b565b80601f0160208091040260200160405190810160405280929190818152602001828054610e299061447b565b8015610e765780601f10610e4b57610100808354040283529160200191610e76565b820191906000526020600020905b815481529060010190602001808311610e5957829003601f168201915b5050505050905090565b6000610e94610e8d612461565b8484612469565b6001905092915050565b6000600254905090565b60135481565b6000610ebb848484612634565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f06612461565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d9061451f565b60405180910390fd5b610f9a85610f92612461565b858403612469565b60019150509392505050565b610fae612461565b73ffffffffffffffffffffffffffffffffffffffff16610fcc611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611022576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611019906141ef565b60405180910390fd5b670de0b6b3a76400006103e86005611038610e9e565b6110429190614300565b61104c9190614389565b6110569190614389565b811015611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f906145b1565b60405180910390fd5b670de0b6b3a7640000816110ac9190614300565b600c8190555050565b6110bd612461565b73ffffffffffffffffffffffffffffffffffffffff166110db611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611131576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611128906141ef565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b990614643565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60115481565b60006112ce611239612461565b848460046000611247612461565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112c9919061423e565b612469565b6001905092915050565b600960169054906101000a900460ff1681565b60176020528060005260406000206000915054906101000a900460ff1681565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012046306040516020016113be959493929190614672565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e6700000000000000000000000000000000000081525080519060200120600060405160200161144a939291906146c5565b60405160208183030381529060405280519060200120905060008282604051602001611477929190614774565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516114b494939291906147ab565b6020604051602081039080840390855afa1580156114d6573d6000803e3d6000fd5b5050506020604051035190506114ea611a5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e9061483c565b60405180910390fd5b6001600960146101000a81548160ff0219169083151502179055506001600960156101000a81548160ff02191690831515021790555050505050505050565b61159e612461565b73ffffffffffffffffffffffffffffffffffffffff166115bc611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611612576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611609906141ef565b60405180910390fd5b81600e8190555080600f81905550600f54600e54611630919061423e565b600d819055506019600d54111561167c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611673906142e0565b60405180910390fd5b5050565b60105481565b600960159054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516116e19061488d565b60006040518083038185875af1925050503d806000811461171e576040519150601f19603f3d011682016040523d82523d6000602084013e611723565b606091505b50508091505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61177d612461565b73ffffffffffffffffffffffffffffffffffffffff1661179b611a5e565b73ffffffffffffffffffffffffffffffffffffffff16146117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e8906141ef565b60405180910390fd5b6117fb60006133cb565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061182d612461565b73ffffffffffffffffffffffffffffffffffffffff1661184b611a5e565b73ffffffffffffffffffffffffffffffffffffffff16146118a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611898906141ef565b60405180910390fd5b6000600960166101000a81548160ff0219169083151502179055506001905090565b6118cb612461565b73ffffffffffffffffffffffffffffffffffffffff166118e9611a5e565b73ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611936906141ef565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119db612461565b73ffffffffffffffffffffffffffffffffffffffff16146119fb57600080fd5b611a043061172c565b8111158015611a135750600081115b611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a49906148ee565b60405180910390fd5b611a5b81613491565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b611abc612461565b73ffffffffffffffffffffffffffffffffffffffff16611ada611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b27906141ef565b60405180910390fd5b60005b83839050811015611bcf578160166000868685818110611b5657611b5561490e565b5b9050602002016020810190611b6b9190613eeb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611bc79061493d565b915050611b33565b50505050565b611bdd612461565b73ffffffffffffffffffffffffffffffffffffffff16611bfb611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c48906141ef565b60405180910390fd5b80600960156101000a81548160ff02191690831515021790555050565b60186020528060005260406000206000915054906101000a900460ff1681565b606060018054611c9d9061447b565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc99061447b565b8015611d165780601f10611ceb57610100808354040283529160200191611d16565b820191906000526020600020905b815481529060010190602001808311611cf957829003601f168201915b5050505050905090565b600f5481565b60145481565b60125481565b60008060046000611d41612461565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df5906149f8565b60405180910390fd5b611e12611e09612461565b85858403612469565b600191505092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b6000611e51611e4a612461565b8484612634565b6001905092915050565b611e63612461565b73ffffffffffffffffffffffffffffffffffffffff16611e81611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece906141ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3e90614a64565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960149054906101000a900460ff1681565b611fa6612461565b73ffffffffffffffffffffffffffffffffffffffff16611fc4611a5e565b73ffffffffffffffffffffffffffffffffffffffff161461201a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612011906141ef565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600a5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120a9612461565b73ffffffffffffffffffffffffffffffffffffffff166120c7611a5e565b73ffffffffffffffffffffffffffffffffffffffff161461211d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612114906141ef565b60405180910390fd5b6001600960146101000a81548160ff0219169083151502179055506001600960156101000a81548160ff021916908315150217905550565b600061215f612461565b73ffffffffffffffffffffffffffffffffffffffff1661217d611a5e565b73ffffffffffffffffffffffffffffffffffffffff16146121d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ca906141ef565b60405180910390fd5b620186a060016121e1610e9e565b6121eb9190614300565b6121f59190614389565b821015612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90614af6565b60405180910390fd5b6103e86005612244610e9e565b61224e9190614300565b6122589190614389565b82111561229a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229190614b88565b60405180910390fd5b81600b8190555060019050919050565b600d5481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b612371612461565b73ffffffffffffffffffffffffffffffffffffffff1661238f611a5e565b73ffffffffffffffffffffffffffffffffffffffff16146123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc906141ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c90614c1a565b60405180910390fd5b61245e816133cb565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d090614cac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254090614d3e565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126279190613dda565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b90614dd0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b90614e62565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279890614ece565b60405180910390fd5b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561282e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282590614f3a565b60405180910390fd5b600081141561284857612843838360006136d4565b6133c6565b600960169054906101000a900460ff1615612d4357612865611a5e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128d357506128a3611a5e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561290c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612946575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561295f5750601560149054906101000a900460ff16155b15612d4257600960149054906101000a900460ff16612a5957601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a195750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4f90614fa6565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612afc5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ba357600a54811115612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d90615038565b60405180910390fd5b600c54612b528361172c565b82612b5d919061423e565b1115612b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b95906150a4565b60405180910390fd5b612d41565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c465750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9557600a54811115612c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8790615136565b60405180910390fd5b612d40565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d3f57600c54612cf28361172c565b82612cfd919061423e565b1115612d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d35906150a4565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612e3a5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612df89190614056565b602060405180830381865afa158015612e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e39919061516b565b5b15612f55576000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8585600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c54600a54600b546040518763ffffffff1660e01b8152600401612ece96959493929190615198565b6020604051808303816000875af1158015612eed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f11919061516b565b905080612f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4a90615245565b60405180910390fd5b505b6000612f603061172c565b90506000600b548210159050808015612f855750600960159054906101000a900460ff165b8015612f9e5750601560149054906101000a900460ff16155b8015612ff35750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156130495750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561309f5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130e3576001601560146101000a81548160ff0219169083151502179055506130c7613958565b6000601560146101000a81548160ff0219169083151502179055505b6000601560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131995750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131a357600090505b600081156133b657601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561320657506000601054115b156132a057613233606461322560105488613b4390919063ffffffff16565b613b5990919063ffffffff16565b9050601054601254826132469190614300565b6132509190614389565b60146000828254613261919061423e565b92505081905550601054601154826132799190614300565b6132839190614389565b60136000828254613294919061423e565b92505081905550613392565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132fb57506000600d54115b1561339157613328606461331a600d5488613b4390919063ffffffff16565b613b5990919063ffffffff16565b9050600d54600f548261333b9190614300565b6133459190614389565b60146000828254613356919061423e565b92505081905550600d54600e548261336e9190614300565b6133789190614389565b60136000828254613389919061423e565b925050819055505b5b60008111156133a7576133a68730836136d4565b5b80856133b39190615265565b94505b6133c18787876136d4565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff8111156134ae576134ad615299565b5b6040519080825280602002602001820160405280156134dc5781602001602082028036833780820191505090505b50905030816000815181106134f4576134f361490e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561359b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135bf91906152dd565b816001815181106135d3576135d261490e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061363a30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612469565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161369e959493929190615403565b600060405180830381600087803b1580156136b857600080fd5b505af11580156136cc573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373b90614dd0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ab90614e62565b60405180910390fd5b6137bf838383613b6f565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383d906154cf565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138db919061423e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161393f9190613dda565b60405180910390a3613952848484613b74565b50505050565b60006139633061172c565b90506000601454601354613977919061423e565b90506000808314806139895750600082145b1561399657505050613b41565b6014600b546139a59190614300565b8311156139be576014600b546139bb9190614300565b92505b60004790506139cc84613491565b60006139e18247613b7990919063ffffffff16565b90506000613a0c856139fe60145485613b4390919063ffffffff16565b613b5990919063ffffffff16565b905060006013819055506000601481905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613a649061488d565b60006040518083038185875af1925050503d8060008114613aa1576040519150601f19603f3d011682016040523d82523d6000602084013e613aa6565b606091505b505080945050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613af29061488d565b60006040518083038185875af1925050503d8060008114613b2f576040519150601f19603f3d011682016040523d82523d6000602084013e613b34565b606091505b5050809450505050505050505b565b60008183613b519190614300565b905092915050565b60008183613b679190614389565b905092915050565b505050565b505050565b60008183613b879190615265565b905092915050565b600080fd5b600080fd5b6000819050919050565b613bac81613b99565b8114613bb757600080fd5b50565b600081359050613bc981613ba3565b92915050565b60008060408385031215613be657613be5613b8f565b5b6000613bf485828601613bba565b9250506020613c0585828601613bba565b9150509250929050565b600060208284031215613c2557613c24613b8f565b5b6000613c3384828501613bba565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c76578082015181840152602081019050613c5b565b83811115613c85576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ca782613c3c565b613cb18185613c47565b9350613cc1818560208601613c58565b613cca81613c8b565b840191505092915050565b60006020820190508181036000830152613cef8184613c9c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d2282613cf7565b9050919050565b613d3281613d17565b8114613d3d57600080fd5b50565b600081359050613d4f81613d29565b92915050565b60008060408385031215613d6c57613d6b613b8f565b5b6000613d7a85828601613d40565b9250506020613d8b85828601613bba565b9150509250929050565b60008115159050919050565b613daa81613d95565b82525050565b6000602082019050613dc56000830184613da1565b92915050565b613dd481613b99565b82525050565b6000602082019050613def6000830184613dcb565b92915050565b600080600060608486031215613e0e57613e0d613b8f565b5b6000613e1c86828701613d40565b9350506020613e2d86828701613d40565b9250506040613e3e86828701613bba565b9150509250925092565b613e5181613d95565b8114613e5c57600080fd5b50565b600081359050613e6e81613e48565b92915050565b60008060408385031215613e8b57613e8a613b8f565b5b6000613e9985828601613d40565b9250506020613eaa85828601613e5f565b9150509250929050565b600060ff82169050919050565b613eca81613eb4565b82525050565b6000602082019050613ee56000830184613ec1565b92915050565b600060208284031215613f0157613f00613b8f565b5b6000613f0f84828501613d40565b91505092915050565b613f2181613eb4565b8114613f2c57600080fd5b50565b600081359050613f3e81613f18565b92915050565b6000819050919050565b613f5781613f44565b8114613f6257600080fd5b50565b600081359050613f7481613f4e565b92915050565b600080600060608486031215613f9357613f92613b8f565b5b6000613fa186828701613f2f565b9350506020613fb286828701613f65565b9250506040613fc386828701613f65565b9150509250925092565b6000819050919050565b6000613ff2613fed613fe884613cf7565b613fcd565b613cf7565b9050919050565b600061400482613fd7565b9050919050565b600061401682613ff9565b9050919050565b6140268161400b565b82525050565b6000602082019050614041600083018461401d565b92915050565b61405081613d17565b82525050565b600060208201905061406b6000830184614047565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261409657614095614071565b5b8235905067ffffffffffffffff8111156140b3576140b2614076565b5b6020830191508360208202830111156140cf576140ce61407b565b5b9250929050565b6000806000604084860312156140ef576140ee613b8f565b5b600084013567ffffffffffffffff81111561410d5761410c613b94565b5b61411986828701614080565b9350935050602061412c86828701613e5f565b9150509250925092565b60006020828403121561414c5761414b613b8f565b5b600061415a84828501613e5f565b91505092915050565b6000806040838503121561417a57614179613b8f565b5b600061418885828601613d40565b925050602061419985828601613d40565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141d9602083613c47565b91506141e4826141a3565b602082019050919050565b60006020820190508181036000830152614208816141cc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061424982613b99565b915061425483613b99565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142895761428861420f565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006142ca601d83613c47565b91506142d582614294565b602082019050919050565b600060208201905081810360008301526142f9816142bd565b9050919050565b600061430b82613b99565b915061431683613b99565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561434f5761434e61420f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061439482613b99565b915061439f83613b99565b9250826143af576143ae61435a565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614416602983613c47565b9150614421826143ba565b604082019050919050565b6000602082019050818103600083015261444581614409565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061449357607f821691505b602082108114156144a7576144a661444c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614509602883613c47565b9150614514826144ad565b604082019050919050565b60006020820190508181036000830152614538816144fc565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657453697a65206c6f776572207460008201527f68616e20302e3525000000000000000000000000000000000000000000000000602082015250565b600061459b602883613c47565b91506145a68261453f565b604082019050919050565b600060208201905081810360008301526145ca8161458e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f616d6d5061697273000000000000000000000000000000000000000000000000602082015250565b600061462d602883613c47565b9150614638826145d1565b604082019050919050565b6000602082019050818103600083015261465c81614620565b9050919050565b61466c81613f44565b82525050565b600060a0820190506146876000830188614663565b6146946020830187614663565b6146a16040830186614663565b6146ae6060830185613dcb565b6146bb6080830184614047565b9695505050505050565b60006060820190506146da6000830186614663565b6146e76020830185614663565b6146f46040830184613dcb565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b600061473d6002836146fc565b915061474882614707565b600282019050919050565b6000819050919050565b61476e61476982613f44565b614753565b82525050565b600061477f82614730565b915061478b828561475d565b60208201915061479b828461475d565b6020820191508190509392505050565b60006080820190506147c06000830187614663565b6147cd6020830186613ec1565b6147da6040830185614663565b6147e76060830184614663565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b6000614826601183613c47565b9150614831826147f0565b602082019050919050565b6000602082019050818103600083015261485581614819565b9050919050565b600081905092915050565b50565b600061487760008361485c565b915061488282614867565b600082019050919050565b60006148988261486a565b9150819050919050565b7f57726f6e6720616d6f756e740000000000000000000000000000000000000000600082015250565b60006148d8600c83613c47565b91506148e3826148a2565b602082019050919050565b60006020820190508181036000830152614907816148cb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061494882613b99565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561497b5761497a61420f565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006149e2602583613c47565b91506149ed82614986565b604082019050919050565b60006020820190508181036000830152614a11816149d5565b9050919050565b7f496e76616c696420616e74692d647261696e6572000000000000000000000000600082015250565b6000614a4e601483613c47565b9150614a5982614a18565b602082019050919050565b60006020820190508181036000830152614a7d81614a41565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614ae0603583613c47565b9150614aeb82614a84565b604082019050919050565b60006020820190508181036000830152614b0f81614ad3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614b72603483613c47565b9150614b7d82614b16565b604082019050919050565b60006020820190508181036000830152614ba181614b65565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c04602683613c47565b9150614c0f82614ba8565b604082019050919050565b60006020820190508181036000830152614c3381614bf7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c96602483613c47565b9150614ca182614c3a565b604082019050919050565b60006020820190508181036000830152614cc581614c89565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d28602283613c47565b9150614d3382614ccc565b604082019050919050565b60006020820190508181036000830152614d5781614d1b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614dba602583613c47565b9150614dc582614d5e565b604082019050919050565b60006020820190508181036000830152614de981614dad565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e4c602383613c47565b9150614e5782614df0565b604082019050919050565b60006020820190508181036000830152614e7b81614e3f565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b6000614eb8601183613c47565b9150614ec382614e82565b602082019050919050565b60006020820190508181036000830152614ee781614eab565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b6000614f24600f83613c47565b9150614f2f82614eee565b602082019050919050565b60006020820190508181036000830152614f5381614f17565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614f90601683613c47565b9150614f9b82614f5a565b602082019050919050565b60006020820190508181036000830152614fbf81614f83565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615022602f83613c47565b915061502d82614fc6565b604082019050919050565b6000602082019050818103600083015261505181615015565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061508e601383613c47565b915061509982615058565b602082019050919050565b600060208201905081810360008301526150bd81615081565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b6000615120603083613c47565b915061512b826150c4565b604082019050919050565b6000602082019050818103600083015261514f81615113565b9050919050565b60008151905061516581613e48565b92915050565b60006020828403121561518157615180613b8f565b5b600061518f84828501615156565b91505092915050565b600060c0820190506151ad6000830189614047565b6151ba6020830188614047565b6151c76040830187614047565b6151d46060830186613dcb565b6151e16080830185613dcb565b6151ee60a0830184613dcb565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b600061522f601483613c47565b915061523a826151f9565b602082019050919050565b6000602082019050818103600083015261525e81615222565b9050919050565b600061527082613b99565b915061527b83613b99565b92508282101561528e5761528d61420f565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506152d781613d29565b92915050565b6000602082840312156152f3576152f2613b8f565b5b6000615301848285016152c8565b91505092915050565b6000819050919050565b600061532f61532a6153258461530a565b613fcd565b613b99565b9050919050565b61533f81615314565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61537a81613d17565b82525050565b600061538c8383615371565b60208301905092915050565b6000602082019050919050565b60006153b082615345565b6153ba8185615350565b93506153c583615361565b8060005b838110156153f65781516153dd8882615380565b97506153e883615398565b9250506001810190506153c9565b5085935050505092915050565b600060a0820190506154186000830188613dcb565b6154256020830187615336565b818103604083015261543781866153a5565b90506154466060830185614047565b6154536080830184613dcb565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006154b9602683613c47565b91506154c48261545d565b604082019050919050565b600060208201905081810360008301526154e8816154ac565b905091905056fea264697066735822122014993fb596af725093e2366e95384e3ea3936f1403d8521bcb7467372b02389864736f6c634300080a0033

Deployed Bytecode Sourcemap

15246:12060:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21038:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20512:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10591:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11322:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10912:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15906:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11682:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19880:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21535:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10811:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15837:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12182:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15546:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16094:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18296:1060;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20748:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15802:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15508:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27154:149;;;;;;;;;;;;;:::i;:::-;;11028:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;801:103;;;;;;;;;;;;;:::i;:::-;;15320:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19643:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19364:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26926:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;578:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15435:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15664:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21862:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19772:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16151:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10699:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15769:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15943:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15872:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12405:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16215:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11499:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21339:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15468:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19508:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15588:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15366:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18178:110;;;;;;;;;;;;;:::i;:::-;;20113:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15701:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11163:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15624:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15401:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15735;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;912:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21038:289;724:12;:10;:12::i;:::-;713:23;;:7;:5;:7::i;:::-;:23;;;705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21149:12:::1;21133:13;:28;;;;21185:9;21172:10;:22;;;;21237:10;;21221:13;;:26;;;;:::i;:::-;21205:13;:42;;;;21283:2;21266:13;;:19;;21258:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21038:289:::0;;:::o;20512:228::-;724:12;:10;:12::i;:::-;713:23;;:7;:5;:7::i;:::-;:23;;;705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20637:4:::1;20629;20624:1;20608:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20607:26;;;;:::i;:::-;20606:35;;;;:::i;:::-;20596:6;:45;;20588:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;20725:6;20715;:17;;;;:::i;:::-;20698:14;:34;;;;20512:228:::0;:::o;10591:100::-;10645:13;10678:5;10671:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10591:100;:::o;11322:169::-;11405:4;11422:39;11431:12;:10;:12::i;:::-;11445:7;11454:6;11422:8;:39::i;:::-;11479:4;11472:11;;11322:169;;;;:::o;10912:108::-;10973:7;11000:12;;10993:19;;10912:108;:::o;15906:30::-;;;;:::o;11682:492::-;11822:4;11839:36;11849:6;11857:9;11868:6;11839:9;:36::i;:::-;11888:24;11915:11;:19;11927:6;11915:19;;;;;;;;;;;;;;;:33;11935:12;:10;:12::i;:::-;11915:33;;;;;;;;;;;;;;;;11888:60;;11987:6;11967:16;:26;;11959:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12074:57;12083:6;12091:12;:10;:12::i;:::-;12124:6;12105:16;:25;12074:8;:57::i;:::-;12162:4;12155:11;;;11682:492;;;;;:::o;19880:225::-;724:12;:10;:12::i;:::-;713:23;;:7;:5;:7::i;:::-;:23;;;705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20004:4:::1;19996;19991:1;19975:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19974:26;;;;:::i;:::-;19973:35;;;;:::i;:::-;19963:6;:45;;19955:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;20090:6;20080;:17;;;;:::i;:::-;20064:13;:33;;;;19880:225:::0;:::o;21535:189::-;724:12;:10;:12::i;:::-;713:23;;:7;:5;:7::i;:::-;:23;;;705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21627:11:::1;;;;;;;;;;;21619:19;;:4;:19;;;;21611:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21711:5;21694:8;:14;21703:4;21694:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;21535:189:::0;;:::o;10811:93::-;10869:5;10894:2;10887:9;;10811:93;:::o;15837:28::-;;;;:::o;12182:215::-;12270:4;12287:80;12296:12;:10;:12::i;:::-;12310:7;12356:10;12319:11;:25;12331:12;:10;:12::i;:::-;12319:25;;;;;;;;;;;;;;;:34;12345:7;12319:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12287:8;:80::i;:::-;12385:4;12378:11;;12182:215;;;;:::o;15546:33::-;;;;;;;;;;;;;:::o;16094:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;18296:1060::-;18378:18;18452:95;18576:22;;;;;;;;;;;;;;;;;18566:33;;;;;;18628:10;;;;;;;;;;;;;;;;;18618:21;;;;;;18658:13;18698:4;18423:295;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18399:330;;;;;;18378:351;;18742:18;18816:49;18894:23;;;;;;;;;;;;;;;;;18884:34;;;;;;18945:1;18787:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18763:210;;;;;;18742:231;;18986:14;19091:10;19120;19027:134;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19003:169;;;;;;18986:186;;19185:14;19202:26;19212:6;19220:1;19223;19226;19202:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19185:43;;19257:7;:5;:7::i;:::-;19247:17;;:6;:17;;;19239:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;19315:4;19299:13;;:20;;;;;;;;;;;;;;;;;;19344:4;19330:11;;:18;;;;;;;;;;;;;;;;;;18367:989;;;;18296:1060;;;:::o;20748:282::-;724:12;:10;:12::i;:::-;713:23;;:7;:5;:7::i;:::-;:23;;;705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20857:12:::1;20842;:27;;;;20892:9;20880;:21;;;;20942:9;;20927:12;;:24;;;;:::i;:::-;20912:12;:39;;;;20986:2;20970:12;;:18;;20962:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20748:282:::0;;:::o;15802:28::-;;;;:::o;15508:31::-;;;;;;;;;;;;;:::o;27154:149::-;27196:12;27241;;;;;;;;;;;27233:26;;27268:21;27233:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27219:76;;;;;27185:118;27154:149::o;11028:127::-;11102:7;11129:9;:18;11139:7;11129:18;;;;;;;;;;;;;;;;11122:25;;11028:127;;;:::o;801:103::-;724:12;:10;:12::i;:::-;713:23;;:7;:5;:7::i;:::-;:23;;;705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;866:30:::1;893:1;866:18;:30::i;:::-;801:103::o:0;15320:39::-;;;;;;;;;;;;;:::o;19643:121::-;19695:4;724:12;:10;:12::i;:::-;713:23;;:7;:5;:7::i;:::-;:23;;;705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19729:5:::1;19712:14;;:22;;;;;;;;;;;;;;;;;;19752:4;19745:11;;19643:121:::0;:::o;19364:136::-;724:12;:10;:12::i;:::-;713:23;;:7;:5;:7::i;:::-;:23;;;705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19487:5:::1;19455:23;:29;19479:4;19455:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;19364:136:::0;;:::o;26926:220::-;27006:12;;;;;;;;;;;26990:28;;:12;:10;:12::i;:::-;:28;;;26982:37;;;;;;27048:24;27066:4;27048:9;:24::i;:::-;27038:6;:34;;:48;;;;;27085:1;27076:6;:10;27038:48;27030:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27114:24;27131:6;27114:16;:24::i;:::-;26926:220;:::o;578:87::-;624:7;651:6;;;;;;;;;;;644:13;;578:87;:::o;15435:24::-;;;;;;;;;;;;;:::o;15664:28::-;;;;:::o;21862:206::-;724:12;:10;:12::i;:::-;713:23;;:7;:5;:7::i;:::-;:23;;;705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21961:9:::1;21956:105;21980:7;;:14;;21976:1;:18;21956:105;;;22042:7;22016:11;:23;22028:7;;22036:1;22028:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22016:23;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;21996:3;;;;;:::i;:::-;;;;21956:105;;;;21862:206:::0;;;:::o;19772:100::-;724:12;:10;:12::i;:::-;713:23;;:7;:5;:7::i;:::-;:23;;;705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19857:7:::1;19843:11;;:21;;;;;;;;;;;;;;;;;;19772:100:::0;:::o;16151:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;10699:104::-;10755:13;10788:7;10781:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10699:104;:::o;15769:24::-;;;;:::o;15943:27::-;;;;:::o;15872:25::-;;;;:::o;12405:413::-;12498:4;12515:24;12542:11;:25;12554:12;:10;:12::i;:::-;12542:25;;;;;;;;;;;;;;;:34;12568:7;12542:34;;;;;;;;;;;;;;;;12515:61;;12615:15;12595:16;:35;;12587:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;12708:67;12717:12;:10;:12::i;:::-;12731:7;12759:15;12740:16;:34;12708:8;:67::i;:::-;12806:4;12799:11;;;12405:413;;;;:::o;16215:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;11499:175::-;11585:4;11602:42;11612:12;:10;:12::i;:::-;11626:9;11637:6;11602:9;:42::i;:::-;11662:4;11655:11;;11499:175;;;;:::o;21339:188::-;724:12;:10;:12::i;:::-;713:23;;:7;:5;:7::i;:::-;:23;;;705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21451:3:::1;21425:30;;:14;:30;;;;21417:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21505:14;21491:11;;:28;;;;;;;;;;;;;;;;;;21339:188:::0;:::o;15468:33::-;;;;;;;;;;;;;:::o;19508:127::-;724:12;:10;:12::i;:::-;713:23;;:7;:5;:7::i;:::-;:23;;;705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19622:5:::1;19592:18;:27;19611:7;19592:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;19508:127:::0;;:::o;15588:29::-;;;;:::o;15366:26::-;;;;;;;;;;;;;:::o;18178:110::-;724:12;:10;:12::i;:::-;713:23;;:7;:5;:7::i;:::-;:23;;;705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18247:4:::1;18231:13;;:20;;;;;;;;;;;;;;;;;;18276:4;18262:11;;:18;;;;;;;;;;;;;;;;;;18178:110::o:0;20113:391::-;20194:4;724:12;:10;:12::i;:::-;713:23;;:7;:5;:7::i;:::-;:23;;;705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20254:6:::1;20249:1;20233:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20232:28;;;;:::i;:::-;20219:9;:41;;20211:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;20372:4;20367:1;20351:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20350:26;;;;:::i;:::-;20337:9;:39;;20329:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;20465:9;20444:18;:30;;;;20492:4;20485:11;;20113:391:::0;;;:::o;15701:27::-;;;;:::o;11163:151::-;11252:7;11279:11;:18;11291:5;11279:18;;;;;;;;;;;;;;;:27;11298:7;11279:27;;;;;;;;;;;;;;;;11272:34;;11163:151;;;;:::o;15624:33::-;;;;:::o;15401:27::-;;;;;;;;;;;;;:::o;15735:::-;;;;:::o;912:201::-;724:12;:10;:12::i;:::-;713:23;;:7;:5;:7::i;:::-;:23;;;705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1021:1:::1;1001:22;;:8;:22;;;;993:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1077:28;1096:8;1077:18;:28::i;:::-;912:201:::0;:::o;124:98::-;177:7;204:10;197:17;;124:98;:::o;13832:380::-;13985:1;13968:19;;:5;:19;;;;13960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14066:1;14047:21;;:7;:21;;;;14039:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14150:6;14120:11;:18;14132:5;14120:18;;;;;;;;;;;;;;;:27;14139:7;14120:27;;;;;;;;;;;;;;;:36;;;;14188:7;14172:32;;14181:5;14172:32;;;14197:6;14172:32;;;;;;:::i;:::-;;;;;;;;13832:380;;;:::o;23546:3257::-;23660:1;23644:18;;:4;:18;;;;23636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23737:1;23723:16;;:2;:16;;;;23715:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23799:11;:17;23811:4;23799:17;;;;;;;;;;;;;;;;;;;;;;;;;23798:18;23790:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23858:11;:15;23870:2;23858:15;;;;;;;;;;;;;;;;;;;;;;;;;23857:16;23849:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;23920:1;23910:6;:11;23906:93;;;23938:28;23954:4;23960:2;23964:1;23938:15;:28::i;:::-;23981:7;;23906:93;24015:14;;;;;;;;;;;24011:1116;;;24058:7;:5;:7::i;:::-;24050:15;;:4;:15;;;;:49;;;;;24092:7;:5;:7::i;:::-;24086:13;;:2;:13;;;;24050:49;:86;;;;;24134:1;24120:16;;:2;:16;;;;24050:86;:128;;;;;24171:6;24157:21;;:2;:21;;;;24050:128;:158;;;;;24200:8;;;;;;;;;;;24199:9;24050:158;24046:1070;;;24234:13;;;;;;;;;;;24229:148;;24280:18;:24;24299:4;24280:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;24308:18;:22;24327:2;24308:22;;;;;;;;;;;;;;;;;;;;;;;;;24280:50;24272:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;24229:148;24429:8;:14;24438:4;24429:14;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;24448:23;:27;24472:2;24448:27;;;;;;;;;;;;;;;;;;;;;;;;;24447:28;24429:46;24425:676;;;24518:14;;24508:6;:24;;24500:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;24641:13;;24624;24634:2;24624:9;:13::i;:::-;24615:6;:22;;;;:::i;:::-;:39;;24607:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24425:676;;;24754:8;:12;24763:2;24754:12;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;24771:23;:29;24795:4;24771:29;;;;;;;;;;;;;;;;;;;;;;;;;24770:30;24754:46;24750:351;;;24843:14;;24833:6;:24;;24825:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;24750:351;;;24958:23;:27;24982:2;24958:27;;;;;;;;;;;;;;;;;;;;;;;;;24953:148;;25044:13;;25027;25037:2;25027:9;:13::i;:::-;25018:6;:22;;;;:::i;:::-;:39;;25010:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24953:148;24750:351;24425:676;24046:1070;24011:1116;25166:1;25143:25;;:11;;;;;;;;;;;:25;;;;:79;;;;;25185:11;;;;;;;;;;;25172:35;;;25216:4;25172:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25143:79;25139:292;;;25239:10;25265:11;;;;;;;;;;;25252:31;;;25284:4;25290:2;25302:11;;;;;;;;;;;25316:13;;25331:14;;25347:18;;25252:114;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25239:127;;25389:5;25381:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;25224:207;25139:292;25443:23;25469:24;25487:4;25469:9;:24::i;:::-;25443:50;;25504:12;25538:18;;25519:15;:37;;25504:52;;25571:7;:35;;;;;25595:11;;;;;;;;;;;25571:35;:61;;;;;25624:8;;;;;;;;;;;25623:9;25571:61;:90;;;;;25649:8;:12;25658:2;25649:12;;;;;;;;;;;;;;;;;;;;;;;;;25571:90;:132;;;;;25679:18;:24;25698:4;25679:24;;;;;;;;;;;;;;;;;;;;;;;;;25678:25;25571:132;:172;;;;;25721:18;:22;25740:2;25721:22;;;;;;;;;;;;;;;;;;;;;;;;;25720:23;25571:172;25567:278;;;25773:4;25762:8;;:15;;;;;;;;;;;;;;;;;;25792:10;:8;:10::i;:::-;25828:5;25817:8;;:16;;;;;;;;;;;;;;;;;;25567:278;25857:12;25873:8;;;;;;;;;;;25872:9;25857:24;;25896:18;:24;25915:4;25896:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;25924:18;:22;25943:2;25924:22;;;;;;;;;;;;;;;;;;;;;;;;;25896:50;25892:84;;;25971:5;25961:15;;25892:84;25989:11;26019:7;26015:735;;;26071:8;:12;26080:2;26071:12;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;;26103:1;26087:13;;:17;26071:33;26067:554;;;26131:34;26161:3;26131:25;26142:13;;26131:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26125:40;;26221:13;;26207:10;;26201:3;:16;;;;:::i;:::-;26200:34;;;;:::i;:::-;26184:12;;:50;;;;;;;:::i;:::-;;;;;;;;26296:13;;26279;;26273:3;:19;;;;:::i;:::-;26272:37;;;;:::i;:::-;26253:15;;:56;;;;;;;:::i;:::-;;;;;;;;26067:554;;;26371:8;:14;26380:4;26371:14;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;26404:1;26389:12;;:16;26371:34;26367:254;;;26432:33;26461:3;26432:24;26443:12;;26432:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26426:39;;26520:12;;26507:9;;26501:3;:15;;;;:::i;:::-;26500:32;;;;:::i;:::-;26484:12;;:48;;;;;;;:::i;:::-;;;;;;;;26593:12;;26577;;26571:3;:18;;;;:::i;:::-;26570:35;;;;:::i;:::-;26551:15;;:54;;;;;;;:::i;:::-;;;;;;;;26367:254;26067:554;26647:1;26641:3;:7;26637:71;;;26667:41;26683:4;26697;26704:3;26667:15;:41::i;:::-;26637:71;26735:3;26725:13;;;;;:::i;:::-;;;26015:735;26762:33;26778:4;26784:2;26788:6;26762:15;:33::i;:::-;23625:3178;;;;23546:3257;;;;:::o;1121:191::-;1195:16;1214:6;;;;;;;;;;;1195:25;;1240:8;1231:6;;:17;;;;;;;;;;;;;;;;;;1295:8;1264:40;;1285:8;1264:40;;;;;;;;;;;;1184:128;1121:191;:::o;22955:583::-;23081:21;23119:1;23105:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23081:40;;23150:4;23132;23137:1;23132:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;23176:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23166:4;23171:1;23166:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;23209:60;23226:4;23241:13;;;;;;;;;;;23257:11;23209:8;:60::i;:::-;23308:13;;;;;;;;;;;:64;;;23387:11;23413:1;23457:4;23484;23504:15;23308:222;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23010:528;22955:583;:::o;14220:733::-;14378:1;14360:20;;:6;:20;;;;14352:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14462:1;14441:23;;:9;:23;;;;14433:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14517:47;14538:6;14546:9;14557:6;14517:20;:47::i;:::-;14577:21;14601:9;:17;14611:6;14601:17;;;;;;;;;;;;;;;;14577:41;;14654:6;14637:13;:23;;14629:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14775:6;14759:13;:22;14739:9;:17;14749:6;14739:17;;;;;;;;;;;;;;;:42;;;;14827:6;14803:9;:20;14813:9;14803:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14868:9;14851:35;;14860:6;14851:35;;;14879:6;14851:35;;;;;;:::i;:::-;;;;;;;;14899:46;14919:6;14927:9;14938:6;14899:19;:46::i;:::-;14341:612;14220:733;;;:::o;22076:871::-;22115:23;22141:24;22159:4;22141:9;:24::i;:::-;22115:50;;22176:25;22222:12;;22204:15;;:30;;;;:::i;:::-;22176:58;;22245:12;22293:1;22274:15;:20;:46;;;;22319:1;22298:17;:22;22274:46;22270:72;;;22335:7;;;;;22270:72;22397:2;22376:18;;:23;;;;:::i;:::-;22358:15;:41;22354:101;;;22453:2;22432:18;;:23;;;;:::i;:::-;22414:41;;22354:101;22468:25;22496:21;22468:49;;22528:33;22545:15;22528:16;:33::i;:::-;22574:18;22595:44;22621:17;22595:21;:25;;:44;;;;:::i;:::-;22574:65;;22650:17;22670:51;22703:17;22670:28;22685:12;;22670:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;22650:71;;22752:1;22734:15;:19;;;;22779:1;22764:12;:16;;;;22815:9;;;;;;;;;;;22807:23;;22838:9;22807:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22793:59;;;;;22885:12;;;;;;;;;;;22877:26;;22912:21;22877:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22863:76;;;;;22104:843;;;;;;22076:871;:::o;2700:98::-;2758:7;2789:1;2785;:5;;;;:::i;:::-;2778:12;;2700:98;;;;:::o;2806:::-;2864:7;2895:1;2891;:5;;;;:::i;:::-;2884:12;;2806:98;;;;:::o;14961:125::-;;;;:::o;15094:124::-;;;;:::o;2594:98::-;2652:7;2683:1;2679;:5;;;;:::i;:::-;2672:12;;2594:98;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:329::-;1229:6;1278:2;1266:9;1257:7;1253:23;1249:32;1246:119;;;1284:79;;:::i;:::-;1246:119;1404:1;1429:53;1474:7;1465:6;1454:9;1450:22;1429:53;:::i;:::-;1419:63;;1375:117;1170:329;;;;:::o;1505:99::-;1557:6;1591:5;1585:12;1575:22;;1505:99;;;:::o;1610:169::-;1694:11;1728:6;1723:3;1716:19;1768:4;1763:3;1759:14;1744:29;;1610:169;;;;:::o;1785:307::-;1853:1;1863:113;1877:6;1874:1;1871:13;1863:113;;;1962:1;1957:3;1953:11;1947:18;1943:1;1938:3;1934:11;1927:39;1899:2;1896:1;1892:10;1887:15;;1863:113;;;1994:6;1991:1;1988:13;1985:101;;;2074:1;2065:6;2060:3;2056:16;2049:27;1985:101;1834:258;1785:307;;;:::o;2098:102::-;2139:6;2190:2;2186:7;2181:2;2174:5;2170:14;2166:28;2156:38;;2098:102;;;:::o;2206:364::-;2294:3;2322:39;2355:5;2322:39;:::i;:::-;2377:71;2441:6;2436:3;2377:71;:::i;:::-;2370:78;;2457:52;2502:6;2497:3;2490:4;2483:5;2479:16;2457:52;:::i;:::-;2534:29;2556:6;2534:29;:::i;:::-;2529:3;2525:39;2518:46;;2298:272;2206:364;;;;:::o;2576:313::-;2689:4;2727:2;2716:9;2712:18;2704:26;;2776:9;2770:4;2766:20;2762:1;2751:9;2747:17;2740:47;2804:78;2877:4;2868:6;2804:78;:::i;:::-;2796:86;;2576:313;;;;:::o;2895:126::-;2932:7;2972:42;2965:5;2961:54;2950:65;;2895:126;;;:::o;3027:96::-;3064:7;3093:24;3111:5;3093:24;:::i;:::-;3082:35;;3027:96;;;:::o;3129:122::-;3202:24;3220:5;3202:24;:::i;:::-;3195:5;3192:35;3182:63;;3241:1;3238;3231:12;3182:63;3129:122;:::o;3257:139::-;3303:5;3341:6;3328:20;3319:29;;3357:33;3384:5;3357:33;:::i;:::-;3257:139;;;;:::o;3402:474::-;3470:6;3478;3527:2;3515:9;3506:7;3502:23;3498:32;3495:119;;;3533:79;;:::i;:::-;3495:119;3653:1;3678:53;3723:7;3714:6;3703:9;3699:22;3678:53;:::i;:::-;3668:63;;3624:117;3780:2;3806:53;3851:7;3842:6;3831:9;3827:22;3806:53;:::i;:::-;3796:63;;3751:118;3402:474;;;;;:::o;3882:90::-;3916:7;3959:5;3952:13;3945:21;3934:32;;3882:90;;;:::o;3978:109::-;4059:21;4074:5;4059:21;:::i;:::-;4054:3;4047:34;3978:109;;:::o;4093:210::-;4180:4;4218:2;4207:9;4203:18;4195:26;;4231:65;4293:1;4282:9;4278:17;4269:6;4231:65;:::i;:::-;4093:210;;;;:::o;4309:118::-;4396:24;4414:5;4396:24;:::i;:::-;4391:3;4384:37;4309:118;;:::o;4433:222::-;4526:4;4564:2;4553:9;4549:18;4541:26;;4577:71;4645:1;4634:9;4630:17;4621:6;4577:71;:::i;:::-;4433:222;;;;:::o;4661:619::-;4738:6;4746;4754;4803:2;4791:9;4782:7;4778:23;4774:32;4771:119;;;4809:79;;:::i;:::-;4771:119;4929:1;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4900:117;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;5184:2;5210:53;5255:7;5246:6;5235:9;5231:22;5210:53;:::i;:::-;5200:63;;5155:118;4661:619;;;;;:::o;5286:116::-;5356:21;5371:5;5356:21;:::i;:::-;5349:5;5346:32;5336:60;;5392:1;5389;5382:12;5336:60;5286:116;:::o;5408:133::-;5451:5;5489:6;5476:20;5467:29;;5505:30;5529:5;5505:30;:::i;:::-;5408:133;;;;:::o;5547:468::-;5612:6;5620;5669:2;5657:9;5648:7;5644:23;5640:32;5637:119;;;5675:79;;:::i;:::-;5637:119;5795:1;5820:53;5865:7;5856:6;5845:9;5841:22;5820:53;:::i;:::-;5810:63;;5766:117;5922:2;5948:50;5990:7;5981:6;5970:9;5966:22;5948:50;:::i;:::-;5938:60;;5893:115;5547:468;;;;;:::o;6021:86::-;6056:7;6096:4;6089:5;6085:16;6074:27;;6021:86;;;:::o;6113:112::-;6196:22;6212:5;6196:22;:::i;:::-;6191:3;6184:35;6113:112;;:::o;6231:214::-;6320:4;6358:2;6347:9;6343:18;6335:26;;6371:67;6435:1;6424:9;6420:17;6411:6;6371:67;:::i;:::-;6231:214;;;;:::o;6451:329::-;6510:6;6559:2;6547:9;6538:7;6534:23;6530:32;6527:119;;;6565:79;;:::i;:::-;6527:119;6685:1;6710:53;6755:7;6746:6;6735:9;6731:22;6710:53;:::i;:::-;6700:63;;6656:117;6451:329;;;;:::o;6786:118::-;6857:22;6873:5;6857:22;:::i;:::-;6850:5;6847:33;6837:61;;6894:1;6891;6884:12;6837:61;6786:118;:::o;6910:135::-;6954:5;6992:6;6979:20;6970:29;;7008:31;7033:5;7008:31;:::i;:::-;6910:135;;;;:::o;7051:77::-;7088:7;7117:5;7106:16;;7051:77;;;:::o;7134:122::-;7207:24;7225:5;7207:24;:::i;:::-;7200:5;7197:35;7187:63;;7246:1;7243;7236:12;7187:63;7134:122;:::o;7262:139::-;7308:5;7346:6;7333:20;7324:29;;7362:33;7389:5;7362:33;:::i;:::-;7262:139;;;;:::o;7407:615::-;7482:6;7490;7498;7547:2;7535:9;7526:7;7522:23;7518:32;7515:119;;;7553:79;;:::i;:::-;7515:119;7673:1;7698:51;7741:7;7732:6;7721:9;7717:22;7698:51;:::i;:::-;7688:61;;7644:115;7798:2;7824:53;7869:7;7860:6;7849:9;7845:22;7824:53;:::i;:::-;7814:63;;7769:118;7926:2;7952:53;7997:7;7988:6;7977:9;7973:22;7952:53;:::i;:::-;7942:63;;7897:118;7407:615;;;;;:::o;8028:60::-;8056:3;8077:5;8070:12;;8028:60;;;:::o;8094:142::-;8144:9;8177:53;8195:34;8204:24;8222:5;8204:24;:::i;:::-;8195:34;:::i;:::-;8177:53;:::i;:::-;8164:66;;8094:142;;;:::o;8242:126::-;8292:9;8325:37;8356:5;8325:37;:::i;:::-;8312:50;;8242:126;;;:::o;8374:152::-;8450:9;8483:37;8514:5;8483:37;:::i;:::-;8470:50;;8374:152;;;:::o;8532:183::-;8645:63;8702:5;8645:63;:::i;:::-;8640:3;8633:76;8532:183;;:::o;8721:274::-;8840:4;8878:2;8867:9;8863:18;8855:26;;8891:97;8985:1;8974:9;8970:17;8961:6;8891:97;:::i;:::-;8721:274;;;;:::o;9001:118::-;9088:24;9106:5;9088:24;:::i;:::-;9083:3;9076:37;9001:118;;:::o;9125:222::-;9218:4;9256:2;9245:9;9241:18;9233:26;;9269:71;9337:1;9326:9;9322:17;9313:6;9269:71;:::i;:::-;9125:222;;;;:::o;9353:117::-;9462:1;9459;9452:12;9476:117;9585:1;9582;9575:12;9599:117;9708:1;9705;9698:12;9739:568;9812:8;9822:6;9872:3;9865:4;9857:6;9853:17;9849:27;9839:122;;9880:79;;:::i;:::-;9839:122;9993:6;9980:20;9970:30;;10023:18;10015:6;10012:30;10009:117;;;10045:79;;:::i;:::-;10009:117;10159:4;10151:6;10147:17;10135:29;;10213:3;10205:4;10197:6;10193:17;10183:8;10179:32;10176:41;10173:128;;;10220:79;;:::i;:::-;10173:128;9739:568;;;;;:::o;10313:698::-;10405:6;10413;10421;10470:2;10458:9;10449:7;10445:23;10441:32;10438:119;;;10476:79;;:::i;:::-;10438:119;10624:1;10613:9;10609:17;10596:31;10654:18;10646:6;10643:30;10640:117;;;10676:79;;:::i;:::-;10640:117;10789:80;10861:7;10852:6;10841:9;10837:22;10789:80;:::i;:::-;10771:98;;;;10567:312;10918:2;10944:50;10986:7;10977:6;10966:9;10962:22;10944:50;:::i;:::-;10934:60;;10889:115;10313:698;;;;;:::o;11017:323::-;11073:6;11122:2;11110:9;11101:7;11097:23;11093:32;11090:119;;;11128:79;;:::i;:::-;11090:119;11248:1;11273:50;11315:7;11306:6;11295:9;11291:22;11273:50;:::i;:::-;11263:60;;11219:114;11017:323;;;;:::o;11346:474::-;11414:6;11422;11471:2;11459:9;11450:7;11446:23;11442:32;11439:119;;;11477:79;;:::i;:::-;11439:119;11597:1;11622:53;11667:7;11658:6;11647:9;11643:22;11622:53;:::i;:::-;11612:63;;11568:117;11724:2;11750:53;11795:7;11786:6;11775:9;11771:22;11750:53;:::i;:::-;11740:63;;11695:118;11346:474;;;;;:::o;11826:182::-;11966:34;11962:1;11954:6;11950:14;11943:58;11826:182;:::o;12014:366::-;12156:3;12177:67;12241:2;12236:3;12177:67;:::i;:::-;12170:74;;12253:93;12342:3;12253:93;:::i;:::-;12371:2;12366:3;12362:12;12355:19;;12014:366;;;:::o;12386:419::-;12552:4;12590:2;12579:9;12575:18;12567:26;;12639:9;12633:4;12629:20;12625:1;12614:9;12610:17;12603:47;12667:131;12793:4;12667:131;:::i;:::-;12659:139;;12386:419;;;:::o;12811:180::-;12859:77;12856:1;12849:88;12956:4;12953:1;12946:15;12980:4;12977:1;12970:15;12997:305;13037:3;13056:20;13074:1;13056:20;:::i;:::-;13051:25;;13090:20;13108:1;13090:20;:::i;:::-;13085:25;;13244:1;13176:66;13172:74;13169:1;13166:81;13163:107;;;13250:18;;:::i;:::-;13163:107;13294:1;13291;13287:9;13280:16;;12997:305;;;;:::o;13308:179::-;13448:31;13444:1;13436:6;13432:14;13425:55;13308:179;:::o;13493:366::-;13635:3;13656:67;13720:2;13715:3;13656:67;:::i;:::-;13649:74;;13732:93;13821:3;13732:93;:::i;:::-;13850:2;13845:3;13841:12;13834:19;;13493:366;;;:::o;13865:419::-;14031:4;14069:2;14058:9;14054:18;14046:26;;14118:9;14112:4;14108:20;14104:1;14093:9;14089:17;14082:47;14146:131;14272:4;14146:131;:::i;:::-;14138:139;;13865:419;;;:::o;14290:348::-;14330:7;14353:20;14371:1;14353:20;:::i;:::-;14348:25;;14387:20;14405:1;14387:20;:::i;:::-;14382:25;;14575:1;14507:66;14503:74;14500:1;14497:81;14492:1;14485:9;14478:17;14474:105;14471:131;;;14582:18;;:::i;:::-;14471:131;14630:1;14627;14623:9;14612:20;;14290:348;;;;:::o;14644:180::-;14692:77;14689:1;14682:88;14789:4;14786:1;14779:15;14813:4;14810:1;14803:15;14830:185;14870:1;14887:20;14905:1;14887:20;:::i;:::-;14882:25;;14921:20;14939:1;14921:20;:::i;:::-;14916:25;;14960:1;14950:35;;14965:18;;:::i;:::-;14950:35;15007:1;15004;15000:9;14995:14;;14830:185;;;;:::o;15021:228::-;15161:34;15157:1;15149:6;15145:14;15138:58;15230:11;15225:2;15217:6;15213:15;15206:36;15021:228;:::o;15255:366::-;15397:3;15418:67;15482:2;15477:3;15418:67;:::i;:::-;15411:74;;15494:93;15583:3;15494:93;:::i;:::-;15612:2;15607:3;15603:12;15596:19;;15255:366;;;:::o;15627:419::-;15793:4;15831:2;15820:9;15816:18;15808:26;;15880:9;15874:4;15870:20;15866:1;15855:9;15851:17;15844:47;15908:131;16034:4;15908:131;:::i;:::-;15900:139;;15627:419;;;:::o;16052:180::-;16100:77;16097:1;16090:88;16197:4;16194:1;16187:15;16221:4;16218:1;16211:15;16238:320;16282:6;16319:1;16313:4;16309:12;16299:22;;16366:1;16360:4;16356:12;16387:18;16377:81;;16443:4;16435:6;16431:17;16421:27;;16377:81;16505:2;16497:6;16494:14;16474:18;16471:38;16468:84;;;16524:18;;:::i;:::-;16468:84;16289:269;16238:320;;;:::o;16564:227::-;16704:34;16700:1;16692:6;16688:14;16681:58;16773:10;16768:2;16760:6;16756:15;16749:35;16564:227;:::o;16797:366::-;16939:3;16960:67;17024:2;17019:3;16960:67;:::i;:::-;16953:74;;17036:93;17125:3;17036:93;:::i;:::-;17154:2;17149:3;17145:12;17138:19;;16797:366;;;:::o;17169:419::-;17335:4;17373:2;17362:9;17358:18;17350:26;;17422:9;17416:4;17412:20;17408:1;17397:9;17393:17;17386:47;17450:131;17576:4;17450:131;:::i;:::-;17442:139;;17169:419;;;:::o;17594:227::-;17734:34;17730:1;17722:6;17718:14;17711:58;17803:10;17798:2;17790:6;17786:15;17779:35;17594:227;:::o;17827:366::-;17969:3;17990:67;18054:2;18049:3;17990:67;:::i;:::-;17983:74;;18066:93;18155:3;18066:93;:::i;:::-;18184:2;18179:3;18175:12;18168:19;;17827:366;;;:::o;18199:419::-;18365:4;18403:2;18392:9;18388:18;18380:26;;18452:9;18446:4;18442:20;18438:1;18427:9;18423:17;18416:47;18480:131;18606:4;18480:131;:::i;:::-;18472:139;;18199:419;;;:::o;18624:227::-;18764:34;18760:1;18752:6;18748:14;18741:58;18833:10;18828:2;18820:6;18816:15;18809:35;18624:227;:::o;18857:366::-;18999:3;19020:67;19084:2;19079:3;19020:67;:::i;:::-;19013:74;;19096:93;19185:3;19096:93;:::i;:::-;19214:2;19209:3;19205:12;19198:19;;18857:366;;;:::o;19229:419::-;19395:4;19433:2;19422:9;19418:18;19410:26;;19482:9;19476:4;19472:20;19468:1;19457:9;19453:17;19446:47;19510:131;19636:4;19510:131;:::i;:::-;19502:139;;19229:419;;;:::o;19654:118::-;19741:24;19759:5;19741:24;:::i;:::-;19736:3;19729:37;19654:118;;:::o;19778:664::-;19983:4;20021:3;20010:9;20006:19;19998:27;;20035:71;20103:1;20092:9;20088:17;20079:6;20035:71;:::i;:::-;20116:72;20184:2;20173:9;20169:18;20160:6;20116:72;:::i;:::-;20198;20266:2;20255:9;20251:18;20242:6;20198:72;:::i;:::-;20280;20348:2;20337:9;20333:18;20324:6;20280:72;:::i;:::-;20362:73;20430:3;20419:9;20415:19;20406:6;20362:73;:::i;:::-;19778:664;;;;;;;;:::o;20448:442::-;20597:4;20635:2;20624:9;20620:18;20612:26;;20648:71;20716:1;20705:9;20701:17;20692:6;20648:71;:::i;:::-;20729:72;20797:2;20786:9;20782:18;20773:6;20729:72;:::i;:::-;20811;20879:2;20868:9;20864:18;20855:6;20811:72;:::i;:::-;20448:442;;;;;;:::o;20896:148::-;20998:11;21035:3;21020:18;;20896:148;;;;:::o;21050:214::-;21190:66;21186:1;21178:6;21174:14;21167:90;21050:214;:::o;21270:400::-;21430:3;21451:84;21533:1;21528:3;21451:84;:::i;:::-;21444:91;;21544:93;21633:3;21544:93;:::i;:::-;21662:1;21657:3;21653:11;21646:18;;21270:400;;;:::o;21676:79::-;21715:7;21744:5;21733:16;;21676:79;;;:::o;21761:157::-;21866:45;21886:24;21904:5;21886:24;:::i;:::-;21866:45;:::i;:::-;21861:3;21854:58;21761:157;;:::o;21924:663::-;22165:3;22187:148;22331:3;22187:148;:::i;:::-;22180:155;;22345:75;22416:3;22407:6;22345:75;:::i;:::-;22445:2;22440:3;22436:12;22429:19;;22458:75;22529:3;22520:6;22458:75;:::i;:::-;22558:2;22553:3;22549:12;22542:19;;22578:3;22571:10;;21924:663;;;;;:::o;22593:545::-;22766:4;22804:3;22793:9;22789:19;22781:27;;22818:71;22886:1;22875:9;22871:17;22862:6;22818:71;:::i;:::-;22899:68;22963:2;22952:9;22948:18;22939:6;22899:68;:::i;:::-;22977:72;23045:2;23034:9;23030:18;23021:6;22977:72;:::i;:::-;23059;23127:2;23116:9;23112:18;23103:6;23059:72;:::i;:::-;22593:545;;;;;;;:::o;23144:167::-;23284:19;23280:1;23272:6;23268:14;23261:43;23144:167;:::o;23317:366::-;23459:3;23480:67;23544:2;23539:3;23480:67;:::i;:::-;23473:74;;23556:93;23645:3;23556:93;:::i;:::-;23674:2;23669:3;23665:12;23658:19;;23317:366;;;:::o;23689:419::-;23855:4;23893:2;23882:9;23878:18;23870:26;;23942:9;23936:4;23932:20;23928:1;23917:9;23913:17;23906:47;23970:131;24096:4;23970:131;:::i;:::-;23962:139;;23689:419;;;:::o;24114:147::-;24215:11;24252:3;24237:18;;24114:147;;;;:::o;24267:114::-;;:::o;24387:398::-;24546:3;24567:83;24648:1;24643:3;24567:83;:::i;:::-;24560:90;;24659:93;24748:3;24659:93;:::i;:::-;24777:1;24772:3;24768:11;24761:18;;24387:398;;;:::o;24791:379::-;24975:3;24997:147;25140:3;24997:147;:::i;:::-;24990:154;;25161:3;25154:10;;24791:379;;;:::o;25176:162::-;25316:14;25312:1;25304:6;25300:14;25293:38;25176:162;:::o;25344:366::-;25486:3;25507:67;25571:2;25566:3;25507:67;:::i;:::-;25500:74;;25583:93;25672:3;25583:93;:::i;:::-;25701:2;25696:3;25692:12;25685:19;;25344:366;;;:::o;25716:419::-;25882:4;25920:2;25909:9;25905:18;25897:26;;25969:9;25963:4;25959:20;25955:1;25944:9;25940:17;25933:47;25997:131;26123:4;25997:131;:::i;:::-;25989:139;;25716:419;;;:::o;26141:180::-;26189:77;26186:1;26179:88;26286:4;26283:1;26276:15;26310:4;26307:1;26300:15;26327:233;26366:3;26389:24;26407:5;26389:24;:::i;:::-;26380:33;;26435:66;26428:5;26425:77;26422:103;;;26505:18;;:::i;:::-;26422:103;26552:1;26545:5;26541:13;26534:20;;26327:233;;;:::o;26566:224::-;26706:34;26702:1;26694:6;26690:14;26683:58;26775:7;26770:2;26762:6;26758:15;26751:32;26566:224;:::o;26796:366::-;26938:3;26959:67;27023:2;27018:3;26959:67;:::i;:::-;26952:74;;27035:93;27124:3;27035:93;:::i;:::-;27153:2;27148:3;27144:12;27137:19;;26796:366;;;:::o;27168:419::-;27334:4;27372:2;27361:9;27357:18;27349:26;;27421:9;27415:4;27411:20;27407:1;27396:9;27392:17;27385:47;27449:131;27575:4;27449:131;:::i;:::-;27441:139;;27168:419;;;:::o;27593:170::-;27733:22;27729:1;27721:6;27717:14;27710:46;27593:170;:::o;27769:366::-;27911:3;27932:67;27996:2;27991:3;27932:67;:::i;:::-;27925:74;;28008:93;28097:3;28008:93;:::i;:::-;28126:2;28121:3;28117:12;28110:19;;27769:366;;;:::o;28141:419::-;28307:4;28345:2;28334:9;28330:18;28322:26;;28394:9;28388:4;28384:20;28380:1;28369:9;28365:17;28358:47;28422:131;28548:4;28422:131;:::i;:::-;28414:139;;28141:419;;;:::o;28566:240::-;28706:34;28702:1;28694:6;28690:14;28683:58;28775:23;28770:2;28762:6;28758:15;28751:48;28566:240;:::o;28812:366::-;28954:3;28975:67;29039:2;29034:3;28975:67;:::i;:::-;28968:74;;29051:93;29140:3;29051:93;:::i;:::-;29169:2;29164:3;29160:12;29153:19;;28812:366;;;:::o;29184:419::-;29350:4;29388:2;29377:9;29373:18;29365:26;;29437:9;29431:4;29427:20;29423:1;29412:9;29408:17;29401:47;29465:131;29591:4;29465:131;:::i;:::-;29457:139;;29184:419;;;:::o;29609:239::-;29749:34;29745:1;29737:6;29733:14;29726:58;29818:22;29813:2;29805:6;29801:15;29794:47;29609:239;:::o;29854:366::-;29996:3;30017:67;30081:2;30076:3;30017:67;:::i;:::-;30010:74;;30093:93;30182:3;30093:93;:::i;:::-;30211:2;30206:3;30202:12;30195:19;;29854:366;;;:::o;30226:419::-;30392:4;30430:2;30419:9;30415:18;30407:26;;30479:9;30473:4;30469:20;30465:1;30454:9;30450:17;30443:47;30507:131;30633:4;30507:131;:::i;:::-;30499:139;;30226:419;;;:::o;30651:225::-;30791:34;30787:1;30779:6;30775:14;30768:58;30860:8;30855:2;30847:6;30843:15;30836:33;30651:225;:::o;30882:366::-;31024:3;31045:67;31109:2;31104:3;31045:67;:::i;:::-;31038:74;;31121:93;31210:3;31121:93;:::i;:::-;31239:2;31234:3;31230:12;31223:19;;30882:366;;;:::o;31254:419::-;31420:4;31458:2;31447:9;31443:18;31435:26;;31507:9;31501:4;31497:20;31493:1;31482:9;31478:17;31471:47;31535:131;31661:4;31535:131;:::i;:::-;31527:139;;31254:419;;;:::o;31679:223::-;31819:34;31815:1;31807:6;31803:14;31796:58;31888:6;31883:2;31875:6;31871:15;31864:31;31679:223;:::o;31908:366::-;32050:3;32071:67;32135:2;32130:3;32071:67;:::i;:::-;32064:74;;32147:93;32236:3;32147:93;:::i;:::-;32265:2;32260:3;32256:12;32249:19;;31908:366;;;:::o;32280:419::-;32446:4;32484:2;32473:9;32469:18;32461:26;;32533:9;32527:4;32523:20;32519:1;32508:9;32504:17;32497:47;32561:131;32687:4;32561:131;:::i;:::-;32553:139;;32280:419;;;:::o;32705:221::-;32845:34;32841:1;32833:6;32829:14;32822:58;32914:4;32909:2;32901:6;32897:15;32890:29;32705:221;:::o;32932:366::-;33074:3;33095:67;33159:2;33154:3;33095:67;:::i;:::-;33088:74;;33171:93;33260:3;33171:93;:::i;:::-;33289:2;33284:3;33280:12;33273:19;;32932:366;;;:::o;33304:419::-;33470:4;33508:2;33497:9;33493:18;33485:26;;33557:9;33551:4;33547:20;33543:1;33532:9;33528:17;33521:47;33585:131;33711:4;33585:131;:::i;:::-;33577:139;;33304:419;;;:::o;33729:224::-;33869:34;33865:1;33857:6;33853:14;33846:58;33938:7;33933:2;33925:6;33921:15;33914:32;33729:224;:::o;33959:366::-;34101:3;34122:67;34186:2;34181:3;34122:67;:::i;:::-;34115:74;;34198:93;34287:3;34198:93;:::i;:::-;34316:2;34311:3;34307:12;34300:19;;33959:366;;;:::o;34331:419::-;34497:4;34535:2;34524:9;34520:18;34512:26;;34584:9;34578:4;34574:20;34570:1;34559:9;34555:17;34548:47;34612:131;34738:4;34612:131;:::i;:::-;34604:139;;34331:419;;;:::o;34756:222::-;34896:34;34892:1;34884:6;34880:14;34873:58;34965:5;34960:2;34952:6;34948:15;34941:30;34756:222;:::o;34984:366::-;35126:3;35147:67;35211:2;35206:3;35147:67;:::i;:::-;35140:74;;35223:93;35312:3;35223:93;:::i;:::-;35341:2;35336:3;35332:12;35325:19;;34984:366;;;:::o;35356:419::-;35522:4;35560:2;35549:9;35545:18;35537:26;;35609:9;35603:4;35599:20;35595:1;35584:9;35580:17;35573:47;35637:131;35763:4;35637:131;:::i;:::-;35629:139;;35356:419;;;:::o;35781:167::-;35921:19;35917:1;35909:6;35905:14;35898:43;35781:167;:::o;35954:366::-;36096:3;36117:67;36181:2;36176:3;36117:67;:::i;:::-;36110:74;;36193:93;36282:3;36193:93;:::i;:::-;36311:2;36306:3;36302:12;36295:19;;35954:366;;;:::o;36326:419::-;36492:4;36530:2;36519:9;36515:18;36507:26;;36579:9;36573:4;36569:20;36565:1;36554:9;36550:17;36543:47;36607:131;36733:4;36607:131;:::i;:::-;36599:139;;36326:419;;;:::o;36751:165::-;36891:17;36887:1;36879:6;36875:14;36868:41;36751:165;:::o;36922:366::-;37064:3;37085:67;37149:2;37144:3;37085:67;:::i;:::-;37078:74;;37161:93;37250:3;37161:93;:::i;:::-;37279:2;37274:3;37270:12;37263:19;;36922:366;;;:::o;37294:419::-;37460:4;37498:2;37487:9;37483:18;37475:26;;37547:9;37541:4;37537:20;37533:1;37522:9;37518:17;37511:47;37575:131;37701:4;37575:131;:::i;:::-;37567:139;;37294:419;;;:::o;37719:172::-;37859:24;37855:1;37847:6;37843:14;37836:48;37719:172;:::o;37897:366::-;38039:3;38060:67;38124:2;38119:3;38060:67;:::i;:::-;38053:74;;38136:93;38225:3;38136:93;:::i;:::-;38254:2;38249:3;38245:12;38238:19;;37897:366;;;:::o;38269:419::-;38435:4;38473:2;38462:9;38458:18;38450:26;;38522:9;38516:4;38512:20;38508:1;38497:9;38493:17;38486:47;38550:131;38676:4;38550:131;:::i;:::-;38542:139;;38269:419;;;:::o;38694:234::-;38834:34;38830:1;38822:6;38818:14;38811:58;38903:17;38898:2;38890:6;38886:15;38879:42;38694:234;:::o;38934:366::-;39076:3;39097:67;39161:2;39156:3;39097:67;:::i;:::-;39090:74;;39173:93;39262:3;39173:93;:::i;:::-;39291:2;39286:3;39282:12;39275:19;;38934:366;;;:::o;39306:419::-;39472:4;39510:2;39499:9;39495:18;39487:26;;39559:9;39553:4;39549:20;39545:1;39534:9;39530:17;39523:47;39587:131;39713:4;39587:131;:::i;:::-;39579:139;;39306:419;;;:::o;39731:169::-;39871:21;39867:1;39859:6;39855:14;39848:45;39731:169;:::o;39906:366::-;40048:3;40069:67;40133:2;40128:3;40069:67;:::i;:::-;40062:74;;40145:93;40234:3;40145:93;:::i;:::-;40263:2;40258:3;40254:12;40247:19;;39906:366;;;:::o;40278:419::-;40444:4;40482:2;40471:9;40467:18;40459:26;;40531:9;40525:4;40521:20;40517:1;40506:9;40502:17;40495:47;40559:131;40685:4;40559:131;:::i;:::-;40551:139;;40278:419;;;:::o;40703:235::-;40843:34;40839:1;40831:6;40827:14;40820:58;40912:18;40907:2;40899:6;40895:15;40888:43;40703:235;:::o;40944:366::-;41086:3;41107:67;41171:2;41166:3;41107:67;:::i;:::-;41100:74;;41183:93;41272:3;41183:93;:::i;:::-;41301:2;41296:3;41292:12;41285:19;;40944:366;;;:::o;41316:419::-;41482:4;41520:2;41509:9;41505:18;41497:26;;41569:9;41563:4;41559:20;41555:1;41544:9;41540:17;41533:47;41597:131;41723:4;41597:131;:::i;:::-;41589:139;;41316:419;;;:::o;41741:137::-;41795:5;41826:6;41820:13;41811:22;;41842:30;41866:5;41842:30;:::i;:::-;41741:137;;;;:::o;41884:345::-;41951:6;42000:2;41988:9;41979:7;41975:23;41971:32;41968:119;;;42006:79;;:::i;:::-;41968:119;42126:1;42151:61;42204:7;42195:6;42184:9;42180:22;42151:61;:::i;:::-;42141:71;;42097:125;41884:345;;;;:::o;42235:775::-;42468:4;42506:3;42495:9;42491:19;42483:27;;42520:71;42588:1;42577:9;42573:17;42564:6;42520:71;:::i;:::-;42601:72;42669:2;42658:9;42654:18;42645:6;42601:72;:::i;:::-;42683;42751:2;42740:9;42736:18;42727:6;42683:72;:::i;:::-;42765;42833:2;42822:9;42818:18;42809:6;42765:72;:::i;:::-;42847:73;42915:3;42904:9;42900:19;42891:6;42847:73;:::i;:::-;42930;42998:3;42987:9;42983:19;42974:6;42930:73;:::i;:::-;42235:775;;;;;;;;;:::o;43016:170::-;43156:22;43152:1;43144:6;43140:14;43133:46;43016:170;:::o;43192:366::-;43334:3;43355:67;43419:2;43414:3;43355:67;:::i;:::-;43348:74;;43431:93;43520:3;43431:93;:::i;:::-;43549:2;43544:3;43540:12;43533:19;;43192:366;;;:::o;43564:419::-;43730:4;43768:2;43757:9;43753:18;43745:26;;43817:9;43811:4;43807:20;43803:1;43792:9;43788:17;43781:47;43845:131;43971:4;43845:131;:::i;:::-;43837:139;;43564:419;;;:::o;43989:191::-;44029:4;44049:20;44067:1;44049:20;:::i;:::-;44044:25;;44083:20;44101:1;44083:20;:::i;:::-;44078:25;;44122:1;44119;44116:8;44113:34;;;44127:18;;:::i;:::-;44113:34;44172:1;44169;44165:9;44157:17;;43989:191;;;;:::o;44186:180::-;44234:77;44231:1;44224:88;44331:4;44328:1;44321:15;44355:4;44352:1;44345:15;44372:143;44429:5;44460:6;44454:13;44445:22;;44476:33;44503:5;44476:33;:::i;:::-;44372:143;;;;:::o;44521:351::-;44591:6;44640:2;44628:9;44619:7;44615:23;44611:32;44608:119;;;44646:79;;:::i;:::-;44608:119;44766:1;44791:64;44847:7;44838:6;44827:9;44823:22;44791:64;:::i;:::-;44781:74;;44737:128;44521:351;;;;:::o;44878:85::-;44923:7;44952:5;44941:16;;44878:85;;;:::o;44969:158::-;45027:9;45060:61;45078:42;45087:32;45113:5;45087:32;:::i;:::-;45078:42;:::i;:::-;45060:61;:::i;:::-;45047:74;;44969:158;;;:::o;45133:147::-;45228:45;45267:5;45228:45;:::i;:::-;45223:3;45216:58;45133:147;;:::o;45286:114::-;45353:6;45387:5;45381:12;45371:22;;45286:114;;;:::o;45406:184::-;45505:11;45539:6;45534:3;45527:19;45579:4;45574:3;45570:14;45555:29;;45406:184;;;;:::o;45596:132::-;45663:4;45686:3;45678:11;;45716:4;45711:3;45707:14;45699:22;;45596:132;;;:::o;45734:108::-;45811:24;45829:5;45811:24;:::i;:::-;45806:3;45799:37;45734:108;;:::o;45848:179::-;45917:10;45938:46;45980:3;45972:6;45938:46;:::i;:::-;46016:4;46011:3;46007:14;45993:28;;45848:179;;;;:::o;46033:113::-;46103:4;46135;46130:3;46126:14;46118:22;;46033:113;;;:::o;46182:732::-;46301:3;46330:54;46378:5;46330:54;:::i;:::-;46400:86;46479:6;46474:3;46400:86;:::i;:::-;46393:93;;46510:56;46560:5;46510:56;:::i;:::-;46589:7;46620:1;46605:284;46630:6;46627:1;46624:13;46605:284;;;46706:6;46700:13;46733:63;46792:3;46777:13;46733:63;:::i;:::-;46726:70;;46819:60;46872:6;46819:60;:::i;:::-;46809:70;;46665:224;46652:1;46649;46645:9;46640:14;;46605:284;;;46609:14;46905:3;46898:10;;46306:608;;;46182:732;;;;:::o;46920:831::-;47183:4;47221:3;47210:9;47206:19;47198:27;;47235:71;47303:1;47292:9;47288:17;47279:6;47235:71;:::i;:::-;47316:80;47392:2;47381:9;47377:18;47368:6;47316:80;:::i;:::-;47443:9;47437:4;47433:20;47428:2;47417:9;47413:18;47406:48;47471:108;47574:4;47565:6;47471:108;:::i;:::-;47463:116;;47589:72;47657:2;47646:9;47642:18;47633:6;47589:72;:::i;:::-;47671:73;47739:3;47728:9;47724:19;47715:6;47671:73;:::i;:::-;46920:831;;;;;;;;:::o;47757:225::-;47897:34;47893:1;47885:6;47881:14;47874:58;47966:8;47961:2;47953:6;47949:15;47942:33;47757:225;:::o;47988:366::-;48130:3;48151:67;48215:2;48210:3;48151:67;:::i;:::-;48144:74;;48227:93;48316:3;48227:93;:::i;:::-;48345:2;48340:3;48336:12;48329:19;;47988:366;;;:::o;48360:419::-;48526:4;48564:2;48553:9;48549:18;48541:26;;48613:9;48607:4;48603:20;48599:1;48588:9;48584:17;48577:47;48641:131;48767:4;48641:131;:::i;:::-;48633:139;;48360:419;;;:::o

Swarm Source

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