ETH Price: $3,686.66 (+2.65%)

Token

ERC-20: FWOG (FWOG)
 

Overview

Max Total Supply

420,690,000,000,000 FWOG

Holders

1,311

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000735887 FWOG

Value
$0.00
0x1ad07f5297fcbce183c0e26f58216c9d6047fb25
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:
FWOG

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-07-30
*/

/**
 
https://t.me/FWOGeth
https://x.com/FWOGeth

*/

//  SPDX-License-Identifier: MIT
pragma solidity >=0.8.19;

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

}

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

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {

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

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

    function decimals() external view returns (uint8);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

library SafeMath {

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

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

contract FWOG is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    address public lpWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event LimitsRemoved();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event lpWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("FWOG", "FWOG") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 20;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 20;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 420_690_000_000_000 * 1e18;

        maxTransactionAmount = 2_524_140_000_000 * 1e18;
        maxWallet = 2_524_140_000_000 *1e18;
        swapTokensAtAmount = 420_690_000_000 * 1e18; // 0.1% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = msg.sender; 
        devWallet = msg.sender;
        lpWallet = msg.sender;

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(marketingWallet, true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        emit LimitsRemoved();
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    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 updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

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

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        uint256 totalFees = _marketingFee + _liquidityFee + _devFee;
        require(totalFees <= 20, "Total fee cannot exceed 20%");
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
         uint256 totalFees = _marketingFee + _liquidityFee + _devFee;
        require(totalFees <= 20, "Total fee cannot exceed 20%");
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

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

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateLPWallet(address newLPWallet)
        external
        onlyOwner
    {
        emit lpWalletUpdated(newLPWallet, lpWallet);
        lpWallet = newLPWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    event BoughtEarly(address indexed sniper);

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

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

        if (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 (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            lpWallet,
            block.timestamp
        );
    }

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

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

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

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

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"lpWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","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"}]

60c06040526001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff0219169083151502179055503480156200005e575f80fd5b506040518060400160405280600481526020017f46574f47000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f46574f47000000000000000000000000000000000000000000000000000000008152508160039081620000dc919062000d67565b508060049081620000ee919062000d67565b5050506200011162000105620005db60201b60201c565b620005e260201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506200013c816001620006a560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e0919062000eb0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000246573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200026c919062000eb0565b6040518363ffffffff1660e01b81526004016200028b92919062000ef1565b6020604051808303815f875af1158015620002a8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ce919062000eb0565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200031660a0516001620006a560201b60201c565b6200032b60a05160016200078c60201b60201c565b5f601490505f805f601490505f805f6d14bddab3e51a57cff87a5000000090506c1fdbefabdee0c86a736c0000006009819055506c1fdbefabdee0c86a736c000000600b819055506c054f529ca52576bc6892000000600a8190555086600e8190555085600f8190555084601081905550601054600f54600e54620003b1919062000f49565b620003bd919062000f49565b600d81905550836012819055508260138190555081601481905550601454601354601254620003ed919062000f49565b620003f9919062000f49565b6011819055503360065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004e1620004d36200082a60201b60201c565b60016200085260201b60201c565b620004f43060016200085260201b60201c565b6200050961dead60016200085260201b60201c565b6200053d60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200085260201b60201c565b6200055f620005516200082a60201b60201c565b6001620006a560201b60201c565b62000572306001620006a560201b60201c565b6200058761dead6001620006a560201b60201c565b620005bb60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006a560201b60201c565b620005cd33826200098960201b60201c565b5050505050505050620010d2565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006b5620005db60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006db6200082a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000734576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200072b9062000fe1565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000862620005db60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008886200082a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d89062000fe1565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200097d91906200101d565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f19062001086565b60405180910390fd5b62000a0d5f838362000af960201b60201c565b8060025f82825462000a20919062000f49565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000a74919062000f49565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ada9190620010b7565b60405180910390a362000af55f838362000afe60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b7f57607f821691505b60208210810362000b955762000b9462000b3a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000bf97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bbc565b62000c05868362000bbc565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000c4f62000c4962000c438462000c1d565b62000c26565b62000c1d565b9050919050565b5f819050919050565b62000c6a8362000c2f565b62000c8262000c798262000c56565b84845462000bc8565b825550505050565b5f90565b62000c9862000c8a565b62000ca581848462000c5f565b505050565b5b8181101562000ccc5762000cc05f8262000c8e565b60018101905062000cab565b5050565b601f82111562000d1b5762000ce58162000b9b565b62000cf08462000bad565b8101602085101562000d00578190505b62000d1862000d0f8562000bad565b83018262000caa565b50505b505050565b5f82821c905092915050565b5f62000d3d5f198460080262000d20565b1980831691505092915050565b5f62000d57838362000d2c565b9150826002028217905092915050565b62000d728262000b03565b67ffffffffffffffff81111562000d8e5762000d8d62000b0d565b5b62000d9a825462000b67565b62000da782828562000cd0565b5f60209050601f83116001811462000ddd575f841562000dc8578287015190505b62000dd4858262000d4a565b86555062000e43565b601f19841662000ded8662000b9b565b5f5b8281101562000e165784890151825560018201915060208501945060208101905062000def565b8683101562000e36578489015162000e32601f89168262000d2c565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000e7a8262000e4f565b9050919050565b62000e8c8162000e6e565b811462000e97575f80fd5b50565b5f8151905062000eaa8162000e81565b92915050565b5f6020828403121562000ec85762000ec762000e4b565b5b5f62000ed78482850162000e9a565b91505092915050565b62000eeb8162000e6e565b82525050565b5f60408201905062000f065f83018562000ee0565b62000f15602083018462000ee0565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f558262000c1d565b915062000f628362000c1d565b925082820190508082111562000f7d5762000f7c62000f1c565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000fc960208362000f83565b915062000fd68262000f93565b602082019050919050565b5f6020820190508181035f83015262000ffa8162000fbb565b9050919050565b5f8115159050919050565b620010178162001001565b82525050565b5f602082019050620010325f8301846200100c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6200106e601f8362000f83565b91506200107b8262001038565b602082019050919050565b5f6020820190508181035f8301526200109f8162001060565b9050919050565b620010b18162000c1d565b82525050565b5f602082019050620010cc5f830184620010a6565b92915050565b60805160a051614cca6200111e5f395f818161119a01526118b801525f8181610d7101528181613701015281816137e0015281816138070152818161389d01526138c40152614cca5ff3fe608060405260043610610338575f3560e01c80638da5cb5b116101aa578063bbc0c742116100f6578063dd62ed3e11610094578063f2fde38b1161006e578063f2fde38b14610c01578063f637434214610c29578063f8b45b0514610c53578063fbc10c5514610c7d5761033f565b8063dd62ed3e14610b71578063e2f4560514610bad578063f11a24d314610bd75761033f565b8063c18bc195116100d0578063c18bc19514610ab9578063c8c8ebe414610ae1578063d257b34f14610b0b578063d85ba06314610b475761033f565b8063bbc0c74214610a3f578063c024666814610a69578063c17b5b8c14610a915761033f565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d714610963578063a9059cbb1461099f578063aacebbe3146109db578063b62496f514610a035761033f565b80639c3b4fdc146108e55780639fccce321461090f578063a0d82dc5146109395761033f565b80638da5cb5b146107ed5780638ea5220f146108175780639213691314610841578063924de9b71461086b57806395d89b41146108935780639a7a23d6146108bd5761033f565b806349bd5a5e11610284578063715018a61161022257806375f0a874116101fc57806375f0a8741461075b5780637bce5a04146107855780638095d564146107af5780638a8c523c146107d75761033f565b8063715018a6146106f3578063751039fc146107095780637571336a146107335761033f565b80636303516c1161025e5780636303516c146106395780636a486a8e146106635780636ddd17131461068d57806370a08231146106b75761033f565b806349bd5a5e146105a95780634a62bb65146105d35780634fbee193146105fd5761033f565b80631a8145bb116102f157806323b872dd116102cb57806323b872dd146104dd57806327c8f83514610519578063313ce56714610543578063395093511461056d5761033f565b80631a8145bb146104615780631f3fed8f1461048b578063203e727e146104b55761033f565b806306fdde0314610343578063095ea7b31461036d57806310d5de53146103a95780631694505e146103e557806318160ddd1461040f5780631816467f146104395761033f565b3661033f57005b5f80fd5b34801561034e575f80fd5b50610357610ca5565b6040516103649190613a19565b60405180910390f35b348015610378575f80fd5b50610393600480360381019061038e9190613aca565b610d35565b6040516103a09190613b22565b60405180910390f35b3480156103b4575f80fd5b506103cf60048036038101906103ca9190613b3b565b610d52565b6040516103dc9190613b22565b60405180910390f35b3480156103f0575f80fd5b506103f9610d6f565b6040516104069190613bc1565b60405180910390f35b34801561041a575f80fd5b50610423610d93565b6040516104309190613be9565b60405180910390f35b348015610444575f80fd5b5061045f600480360381019061045a9190613b3b565b610d9c565b005b34801561046c575f80fd5b50610475610ed6565b6040516104829190613be9565b60405180910390f35b348015610496575f80fd5b5061049f610edc565b6040516104ac9190613be9565b60405180910390f35b3480156104c0575f80fd5b506104db60048036038101906104d69190613c02565b610ee2565b005b3480156104e8575f80fd5b5061050360048036038101906104fe9190613c2d565b610ff1565b6040516105109190613b22565b60405180910390f35b348015610524575f80fd5b5061052d6110e3565b60405161053a9190613c8c565b60405180910390f35b34801561054e575f80fd5b506105576110e9565b6040516105649190613cc0565b60405180910390f35b348015610578575f80fd5b50610593600480360381019061058e9190613aca565b6110f1565b6040516105a09190613b22565b60405180910390f35b3480156105b4575f80fd5b506105bd611198565b6040516105ca9190613c8c565b60405180910390f35b3480156105de575f80fd5b506105e76111bc565b6040516105f49190613b22565b60405180910390f35b348015610608575f80fd5b50610623600480360381019061061e9190613b3b565b6111ce565b6040516106309190613b22565b60405180910390f35b348015610644575f80fd5b5061064d611220565b60405161065a9190613c8c565b60405180910390f35b34801561066e575f80fd5b50610677611245565b6040516106849190613be9565b60405180910390f35b348015610698575f80fd5b506106a161124b565b6040516106ae9190613b22565b60405180910390f35b3480156106c2575f80fd5b506106dd60048036038101906106d89190613b3b565b61125e565b6040516106ea9190613be9565b60405180910390f35b3480156106fe575f80fd5b506107076112a3565b005b348015610714575f80fd5b5061071d61132a565b60405161072a9190613b22565b60405180910390f35b34801561073e575f80fd5b5061075960048036038101906107549190613d03565b6113f3565b005b348015610766575f80fd5b5061076f6114c7565b60405161077c9190613c8c565b60405180910390f35b348015610790575f80fd5b506107996114ec565b6040516107a69190613be9565b60405180910390f35b3480156107ba575f80fd5b506107d560048036038101906107d09190613d41565b6114f2565b005b3480156107e2575f80fd5b506107eb61160a565b005b3480156107f8575f80fd5b506108016116be565b60405161080e9190613c8c565b60405180910390f35b348015610822575f80fd5b5061082b6116e6565b6040516108389190613c8c565b60405180910390f35b34801561084c575f80fd5b5061085561170b565b6040516108629190613be9565b60405180910390f35b348015610876575f80fd5b50610891600480360381019061088c9190613d91565b611711565b005b34801561089e575f80fd5b506108a76117aa565b6040516108b49190613a19565b60405180910390f35b3480156108c8575f80fd5b506108e360048036038101906108de9190613d03565b61183a565b005b3480156108f0575f80fd5b506108f9611952565b6040516109069190613be9565b60405180910390f35b34801561091a575f80fd5b50610923611958565b6040516109309190613be9565b60405180910390f35b348015610944575f80fd5b5061094d61195e565b60405161095a9190613be9565b60405180910390f35b34801561096e575f80fd5b5061098960048036038101906109849190613aca565b611964565b6040516109969190613b22565b60405180910390f35b3480156109aa575f80fd5b506109c560048036038101906109c09190613aca565b611a4a565b6040516109d29190613b22565b60405180910390f35b3480156109e6575f80fd5b50610a0160048036038101906109fc9190613b3b565b611a67565b005b348015610a0e575f80fd5b50610a296004803603810190610a249190613b3b565b611ba1565b604051610a369190613b22565b60405180910390f35b348015610a4a575f80fd5b50610a53611bbe565b604051610a609190613b22565b60405180910390f35b348015610a74575f80fd5b50610a8f6004803603810190610a8a9190613d03565b611bd1565b005b348015610a9c575f80fd5b50610ab76004803603810190610ab29190613d41565b611cf3565b005b348015610ac4575f80fd5b50610adf6004803603810190610ada9190613c02565b611e0b565b005b348015610aec575f80fd5b50610af5611f1a565b604051610b029190613be9565b60405180910390f35b348015610b16575f80fd5b50610b316004803603810190610b2c9190613c02565b611f20565b604051610b3e9190613b22565b60405180910390f35b348015610b52575f80fd5b50610b5b612074565b604051610b689190613be9565b60405180910390f35b348015610b7c575f80fd5b50610b976004803603810190610b929190613dbc565b61207a565b604051610ba49190613be9565b60405180910390f35b348015610bb8575f80fd5b50610bc16120fc565b604051610bce9190613be9565b60405180910390f35b348015610be2575f80fd5b50610beb612102565b604051610bf89190613be9565b60405180910390f35b348015610c0c575f80fd5b50610c276004803603810190610c229190613b3b565b612108565b005b348015610c34575f80fd5b50610c3d6121fe565b604051610c4a9190613be9565b60405180910390f35b348015610c5e575f80fd5b50610c67612204565b604051610c749190613be9565b60405180910390f35b348015610c88575f80fd5b50610ca36004803603810190610c9e9190613b3b565b61220a565b005b606060038054610cb490613e27565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce090613e27565b8015610d2b5780601f10610d0257610100808354040283529160200191610d2b565b820191905f5260205f20905b815481529060010190602001808311610d0e57829003601f168201915b5050505050905090565b5f610d48610d41612344565b848461234b565b6001905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610da4612344565b73ffffffffffffffffffffffffffffffffffffffff16610dc26116be565b73ffffffffffffffffffffffffffffffffffffffff1614610e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0f90613ea1565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60155481565b610eea612344565b73ffffffffffffffffffffffffffffffffffffffff16610f086116be565b73ffffffffffffffffffffffffffffffffffffffff1614610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5590613ea1565b60405180910390fd5b670de0b6b3a76400006103e86001610f74610d93565b610f7e9190613eec565b610f889190613f5a565b610f929190613f5a565b811015610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90613ffa565b60405180910390fd5b670de0b6b3a764000081610fe89190613eec565b60098190555050565b5f610ffd84848461250e565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f611044612344565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90614088565b60405180910390fd5b6110d7856110cf612344565b85840361234b565b60019150509392505050565b61dead81565b5f6012905090565b5f61118e6110fd612344565b848460015f61110a612344565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461118991906140a6565b61234b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112ab612344565b73ffffffffffffffffffffffffffffffffffffffff166112c96116be565b73ffffffffffffffffffffffffffffffffffffffff161461131f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131690613ea1565b60405180910390fd5b6113285f612f9e565b565b5f611333612344565b73ffffffffffffffffffffffffffffffffffffffff166113516116be565b73ffffffffffffffffffffffffffffffffffffffff16146113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e90613ea1565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b6113fb612344565b73ffffffffffffffffffffffffffffffffffffffff166114196116be565b73ffffffffffffffffffffffffffffffffffffffff161461146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690613ea1565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6114fa612344565b73ffffffffffffffffffffffffffffffffffffffff166115186116be565b73ffffffffffffffffffffffffffffffffffffffff161461156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156590613ea1565b60405180910390fd5b5f81838561157c91906140a6565b61158691906140a6565b905060148111156115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390614123565b60405180910390fd5b83600e8190555082600f8190555081601081905550601054600f54600e546115f491906140a6565b6115fe91906140a6565b600d8190555050505050565b611612612344565b73ffffffffffffffffffffffffffffffffffffffff166116306116be565b73ffffffffffffffffffffffffffffffffffffffff1614611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d90613ea1565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b611719612344565b73ffffffffffffffffffffffffffffffffffffffff166117376116be565b73ffffffffffffffffffffffffffffffffffffffff161461178d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178490613ea1565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546117b990613e27565b80601f01602080910402602001604051908101604052809291908181526020018280546117e590613e27565b80156118305780601f1061180757610100808354040283529160200191611830565b820191905f5260205f20905b81548152906001019060200180831161181357829003601f168201915b5050505050905090565b611842612344565b73ffffffffffffffffffffffffffffffffffffffff166118606116be565b73ffffffffffffffffffffffffffffffffffffffff16146118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90613ea1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b906141b1565b60405180910390fd5b61194e8282613061565b5050565b60105481565b60175481565b60145481565b5f8060015f611971612344565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a229061423f565b60405180910390fd5b611a3f611a36612344565b8585840361234b565b600191505092915050565b5f611a5d611a56612344565b848461250e565b6001905092915050565b611a6f612344565b73ffffffffffffffffffffffffffffffffffffffff16611a8d6116be565b73ffffffffffffffffffffffffffffffffffffffff1614611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90613ea1565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611bd9612344565b73ffffffffffffffffffffffffffffffffffffffff16611bf76116be565b73ffffffffffffffffffffffffffffffffffffffff1614611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490613ea1565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ce79190613b22565b60405180910390a25050565b611cfb612344565b73ffffffffffffffffffffffffffffffffffffffff16611d196116be565b73ffffffffffffffffffffffffffffffffffffffff1614611d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6690613ea1565b60405180910390fd5b5f818385611d7d91906140a6565b611d8791906140a6565b90506014811115611dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc490614123565b60405180910390fd5b836012819055508260138190555081601481905550601454601354601254611df591906140a6565b611dff91906140a6565b60118190555050505050565b611e13612344565b73ffffffffffffffffffffffffffffffffffffffff16611e316116be565b73ffffffffffffffffffffffffffffffffffffffff1614611e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e90613ea1565b60405180910390fd5b670de0b6b3a76400006103e86005611e9d610d93565b611ea79190613eec565b611eb19190613f5a565b611ebb9190613f5a565b811015611efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef4906142cd565b60405180910390fd5b670de0b6b3a764000081611f119190613eec565b600b8190555050565b60095481565b5f611f29612344565b73ffffffffffffffffffffffffffffffffffffffff16611f476116be565b73ffffffffffffffffffffffffffffffffffffffff1614611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490613ea1565b60405180910390fd5b620186a06001611fab610d93565b611fb59190613eec565b611fbf9190613f5a565b821015612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff89061435b565b60405180910390fd5b6103e8600561200e610d93565b6120189190613eec565b6120229190613f5a565b821115612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b906143e9565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b600f5481565b612110612344565b73ffffffffffffffffffffffffffffffffffffffff1661212e6116be565b73ffffffffffffffffffffffffffffffffffffffff1614612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b90613ea1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e990614477565b60405180910390fd5b6121fb81612f9e565b50565b60135481565b600b5481565b612212612344565b73ffffffffffffffffffffffffffffffffffffffff166122306116be565b73ffffffffffffffffffffffffffffffffffffffff1614612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d90613ea1565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b090614505565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241e90614593565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125019190613be9565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390614621565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e1906146af565b60405180910390fd5b5f8103612601576125fc83835f6130ff565b612f99565b600c5f9054906101000a900460ff1615612ae55761261d6116be565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561268b575061265b6116be565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126c357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126fd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127165750600560149054906101000a900460ff16155b15612ae457600c60019054906101000a900460ff1661280a5760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127ca575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280090614717565b60405180910390fd5b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128a7575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561294e576009548111156128f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e8906147a5565b60405180910390fd5b600b546128fd8361125e565b8261290891906140a6565b1115612949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129409061480d565b60405180910390fd5b612ae3565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129eb575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a3a57600954811115612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c9061489b565b60405180910390fd5b612ae2565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612ae157600b54612a948361125e565b82612a9f91906140a6565b1115612ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad79061480d565b60405180910390fd5b5b5b5b5b5b5f612aef3061125e565b90505f600a548210159050808015612b135750600c60029054906101000a900460ff165b8015612b2c5750600560149054906101000a900460ff16155b8015612b7f5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612bd2575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c25575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c68576001600560146101000a81548160ff021916908315150217905550612c4d613374565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d17575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d20575f90505b5f8115612f8957601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d7e57505f601154115b15612e4857612dab6064612d9d6011548861361b90919063ffffffff16565b61363090919063ffffffff16565b905060115460135482612dbe9190613eec565b612dc89190613f5a565b60165f828254612dd891906140a6565b9250508190555060115460145482612df09190613eec565b612dfa9190613f5a565b60175f828254612e0a91906140a6565b9250508190555060115460125482612e229190613eec565b612e2c9190613f5a565b60155f828254612e3c91906140a6565b92505081905550612f66565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e9f57505f600d54115b15612f6557612ecc6064612ebe600d548861361b90919063ffffffff16565b61363090919063ffffffff16565b9050600d54600f5482612edf9190613eec565b612ee99190613f5a565b60165f828254612ef991906140a6565b92505081905550600d5460105482612f119190613eec565b612f1b9190613f5a565b60175f828254612f2b91906140a6565b92505081905550600d54600e5482612f439190613eec565b612f4d9190613f5a565b60155f828254612f5d91906140a6565b925050819055505b5b5f811115612f7a57612f798730836130ff565b5b8085612f8691906148b9565b94505b612f948787876130ff565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361316d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316490614621565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d2906146af565b60405180910390fd5b6131e6838383613645565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132609061495c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132f791906140a6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161335b9190613be9565b60405180910390a361336e84848461364a565b50505050565b5f61337e3061125e565b90505f60175460155460165461339491906140a6565b61339e91906140a6565b90505f808314806133ae57505f82145b156133bb57505050613619565b5f600283601654866133cd9190613eec565b6133d79190613f5a565b6133e19190613f5a565b90505f6133f7828661364f90919063ffffffff16565b90505f47905061340682613664565b5f61341a824761364f90919063ffffffff16565b90505f613444876134366015548561361b90919063ffffffff16565b61363090919063ffffffff16565b90505f61346e886134606017548661361b90919063ffffffff16565b61363090919063ffffffff16565b90505f81838561347e91906148b9565b61348891906148b9565b90505f6016819055505f6015819055505f60178190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516134e4906149a7565b5f6040518083038185875af1925050503d805f811461351e576040519150601f19603f3d011682016040523d82523d5f602084013e613523565b606091505b5050809850505f8711801561353757505f81115b15613584576135468782613897565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260165460405161357b939291906149bb565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135c9906149a7565b5f6040518083038185875af1925050503d805f8114613603576040519150601f19603f3d011682016040523d82523d5f602084013e613608565b606091505b505080985050505050505050505050505b565b5f81836136289190613eec565b905092915050565b5f818361363d9190613f5a565b905092915050565b505050565b505050565b5f818361365c91906148b9565b905092915050565b5f600267ffffffffffffffff8111156136805761367f6149f0565b5b6040519080825280602002602001820160405280156136ae5781602001602082028036833780820191505090505b50905030815f815181106136c5576136c4614a1d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613768573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061378c9190614a5e565b816001815181106137a05761379f614a1d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613805307f00000000000000000000000000000000000000000000000000000000000000008461234b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613866959493929190614b79565b5f604051808303815f87803b15801561387d575f80fd5b505af115801561388f573d5f803e3d5ffd5b505050505050565b6138c2307f00000000000000000000000000000000000000000000000000000000000000008461234b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161394796959493929190614bd1565b60606040518083038185885af1158015613963573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906139889190614c44565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156139c65780820151818401526020810190506139ab565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6139eb8261398f565b6139f58185613999565b9350613a058185602086016139a9565b613a0e816139d1565b840191505092915050565b5f6020820190508181035f830152613a3181846139e1565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613a6682613a3d565b9050919050565b613a7681613a5c565b8114613a80575f80fd5b50565b5f81359050613a9181613a6d565b92915050565b5f819050919050565b613aa981613a97565b8114613ab3575f80fd5b50565b5f81359050613ac481613aa0565b92915050565b5f8060408385031215613ae057613adf613a39565b5b5f613aed85828601613a83565b9250506020613afe85828601613ab6565b9150509250929050565b5f8115159050919050565b613b1c81613b08565b82525050565b5f602082019050613b355f830184613b13565b92915050565b5f60208284031215613b5057613b4f613a39565b5b5f613b5d84828501613a83565b91505092915050565b5f819050919050565b5f613b89613b84613b7f84613a3d565b613b66565b613a3d565b9050919050565b5f613b9a82613b6f565b9050919050565b5f613bab82613b90565b9050919050565b613bbb81613ba1565b82525050565b5f602082019050613bd45f830184613bb2565b92915050565b613be381613a97565b82525050565b5f602082019050613bfc5f830184613bda565b92915050565b5f60208284031215613c1757613c16613a39565b5b5f613c2484828501613ab6565b91505092915050565b5f805f60608486031215613c4457613c43613a39565b5b5f613c5186828701613a83565b9350506020613c6286828701613a83565b9250506040613c7386828701613ab6565b9150509250925092565b613c8681613a5c565b82525050565b5f602082019050613c9f5f830184613c7d565b92915050565b5f60ff82169050919050565b613cba81613ca5565b82525050565b5f602082019050613cd35f830184613cb1565b92915050565b613ce281613b08565b8114613cec575f80fd5b50565b5f81359050613cfd81613cd9565b92915050565b5f8060408385031215613d1957613d18613a39565b5b5f613d2685828601613a83565b9250506020613d3785828601613cef565b9150509250929050565b5f805f60608486031215613d5857613d57613a39565b5b5f613d6586828701613ab6565b9350506020613d7686828701613ab6565b9250506040613d8786828701613ab6565b9150509250925092565b5f60208284031215613da657613da5613a39565b5b5f613db384828501613cef565b91505092915050565b5f8060408385031215613dd257613dd1613a39565b5b5f613ddf85828601613a83565b9250506020613df085828601613a83565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613e3e57607f821691505b602082108103613e5157613e50613dfa565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613e8b602083613999565b9150613e9682613e57565b602082019050919050565b5f6020820190508181035f830152613eb881613e7f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ef682613a97565b9150613f0183613a97565b9250828202613f0f81613a97565b91508282048414831517613f2657613f25613ebf565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f6482613a97565b9150613f6f83613a97565b925082613f7f57613f7e613f2d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613fe4602f83613999565b9150613fef82613f8a565b604082019050919050565b5f6020820190508181035f83015261401181613fd8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614072602883613999565b915061407d82614018565b604082019050919050565b5f6020820190508181035f83015261409f81614066565b9050919050565b5f6140b082613a97565b91506140bb83613a97565b92508282019050808211156140d3576140d2613ebf565b5b92915050565b7f546f74616c206665652063616e6e6f74206578636565642032302500000000005f82015250565b5f61410d601b83613999565b9150614118826140d9565b602082019050919050565b5f6020820190508181035f83015261413a81614101565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61419b603983613999565b91506141a682614141565b604082019050919050565b5f6020820190508181035f8301526141c88161418f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614229602583613999565b9150614234826141cf565b604082019050919050565b5f6020820190508181035f8301526142568161421d565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6142b7602483613999565b91506142c28261425d565b604082019050919050565b5f6020820190508181035f8301526142e4816142ab565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614345603583613999565b9150614350826142eb565b604082019050919050565b5f6020820190508181035f83015261437281614339565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6143d3603483613999565b91506143de82614379565b604082019050919050565b5f6020820190508181035f830152614400816143c7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614461602683613999565b915061446c82614407565b604082019050919050565b5f6020820190508181035f83015261448e81614455565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6144ef602483613999565b91506144fa82614495565b604082019050919050565b5f6020820190508181035f83015261451c816144e3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61457d602283613999565b915061458882614523565b604082019050919050565b5f6020820190508181035f8301526145aa81614571565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61460b602583613999565b9150614616826145b1565b604082019050919050565b5f6020820190508181035f830152614638816145ff565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614699602383613999565b91506146a48261463f565b604082019050919050565b5f6020820190508181035f8301526146c68161468d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614701601683613999565b915061470c826146cd565b602082019050919050565b5f6020820190508181035f83015261472e816146f5565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61478f603583613999565b915061479a82614735565b604082019050919050565b5f6020820190508181035f8301526147bc81614783565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6147f7601383613999565b9150614802826147c3565b602082019050919050565b5f6020820190508181035f830152614824816147eb565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614885603683613999565b91506148908261482b565b604082019050919050565b5f6020820190508181035f8301526148b281614879565b9050919050565b5f6148c382613a97565b91506148ce83613a97565b92508282039050818111156148e6576148e5613ebf565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614946602683613999565b9150614951826148ec565b604082019050919050565b5f6020820190508181035f8301526149738161493a565b9050919050565b5f81905092915050565b50565b5f6149925f8361497a565b915061499d82614984565b5f82019050919050565b5f6149b182614987565b9150819050919050565b5f6060820190506149ce5f830186613bda565b6149db6020830185613bda565b6149e86040830184613bda565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614a5881613a6d565b92915050565b5f60208284031215614a7357614a72613a39565b5b5f614a8084828501614a4a565b91505092915050565b5f819050919050565b5f614aac614aa7614aa284614a89565b613b66565b613a97565b9050919050565b614abc81614a92565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614af481613a5c565b82525050565b5f614b058383614aeb565b60208301905092915050565b5f602082019050919050565b5f614b2782614ac2565b614b318185614acc565b9350614b3c83614adc565b805f5b83811015614b6c578151614b538882614afa565b9750614b5e83614b11565b925050600181019050614b3f565b5085935050505092915050565b5f60a082019050614b8c5f830188613bda565b614b996020830187614ab3565b8181036040830152614bab8186614b1d565b9050614bba6060830185613c7d565b614bc76080830184613bda565b9695505050505050565b5f60c082019050614be45f830189613c7d565b614bf16020830188613bda565b614bfe6040830187614ab3565b614c0b6060830186614ab3565b614c186080830185613c7d565b614c2560a0830184613bda565b979650505050505050565b5f81519050614c3e81613aa0565b92915050565b5f805f60608486031215614c5b57614c5a613a39565b5b5f614c6886828701614c30565b9350506020614c7986828701614c30565b9250506040614c8a86828701614c30565b915050925092509256fea264697066735822122009bc07ab3d18de750b2d12e9ce261030ad70030ba2f51d3c0f4c2a855075bbd364736f6c63430008170033

Deployed Bytecode

0x608060405260043610610338575f3560e01c80638da5cb5b116101aa578063bbc0c742116100f6578063dd62ed3e11610094578063f2fde38b1161006e578063f2fde38b14610c01578063f637434214610c29578063f8b45b0514610c53578063fbc10c5514610c7d5761033f565b8063dd62ed3e14610b71578063e2f4560514610bad578063f11a24d314610bd75761033f565b8063c18bc195116100d0578063c18bc19514610ab9578063c8c8ebe414610ae1578063d257b34f14610b0b578063d85ba06314610b475761033f565b8063bbc0c74214610a3f578063c024666814610a69578063c17b5b8c14610a915761033f565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d714610963578063a9059cbb1461099f578063aacebbe3146109db578063b62496f514610a035761033f565b80639c3b4fdc146108e55780639fccce321461090f578063a0d82dc5146109395761033f565b80638da5cb5b146107ed5780638ea5220f146108175780639213691314610841578063924de9b71461086b57806395d89b41146108935780639a7a23d6146108bd5761033f565b806349bd5a5e11610284578063715018a61161022257806375f0a874116101fc57806375f0a8741461075b5780637bce5a04146107855780638095d564146107af5780638a8c523c146107d75761033f565b8063715018a6146106f3578063751039fc146107095780637571336a146107335761033f565b80636303516c1161025e5780636303516c146106395780636a486a8e146106635780636ddd17131461068d57806370a08231146106b75761033f565b806349bd5a5e146105a95780634a62bb65146105d35780634fbee193146105fd5761033f565b80631a8145bb116102f157806323b872dd116102cb57806323b872dd146104dd57806327c8f83514610519578063313ce56714610543578063395093511461056d5761033f565b80631a8145bb146104615780631f3fed8f1461048b578063203e727e146104b55761033f565b806306fdde0314610343578063095ea7b31461036d57806310d5de53146103a95780631694505e146103e557806318160ddd1461040f5780631816467f146104395761033f565b3661033f57005b5f80fd5b34801561034e575f80fd5b50610357610ca5565b6040516103649190613a19565b60405180910390f35b348015610378575f80fd5b50610393600480360381019061038e9190613aca565b610d35565b6040516103a09190613b22565b60405180910390f35b3480156103b4575f80fd5b506103cf60048036038101906103ca9190613b3b565b610d52565b6040516103dc9190613b22565b60405180910390f35b3480156103f0575f80fd5b506103f9610d6f565b6040516104069190613bc1565b60405180910390f35b34801561041a575f80fd5b50610423610d93565b6040516104309190613be9565b60405180910390f35b348015610444575f80fd5b5061045f600480360381019061045a9190613b3b565b610d9c565b005b34801561046c575f80fd5b50610475610ed6565b6040516104829190613be9565b60405180910390f35b348015610496575f80fd5b5061049f610edc565b6040516104ac9190613be9565b60405180910390f35b3480156104c0575f80fd5b506104db60048036038101906104d69190613c02565b610ee2565b005b3480156104e8575f80fd5b5061050360048036038101906104fe9190613c2d565b610ff1565b6040516105109190613b22565b60405180910390f35b348015610524575f80fd5b5061052d6110e3565b60405161053a9190613c8c565b60405180910390f35b34801561054e575f80fd5b506105576110e9565b6040516105649190613cc0565b60405180910390f35b348015610578575f80fd5b50610593600480360381019061058e9190613aca565b6110f1565b6040516105a09190613b22565b60405180910390f35b3480156105b4575f80fd5b506105bd611198565b6040516105ca9190613c8c565b60405180910390f35b3480156105de575f80fd5b506105e76111bc565b6040516105f49190613b22565b60405180910390f35b348015610608575f80fd5b50610623600480360381019061061e9190613b3b565b6111ce565b6040516106309190613b22565b60405180910390f35b348015610644575f80fd5b5061064d611220565b60405161065a9190613c8c565b60405180910390f35b34801561066e575f80fd5b50610677611245565b6040516106849190613be9565b60405180910390f35b348015610698575f80fd5b506106a161124b565b6040516106ae9190613b22565b60405180910390f35b3480156106c2575f80fd5b506106dd60048036038101906106d89190613b3b565b61125e565b6040516106ea9190613be9565b60405180910390f35b3480156106fe575f80fd5b506107076112a3565b005b348015610714575f80fd5b5061071d61132a565b60405161072a9190613b22565b60405180910390f35b34801561073e575f80fd5b5061075960048036038101906107549190613d03565b6113f3565b005b348015610766575f80fd5b5061076f6114c7565b60405161077c9190613c8c565b60405180910390f35b348015610790575f80fd5b506107996114ec565b6040516107a69190613be9565b60405180910390f35b3480156107ba575f80fd5b506107d560048036038101906107d09190613d41565b6114f2565b005b3480156107e2575f80fd5b506107eb61160a565b005b3480156107f8575f80fd5b506108016116be565b60405161080e9190613c8c565b60405180910390f35b348015610822575f80fd5b5061082b6116e6565b6040516108389190613c8c565b60405180910390f35b34801561084c575f80fd5b5061085561170b565b6040516108629190613be9565b60405180910390f35b348015610876575f80fd5b50610891600480360381019061088c9190613d91565b611711565b005b34801561089e575f80fd5b506108a76117aa565b6040516108b49190613a19565b60405180910390f35b3480156108c8575f80fd5b506108e360048036038101906108de9190613d03565b61183a565b005b3480156108f0575f80fd5b506108f9611952565b6040516109069190613be9565b60405180910390f35b34801561091a575f80fd5b50610923611958565b6040516109309190613be9565b60405180910390f35b348015610944575f80fd5b5061094d61195e565b60405161095a9190613be9565b60405180910390f35b34801561096e575f80fd5b5061098960048036038101906109849190613aca565b611964565b6040516109969190613b22565b60405180910390f35b3480156109aa575f80fd5b506109c560048036038101906109c09190613aca565b611a4a565b6040516109d29190613b22565b60405180910390f35b3480156109e6575f80fd5b50610a0160048036038101906109fc9190613b3b565b611a67565b005b348015610a0e575f80fd5b50610a296004803603810190610a249190613b3b565b611ba1565b604051610a369190613b22565b60405180910390f35b348015610a4a575f80fd5b50610a53611bbe565b604051610a609190613b22565b60405180910390f35b348015610a74575f80fd5b50610a8f6004803603810190610a8a9190613d03565b611bd1565b005b348015610a9c575f80fd5b50610ab76004803603810190610ab29190613d41565b611cf3565b005b348015610ac4575f80fd5b50610adf6004803603810190610ada9190613c02565b611e0b565b005b348015610aec575f80fd5b50610af5611f1a565b604051610b029190613be9565b60405180910390f35b348015610b16575f80fd5b50610b316004803603810190610b2c9190613c02565b611f20565b604051610b3e9190613b22565b60405180910390f35b348015610b52575f80fd5b50610b5b612074565b604051610b689190613be9565b60405180910390f35b348015610b7c575f80fd5b50610b976004803603810190610b929190613dbc565b61207a565b604051610ba49190613be9565b60405180910390f35b348015610bb8575f80fd5b50610bc16120fc565b604051610bce9190613be9565b60405180910390f35b348015610be2575f80fd5b50610beb612102565b604051610bf89190613be9565b60405180910390f35b348015610c0c575f80fd5b50610c276004803603810190610c229190613b3b565b612108565b005b348015610c34575f80fd5b50610c3d6121fe565b604051610c4a9190613be9565b60405180910390f35b348015610c5e575f80fd5b50610c67612204565b604051610c749190613be9565b60405180910390f35b348015610c88575f80fd5b50610ca36004803603810190610c9e9190613b3b565b61220a565b005b606060038054610cb490613e27565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce090613e27565b8015610d2b5780601f10610d0257610100808354040283529160200191610d2b565b820191905f5260205f20905b815481529060010190602001808311610d0e57829003601f168201915b5050505050905090565b5f610d48610d41612344565b848461234b565b6001905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610da4612344565b73ffffffffffffffffffffffffffffffffffffffff16610dc26116be565b73ffffffffffffffffffffffffffffffffffffffff1614610e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0f90613ea1565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60155481565b610eea612344565b73ffffffffffffffffffffffffffffffffffffffff16610f086116be565b73ffffffffffffffffffffffffffffffffffffffff1614610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5590613ea1565b60405180910390fd5b670de0b6b3a76400006103e86001610f74610d93565b610f7e9190613eec565b610f889190613f5a565b610f929190613f5a565b811015610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90613ffa565b60405180910390fd5b670de0b6b3a764000081610fe89190613eec565b60098190555050565b5f610ffd84848461250e565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f611044612344565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90614088565b60405180910390fd5b6110d7856110cf612344565b85840361234b565b60019150509392505050565b61dead81565b5f6012905090565b5f61118e6110fd612344565b848460015f61110a612344565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461118991906140a6565b61234b565b6001905092915050565b7f00000000000000000000000006fac8c6785976a793339b10433e2fb66e58ff2581565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112ab612344565b73ffffffffffffffffffffffffffffffffffffffff166112c96116be565b73ffffffffffffffffffffffffffffffffffffffff161461131f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131690613ea1565b60405180910390fd5b6113285f612f9e565b565b5f611333612344565b73ffffffffffffffffffffffffffffffffffffffff166113516116be565b73ffffffffffffffffffffffffffffffffffffffff16146113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e90613ea1565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b6113fb612344565b73ffffffffffffffffffffffffffffffffffffffff166114196116be565b73ffffffffffffffffffffffffffffffffffffffff161461146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690613ea1565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6114fa612344565b73ffffffffffffffffffffffffffffffffffffffff166115186116be565b73ffffffffffffffffffffffffffffffffffffffff161461156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156590613ea1565b60405180910390fd5b5f81838561157c91906140a6565b61158691906140a6565b905060148111156115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390614123565b60405180910390fd5b83600e8190555082600f8190555081601081905550601054600f54600e546115f491906140a6565b6115fe91906140a6565b600d8190555050505050565b611612612344565b73ffffffffffffffffffffffffffffffffffffffff166116306116be565b73ffffffffffffffffffffffffffffffffffffffff1614611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d90613ea1565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b611719612344565b73ffffffffffffffffffffffffffffffffffffffff166117376116be565b73ffffffffffffffffffffffffffffffffffffffff161461178d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178490613ea1565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546117b990613e27565b80601f01602080910402602001604051908101604052809291908181526020018280546117e590613e27565b80156118305780601f1061180757610100808354040283529160200191611830565b820191905f5260205f20905b81548152906001019060200180831161181357829003601f168201915b5050505050905090565b611842612344565b73ffffffffffffffffffffffffffffffffffffffff166118606116be565b73ffffffffffffffffffffffffffffffffffffffff16146118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90613ea1565b60405180910390fd5b7f00000000000000000000000006fac8c6785976a793339b10433e2fb66e58ff2573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b906141b1565b60405180910390fd5b61194e8282613061565b5050565b60105481565b60175481565b60145481565b5f8060015f611971612344565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a229061423f565b60405180910390fd5b611a3f611a36612344565b8585840361234b565b600191505092915050565b5f611a5d611a56612344565b848461250e565b6001905092915050565b611a6f612344565b73ffffffffffffffffffffffffffffffffffffffff16611a8d6116be565b73ffffffffffffffffffffffffffffffffffffffff1614611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90613ea1565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611bd9612344565b73ffffffffffffffffffffffffffffffffffffffff16611bf76116be565b73ffffffffffffffffffffffffffffffffffffffff1614611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490613ea1565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ce79190613b22565b60405180910390a25050565b611cfb612344565b73ffffffffffffffffffffffffffffffffffffffff16611d196116be565b73ffffffffffffffffffffffffffffffffffffffff1614611d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6690613ea1565b60405180910390fd5b5f818385611d7d91906140a6565b611d8791906140a6565b90506014811115611dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc490614123565b60405180910390fd5b836012819055508260138190555081601481905550601454601354601254611df591906140a6565b611dff91906140a6565b60118190555050505050565b611e13612344565b73ffffffffffffffffffffffffffffffffffffffff16611e316116be565b73ffffffffffffffffffffffffffffffffffffffff1614611e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e90613ea1565b60405180910390fd5b670de0b6b3a76400006103e86005611e9d610d93565b611ea79190613eec565b611eb19190613f5a565b611ebb9190613f5a565b811015611efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef4906142cd565b60405180910390fd5b670de0b6b3a764000081611f119190613eec565b600b8190555050565b60095481565b5f611f29612344565b73ffffffffffffffffffffffffffffffffffffffff16611f476116be565b73ffffffffffffffffffffffffffffffffffffffff1614611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490613ea1565b60405180910390fd5b620186a06001611fab610d93565b611fb59190613eec565b611fbf9190613f5a565b821015612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff89061435b565b60405180910390fd5b6103e8600561200e610d93565b6120189190613eec565b6120229190613f5a565b821115612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b906143e9565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b600f5481565b612110612344565b73ffffffffffffffffffffffffffffffffffffffff1661212e6116be565b73ffffffffffffffffffffffffffffffffffffffff1614612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b90613ea1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e990614477565b60405180910390fd5b6121fb81612f9e565b50565b60135481565b600b5481565b612212612344565b73ffffffffffffffffffffffffffffffffffffffff166122306116be565b73ffffffffffffffffffffffffffffffffffffffff1614612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d90613ea1565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b090614505565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241e90614593565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125019190613be9565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390614621565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e1906146af565b60405180910390fd5b5f8103612601576125fc83835f6130ff565b612f99565b600c5f9054906101000a900460ff1615612ae55761261d6116be565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561268b575061265b6116be565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126c357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126fd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127165750600560149054906101000a900460ff16155b15612ae457600c60019054906101000a900460ff1661280a5760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127ca575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280090614717565b60405180910390fd5b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128a7575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561294e576009548111156128f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e8906147a5565b60405180910390fd5b600b546128fd8361125e565b8261290891906140a6565b1115612949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129409061480d565b60405180910390fd5b612ae3565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129eb575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a3a57600954811115612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c9061489b565b60405180910390fd5b612ae2565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612ae157600b54612a948361125e565b82612a9f91906140a6565b1115612ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad79061480d565b60405180910390fd5b5b5b5b5b5b5f612aef3061125e565b90505f600a548210159050808015612b135750600c60029054906101000a900460ff165b8015612b2c5750600560149054906101000a900460ff16155b8015612b7f5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612bd2575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c25575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c68576001600560146101000a81548160ff021916908315150217905550612c4d613374565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d17575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d20575f90505b5f8115612f8957601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d7e57505f601154115b15612e4857612dab6064612d9d6011548861361b90919063ffffffff16565b61363090919063ffffffff16565b905060115460135482612dbe9190613eec565b612dc89190613f5a565b60165f828254612dd891906140a6565b9250508190555060115460145482612df09190613eec565b612dfa9190613f5a565b60175f828254612e0a91906140a6565b9250508190555060115460125482612e229190613eec565b612e2c9190613f5a565b60155f828254612e3c91906140a6565b92505081905550612f66565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e9f57505f600d54115b15612f6557612ecc6064612ebe600d548861361b90919063ffffffff16565b61363090919063ffffffff16565b9050600d54600f5482612edf9190613eec565b612ee99190613f5a565b60165f828254612ef991906140a6565b92505081905550600d5460105482612f119190613eec565b612f1b9190613f5a565b60175f828254612f2b91906140a6565b92505081905550600d54600e5482612f439190613eec565b612f4d9190613f5a565b60155f828254612f5d91906140a6565b925050819055505b5b5f811115612f7a57612f798730836130ff565b5b8085612f8691906148b9565b94505b612f948787876130ff565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361316d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316490614621565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d2906146af565b60405180910390fd5b6131e6838383613645565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132609061495c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132f791906140a6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161335b9190613be9565b60405180910390a361336e84848461364a565b50505050565b5f61337e3061125e565b90505f60175460155460165461339491906140a6565b61339e91906140a6565b90505f808314806133ae57505f82145b156133bb57505050613619565b5f600283601654866133cd9190613eec565b6133d79190613f5a565b6133e19190613f5a565b90505f6133f7828661364f90919063ffffffff16565b90505f47905061340682613664565b5f61341a824761364f90919063ffffffff16565b90505f613444876134366015548561361b90919063ffffffff16565b61363090919063ffffffff16565b90505f61346e886134606017548661361b90919063ffffffff16565b61363090919063ffffffff16565b90505f81838561347e91906148b9565b61348891906148b9565b90505f6016819055505f6015819055505f60178190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516134e4906149a7565b5f6040518083038185875af1925050503d805f811461351e576040519150601f19603f3d011682016040523d82523d5f602084013e613523565b606091505b5050809850505f8711801561353757505f81115b15613584576135468782613897565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260165460405161357b939291906149bb565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135c9906149a7565b5f6040518083038185875af1925050503d805f8114613603576040519150601f19603f3d011682016040523d82523d5f602084013e613608565b606091505b505080985050505050505050505050505b565b5f81836136289190613eec565b905092915050565b5f818361363d9190613f5a565b905092915050565b505050565b505050565b5f818361365c91906148b9565b905092915050565b5f600267ffffffffffffffff8111156136805761367f6149f0565b5b6040519080825280602002602001820160405280156136ae5781602001602082028036833780820191505090505b50905030815f815181106136c5576136c4614a1d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613768573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061378c9190614a5e565b816001815181106137a05761379f614a1d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613805307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461234b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613866959493929190614b79565b5f604051808303815f87803b15801561387d575f80fd5b505af115801561388f573d5f803e3d5ffd5b505050505050565b6138c2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461234b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161394796959493929190614bd1565b60606040518083038185885af1158015613963573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906139889190614c44565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156139c65780820151818401526020810190506139ab565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6139eb8261398f565b6139f58185613999565b9350613a058185602086016139a9565b613a0e816139d1565b840191505092915050565b5f6020820190508181035f830152613a3181846139e1565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613a6682613a3d565b9050919050565b613a7681613a5c565b8114613a80575f80fd5b50565b5f81359050613a9181613a6d565b92915050565b5f819050919050565b613aa981613a97565b8114613ab3575f80fd5b50565b5f81359050613ac481613aa0565b92915050565b5f8060408385031215613ae057613adf613a39565b5b5f613aed85828601613a83565b9250506020613afe85828601613ab6565b9150509250929050565b5f8115159050919050565b613b1c81613b08565b82525050565b5f602082019050613b355f830184613b13565b92915050565b5f60208284031215613b5057613b4f613a39565b5b5f613b5d84828501613a83565b91505092915050565b5f819050919050565b5f613b89613b84613b7f84613a3d565b613b66565b613a3d565b9050919050565b5f613b9a82613b6f565b9050919050565b5f613bab82613b90565b9050919050565b613bbb81613ba1565b82525050565b5f602082019050613bd45f830184613bb2565b92915050565b613be381613a97565b82525050565b5f602082019050613bfc5f830184613bda565b92915050565b5f60208284031215613c1757613c16613a39565b5b5f613c2484828501613ab6565b91505092915050565b5f805f60608486031215613c4457613c43613a39565b5b5f613c5186828701613a83565b9350506020613c6286828701613a83565b9250506040613c7386828701613ab6565b9150509250925092565b613c8681613a5c565b82525050565b5f602082019050613c9f5f830184613c7d565b92915050565b5f60ff82169050919050565b613cba81613ca5565b82525050565b5f602082019050613cd35f830184613cb1565b92915050565b613ce281613b08565b8114613cec575f80fd5b50565b5f81359050613cfd81613cd9565b92915050565b5f8060408385031215613d1957613d18613a39565b5b5f613d2685828601613a83565b9250506020613d3785828601613cef565b9150509250929050565b5f805f60608486031215613d5857613d57613a39565b5b5f613d6586828701613ab6565b9350506020613d7686828701613ab6565b9250506040613d8786828701613ab6565b9150509250925092565b5f60208284031215613da657613da5613a39565b5b5f613db384828501613cef565b91505092915050565b5f8060408385031215613dd257613dd1613a39565b5b5f613ddf85828601613a83565b9250506020613df085828601613a83565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613e3e57607f821691505b602082108103613e5157613e50613dfa565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613e8b602083613999565b9150613e9682613e57565b602082019050919050565b5f6020820190508181035f830152613eb881613e7f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ef682613a97565b9150613f0183613a97565b9250828202613f0f81613a97565b91508282048414831517613f2657613f25613ebf565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f6482613a97565b9150613f6f83613a97565b925082613f7f57613f7e613f2d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613fe4602f83613999565b9150613fef82613f8a565b604082019050919050565b5f6020820190508181035f83015261401181613fd8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614072602883613999565b915061407d82614018565b604082019050919050565b5f6020820190508181035f83015261409f81614066565b9050919050565b5f6140b082613a97565b91506140bb83613a97565b92508282019050808211156140d3576140d2613ebf565b5b92915050565b7f546f74616c206665652063616e6e6f74206578636565642032302500000000005f82015250565b5f61410d601b83613999565b9150614118826140d9565b602082019050919050565b5f6020820190508181035f83015261413a81614101565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61419b603983613999565b91506141a682614141565b604082019050919050565b5f6020820190508181035f8301526141c88161418f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614229602583613999565b9150614234826141cf565b604082019050919050565b5f6020820190508181035f8301526142568161421d565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6142b7602483613999565b91506142c28261425d565b604082019050919050565b5f6020820190508181035f8301526142e4816142ab565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614345603583613999565b9150614350826142eb565b604082019050919050565b5f6020820190508181035f83015261437281614339565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6143d3603483613999565b91506143de82614379565b604082019050919050565b5f6020820190508181035f830152614400816143c7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614461602683613999565b915061446c82614407565b604082019050919050565b5f6020820190508181035f83015261448e81614455565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6144ef602483613999565b91506144fa82614495565b604082019050919050565b5f6020820190508181035f83015261451c816144e3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61457d602283613999565b915061458882614523565b604082019050919050565b5f6020820190508181035f8301526145aa81614571565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61460b602583613999565b9150614616826145b1565b604082019050919050565b5f6020820190508181035f830152614638816145ff565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614699602383613999565b91506146a48261463f565b604082019050919050565b5f6020820190508181035f8301526146c68161468d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614701601683613999565b915061470c826146cd565b602082019050919050565b5f6020820190508181035f83015261472e816146f5565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61478f603583613999565b915061479a82614735565b604082019050919050565b5f6020820190508181035f8301526147bc81614783565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6147f7601383613999565b9150614802826147c3565b602082019050919050565b5f6020820190508181035f830152614824816147eb565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614885603683613999565b91506148908261482b565b604082019050919050565b5f6020820190508181035f8301526148b281614879565b9050919050565b5f6148c382613a97565b91506148ce83613a97565b92508282039050818111156148e6576148e5613ebf565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614946602683613999565b9150614951826148ec565b604082019050919050565b5f6020820190508181035f8301526149738161493a565b9050919050565b5f81905092915050565b50565b5f6149925f8361497a565b915061499d82614984565b5f82019050919050565b5f6149b182614987565b9150819050919050565b5f6060820190506149ce5f830186613bda565b6149db6020830185613bda565b6149e86040830184613bda565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614a5881613a6d565b92915050565b5f60208284031215614a7357614a72613a39565b5b5f614a8084828501614a4a565b91505092915050565b5f819050919050565b5f614aac614aa7614aa284614a89565b613b66565b613a97565b9050919050565b614abc81614a92565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614af481613a5c565b82525050565b5f614b058383614aeb565b60208301905092915050565b5f602082019050919050565b5f614b2782614ac2565b614b318185614acc565b9350614b3c83614adc565b805f5b83811015614b6c578151614b538882614afa565b9750614b5e83614b11565b925050600181019050614b3f565b5085935050505092915050565b5f60a082019050614b8c5f830188613bda565b614b996020830187614ab3565b8181036040830152614bab8186614b1d565b9050614bba6060830185613c7d565b614bc76080830184613bda565b9695505050505050565b5f60c082019050614be45f830189613c7d565b614bf16020830188613bda565b614bfe6040830187614ab3565b614c0b6060830186614ab3565b614c186080830185613c7d565b614c2560a0830184613bda565b979650505050505050565b5f81519050614c3e81613aa0565b92915050565b5f805f60608486031215614c5b57614c5a613a39565b5b5f614c6886828701614c30565b9350506020614c7986828701614c30565b9250506040614c8a86828701614c30565b915050925092509256fea264697066735822122009bc07ab3d18de750b2d12e9ce261030ad70030ba2f51d3c0f4c2a855075bbd364736f6c63430008170033

Deployed Bytecode Sourcemap

12240:15457:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2605:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3519:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13386:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12314:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2926:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20665:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13170:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13130;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17659:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3696:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12417:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2825:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4196:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12372:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12724:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20830:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12577:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12985:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12804:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3042:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;727:103;;;;;;;;;;;;;:::i;:::-;;16932:152;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18206:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12509:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12878;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18577:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16768:112;;;;;;;;;;;;;:::i;:::-;;504:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12546:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13020:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18469:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2713:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19728:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12952:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13210:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13096:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4419:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3177:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20236:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13607:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12764:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19538:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19053:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17942:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12609:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17154:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12844:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3360:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12651:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12915:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;838:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13058:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12691:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20475:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2605:100;2659:13;2692:5;2685:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2605:100;:::o;3519:169::-;3602:4;3619:39;3628:12;:10;:12::i;:::-;3642:7;3651:6;3619:8;:39::i;:::-;3676:4;3669:11;;3519:169;;;;:::o;13386:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;12314:51::-;;;:::o;2926:108::-;2987:7;3014:12;;3007:19;;2926:108;:::o;20665:157::-;650:12;:10;:12::i;:::-;639:23;;:7;:5;:7::i;:::-;:23;;;631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20772:9:::1;;;;;;;;;;;20744:38;;20761:9;20744:38;;;;;;;;;;;;20805:9;20793;;:21;;;;;;;;;;;;;;;;;;20665:157:::0;:::o;13170:33::-;;;;:::o;13130:::-;;;;:::o;17659:275::-;650:12;:10;:12::i;:::-;639:23;;:7;:5;:7::i;:::-;:23;;;631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17796:4:::1;17788;17783:1;17767:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17766:26;;;;:::i;:::-;17765:35;;;;:::i;:::-;17755:6;:45;;17733:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;17919:6;17909;:17;;;;:::i;:::-;17886:20;:40;;;;17659:275:::0;:::o;3696:492::-;3836:4;3853:36;3863:6;3871:9;3882:6;3853:9;:36::i;:::-;3902:24;3929:11;:19;3941:6;3929:19;;;;;;;;;;;;;;;:33;3949:12;:10;:12::i;:::-;3929:33;;;;;;;;;;;;;;;;3902:60;;4001:6;3981:16;:26;;3973:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4088:57;4097:6;4105:12;:10;:12::i;:::-;4138:6;4119:16;:25;4088:8;:57::i;:::-;4176:4;4169:11;;;3696:492;;;;;:::o;12417:53::-;12463:6;12417:53;:::o;2825:93::-;2883:5;2908:2;2901:9;;2825:93;:::o;4196:215::-;4284:4;4301:80;4310:12;:10;:12::i;:::-;4324:7;4370:10;4333:11;:25;4345:12;:10;:12::i;:::-;4333:25;;;;;;;;;;;;;;;:34;4359:7;4333:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4301:8;:80::i;:::-;4399:4;4392:11;;4196:215;;;;:::o;12372:38::-;;;:::o;12724:33::-;;;;;;;;;;;;;:::o;20830:126::-;20896:4;20920:19;:28;20940:7;20920:28;;;;;;;;;;;;;;;;;;;;;;;;;20913:35;;20830:126;;;:::o;12577:23::-;;;;;;;;;;;;;:::o;12985:28::-;;;;:::o;12804:31::-;;;;;;;;;;;;;:::o;3042:127::-;3116:7;3143:9;:18;3153:7;3143:18;;;;;;;;;;;;;;;;3136:25;;3042:127;;;:::o;727:103::-;650:12;:10;:12::i;:::-;639:23;;:7;:5;:7::i;:::-;:23;;;631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;792:30:::1;819:1;792:18;:30::i;:::-;727:103::o:0;16932:152::-;16984:4;650:12;:10;:12::i;:::-;639:23;;:7;:5;:7::i;:::-;:23;;;631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17018:5:::1;17001:14;;:22;;;;;;;;;;;;;;;;;;17039:15;;;;;;;;;;17072:4;17065:11;;16932:152:::0;:::o;18206:167::-;650:12;:10;:12::i;:::-;639:23;;:7;:5;:7::i;:::-;:23;;;631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18361:4:::1;18319:31;:39;18351:6;18319:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;18206:167:::0;;:::o;12509:30::-;;;;;;;;;;;;;:::o;12878:::-;;;;:::o;18577:468::-;650:12;:10;:12::i;:::-;639:23;;:7;:5;:7::i;:::-;:23;;;631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18727:17:::1;18779:7;18763:13;18747;:29;;;;:::i;:::-;:39;;;;:::i;:::-;18727:59;;18818:2;18805:9;:15;;18797:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;18881:13;18863:15;:31;;;;18923:13;18905:15;:31;;;;18959:7;18947:9;:19;;;;19028:9;;19010:15;;18992;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;18977:12;:60;;;;18716:329;18577:468:::0;;;:::o;16768:112::-;650:12;:10;:12::i;:::-;639:23;;:7;:5;:7::i;:::-;:23;;;631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16839:4:::1;16823:13;;:20;;;;;;;;;;;;;;;;;;16868:4;16854:11;;:18;;;;;;;;;;;;;;;;;;16768:112::o:0;504:87::-;550:7;577:6;;;;;;;;;;;570:13;;504:87;:::o;12546:24::-;;;;;;;;;;;;;:::o;13020:31::-;;;;:::o;18469:100::-;650:12;:10;:12::i;:::-;639:23;;:7;:5;:7::i;:::-;:23;;;631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18554:7:::1;18540:11;;:21;;;;;;;;;;;;;;;;;;18469:100:::0;:::o;2713:104::-;2769:13;2802:7;2795:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2713:104;:::o;19728:304::-;650:12;:10;:12::i;:::-;639:23;;:7;:5;:7::i;:::-;:23;;;631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19872:13:::1;19864:21;;:4;:21;;::::0;19842:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19983:41;20012:4;20018:5;19983:28;:41::i;:::-;19728:304:::0;;:::o;12952:24::-;;;;:::o;13210:27::-;;;;:::o;13096:25::-;;;;:::o;4419:413::-;4512:4;4529:24;4556:11;:25;4568:12;:10;:12::i;:::-;4556:25;;;;;;;;;;;;;;;:34;4582:7;4556:34;;;;;;;;;;;;;;;;4529:61;;4629:15;4609:16;:35;;4601:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4722:67;4731:12;:10;:12::i;:::-;4745:7;4773:15;4754:16;:34;4722:8;:67::i;:::-;4820:4;4813:11;;;4419:413;;;;:::o;3177:175::-;3263:4;3280:42;3290:12;:10;:12::i;:::-;3304:9;3315:6;3280:9;:42::i;:::-;3340:4;3333:11;;3177:175;;;;:::o;20236:231::-;650:12;:10;:12::i;:::-;639:23;;:7;:5;:7::i;:::-;:23;;;631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20396:15:::1;;;;;;;;;;;20353:59;;20376:18;20353:59;;;;;;;;;;;;20441:18;20423:15;;:36;;;;;;;;;;;;;;;;;;20236:231:::0;:::o;13607:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;12764:33::-;;;;;;;;;;;;;:::o;19538:182::-;650:12;:10;:12::i;:::-;639:23;;:7;:5;:7::i;:::-;:23;;;631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19654:8:::1;19623:19;:28;19643:7;19623:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19694:7;19678:34;;;19703:8;19678:34;;;;;;:::i;:::-;;;;;;;;19538:182:::0;;:::o;19053:477::-;650:12;:10;:12::i;:::-;639:23;;:7;:5;:7::i;:::-;:23;;;631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19205:17:::1;19257:7;19241:13;19225;:29;;;;:::i;:::-;:39;;;;:::i;:::-;19205:59;;19296:2;19283:9;:15;;19275:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;19360:13;19341:16;:32;;;;19403:13;19384:16;:32;;;;19440:7;19427:10;:20;;;;19512:10;;19493:16;;19474;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;19458:13;:64;;;;19193:337;19053:477:::0;;;:::o;17942:256::-;650:12;:10;:12::i;:::-;639:23;;:7;:5;:7::i;:::-;:23;;;631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18082:4:::1;18074;18069:1;18053:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18052:26;;;;:::i;:::-;18051:35;;;;:::i;:::-;18041:6;:45;;18019:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;18183:6;18173;:17;;;;:::i;:::-;18161:9;:29;;;;17942:256:::0;:::o;12609:35::-;;;;:::o;17154:497::-;17262:4;650:12;:10;:12::i;:::-;639:23;;:7;:5;:7::i;:::-;:23;;;631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17341:6:::1;17336:1;17320:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17319:28;;;;:::i;:::-;17306:9;:41;;17284:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;17496:4;17491:1;17475:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17474:26;;;;:::i;:::-;17461:9;:39;;17439:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;17612:9;17591:18;:30;;;;17639:4;17632:11;;17154:497:::0;;;:::o;12844:27::-;;;;:::o;3360:151::-;3449:7;3476:11;:18;3488:5;3476:18;;;;;;;;;;;;;;;:27;3495:7;3476:27;;;;;;;;;;;;;;;;3469:34;;3360:151;;;;:::o;12651:33::-;;;;:::o;12915:30::-;;;;:::o;838:201::-;650:12;:10;:12::i;:::-;639:23;;:7;:5;:7::i;:::-;:23;;;631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;947:1:::1;927:22;;:8;:22;;::::0;919:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1003:28;1022:8;1003:18;:28::i;:::-;838:201:::0;:::o;13058:31::-;;;;:::o;12691:24::-;;;;:::o;20475:182::-;650:12;:10;:12::i;:::-;639:23;;:7;:5;:7::i;:::-;:23;;;631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20607:8:::1;;;;;;;;;;;20578:38;;20594:11;20578:38;;;;;;;;;;;;20638:11;20627:8;;:22;;;;;;;;;;;;;;;;;;20475:182:::0;:::o;157:98::-;210:7;237:10;230:17;;157:98;:::o;5988:380::-;6141:1;6124:19;;:5;:19;;;6116:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6222:1;6203:21;;:7;:21;;;6195:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6306:6;6276:11;:18;6288:5;6276:18;;;;;;;;;;;;;;;:27;6295:7;6276:27;;;;;;;;;;;;;;;:36;;;;6344:7;6328:32;;6337:5;6328:32;;;6353:6;6328:32;;;;;;:::i;:::-;;;;;;;;5988:380;;;:::o;21014:3924::-;21162:1;21146:18;;:4;:18;;;21138:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21239:1;21225:16;;:2;:16;;;21217:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21308:1;21298:6;:11;21294:93;;21326:28;21342:4;21348:2;21352:1;21326:15;:28::i;:::-;21369:7;;21294:93;21403:14;;;;;;;;;;;21399:1694;;;21464:7;:5;:7::i;:::-;21456:15;;:4;:15;;;;:49;;;;;21498:7;:5;:7::i;:::-;21492:13;;:2;:13;;;;21456:49;:86;;;;;21540:1;21526:16;;:2;:16;;;;21456:86;:128;;;;;21577:6;21563:21;;:2;:21;;;;21456:128;:158;;;;;21606:8;;;;;;;;;;;21605:9;21456:158;21434:1648;;;21654:13;;;;;;;;;;;21649:223;;21726:19;:25;21746:4;21726:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;21755:19;:23;21775:2;21755:23;;;;;;;;;;;;;;;;;;;;;;;;;21726:52;21692:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;21649:223;21946:25;:31;21972:4;21946:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;22003:31;:35;22035:2;22003:35;;;;;;;;;;;;;;;;;;;;;;;;;22002:36;21946:92;21920:1147;;;22125:20;;22115:6;:30;;22081:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;22333:9;;22316:13;22326:2;22316:9;:13::i;:::-;22307:6;:22;;;;:::i;:::-;:35;;22273:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;21920:1147;;;22511:25;:29;22537:2;22511:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;22566:31;:37;22598:4;22566:37;;;;;;;;;;;;;;;;;;;;;;;;;22565:38;22511:92;22485:582;;;22690:20;;22680:6;:30;;22646:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;22485:582;;;22847:31;:35;22879:2;22847:35;;;;;;;;;;;;;;;;;;;;;;;;;22842:225;;22967:9;;22950:13;22960:2;22950:9;:13::i;:::-;22941:6;:22;;;;:::i;:::-;:35;;22907:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;22842:225;22485:582;21920:1147;21434:1648;21399:1694;23105:28;23136:24;23154:4;23136:9;:24::i;:::-;23105:55;;23173:12;23212:18;;23188:20;:42;;23173:57;;23261:7;:35;;;;;23285:11;;;;;;;;;;;23261:35;:61;;;;;23314:8;;;;;;;;;;;23313:9;23261:61;:110;;;;;23340:25;:31;23366:4;23340:31;;;;;;;;;;;;;;;;;;;;;;;;;23339:32;23261:110;:153;;;;;23389:19;:25;23409:4;23389:25;;;;;;;;;;;;;;;;;;;;;;;;;23388:26;23261:153;:194;;;;;23432:19;:23;23452:2;23432:23;;;;;;;;;;;;;;;;;;;;;;;;;23431:24;23261:194;23243:326;;;23493:4;23482:8;;:15;;;;;;;;;;;;;;;;;;23514:10;:8;:10::i;:::-;23552:5;23541:8;;:16;;;;;;;;;;;;;;;;;;23243:326;23581:12;23597:8;;;;;;;;;;;23596:9;23581:24;;23707:19;:25;23727:4;23707:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23736:19;:23;23756:2;23736:23;;;;;;;;;;;;;;;;;;;;;;;;;23707:52;23703:100;;;23786:5;23776:15;;23703:100;23815:12;23920:7;23916:969;;;23972:25;:29;23998:2;23972:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;24021:1;24005:13;;:17;23972:50;23968:768;;;24050:34;24080:3;24050:25;24061:13;;24050:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;24043:41;;24153:13;;24133:16;;24126:4;:23;;;;:::i;:::-;24125:41;;;;:::i;:::-;24103:18;;:63;;;;;;;:::i;:::-;;;;;;;;24223:13;;24209:10;;24202:4;:17;;;;:::i;:::-;24201:35;;;;:::i;:::-;24185:12;;:51;;;;;;;:::i;:::-;;;;;;;;24305:13;;24285:16;;24278:4;:23;;;;:::i;:::-;24277:41;;;;:::i;:::-;24255:18;;:63;;;;;;;:::i;:::-;;;;;;;;23968:768;;;24380:25;:31;24406:4;24380:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;24430:1;24415:12;;:16;24380:51;24376:360;;;24459:33;24488:3;24459:24;24470:12;;24459:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;24452:40;;24560:12;;24541:15;;24534:4;:22;;;;:::i;:::-;24533:39;;;;:::i;:::-;24511:18;;:61;;;;;;;:::i;:::-;;;;;;;;24628:12;;24615:9;;24608:4;:16;;;;:::i;:::-;24607:33;;;;:::i;:::-;24591:12;;:49;;;;;;;:::i;:::-;;;;;;;;24708:12;;24689:15;;24682:4;:22;;;;:::i;:::-;24681:39;;;;:::i;:::-;24659:18;;:61;;;;;;;:::i;:::-;;;;;;;;24376:360;23968:768;24763:1;24756:4;:8;24752:91;;;24785:42;24801:4;24815;24822;24785:15;:42::i;:::-;24752:91;24869:4;24859:14;;;;;:::i;:::-;;;23916:969;24897:33;24913:4;24919:2;24923:6;24897:15;:33::i;:::-;21127:3811;;;;21014:3924;;;;:::o;1047:191::-;1121:16;1140:6;;;;;;;;;;;1121:25;;1166:8;1157:6;;:17;;;;;;;;;;;;;;;;;;1221:8;1190:40;;1211:8;1190:40;;;;;;;;;;;;1110:128;1047:191;:::o;20040:188::-;20157:5;20123:25;:31;20149:4;20123:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20214:5;20180:40;;20208:4;20180:40;;;;;;;;;;;;20040:188;;:::o;4840:733::-;4998:1;4980:20;;:6;:20;;;4972:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5082:1;5061:23;;:9;:23;;;5053:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5137:47;5158:6;5166:9;5177:6;5137:20;:47::i;:::-;5197:21;5221:9;:17;5231:6;5221:17;;;;;;;;;;;;;;;;5197:41;;5274:6;5257:13;:23;;5249:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5395:6;5379:13;:22;5359:9;:17;5369:6;5359:17;;;;;;;;;;;;;;;:42;;;;5447:6;5423:9;:20;5433:9;5423:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5488:9;5471:35;;5480:6;5471:35;;;5499:6;5471:35;;;;;;:::i;:::-;;;;;;;;5519:46;5539:6;5547:9;5558:6;5519:19;:46::i;:::-;4961:612;4840:733;;;:::o;26065:1629::-;26104:23;26130:24;26148:4;26130:9;:24::i;:::-;26104:50;;26165:25;26261:12;;26227:18;;26193;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26165:108;;26284:12;26332:1;26313:15;:20;:46;;;;26358:1;26337:17;:22;26313:46;26309:85;;;26376:7;;;;;26309:85;26455:23;26568:1;26535:17;26500:18;;26482:15;:36;;;;:::i;:::-;26481:71;;;;:::i;:::-;:88;;;;:::i;:::-;26455:114;;26580:26;26609:36;26629:15;26609;:19;;:36;;;;:::i;:::-;26580:65;;26658:25;26686:21;26658:49;;26720:36;26737:18;26720:16;:36::i;:::-;26769:18;26790:44;26816:17;26790:21;:25;;:44;;;;:::i;:::-;26769:65;;26847:23;26873:81;26926:17;26873:34;26888:18;;26873:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;26847:107;;26965:17;26985:51;27018:17;26985:28;27000:12;;26985:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;26965:71;;27049:23;27106:9;27088:15;27075:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;27049:66;;27149:1;27128:18;:22;;;;27182:1;27161:18;:22;;;;27209:1;27194:12;:16;;;;27245:9;;;;;;;;;;;27237:23;;27268:9;27237:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27223:59;;;;;27317:1;27299:15;:19;:42;;;;;27340:1;27322:15;:19;27299:42;27295:278;;;27358:46;27371:15;27388;27358:12;:46::i;:::-;27424:137;27457:18;27494:15;27528:18;;27424:137;;;;;;;;:::i;:::-;;;;;;;;27295:278;27607:15;;;;;;;;;;;27599:29;;27650:21;27599:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27585:101;;;;;26093:1601;;;;;;;;;;26065:1629;:::o;6772:98::-;6830:7;6861:1;6857;:5;;;;:::i;:::-;6850:12;;6772:98;;;;:::o;6878:::-;6936:7;6967:1;6963;:5;;;;:::i;:::-;6956:12;;6878:98;;;;:::o;6376:125::-;;;;:::o;6509:124::-;;;;:::o;6666:98::-;6724:7;6755:1;6751;:5;;;;:::i;:::-;6744:12;;6666:98;;;;:::o;24946:589::-;25072:21;25110:1;25096:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25072:40;;25141:4;25123;25128:1;25123:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25167:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25157:4;25162:1;25157:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25202:62;25219:4;25234:15;25252:11;25202:8;:62::i;:::-;25303:15;:66;;;25384:11;25410:1;25454:4;25481;25501:15;25303:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25001:534;24946:589;:::o;25543:514::-;25691:62;25708:4;25723:15;25741:11;25691:8;:62::i;:::-;25796:15;:31;;;25835:9;25868:4;25888:11;25914:1;25957;26000:8;;;;;;;;;;;26023:15;25796:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25543:514;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:180::-;10567:77;10564:1;10557:88;10664:4;10661:1;10654:15;10688:4;10685:1;10678:15;10705:410;10745:7;10768:20;10786:1;10768:20;:::i;:::-;10763:25;;10802:20;10820:1;10802:20;:::i;:::-;10797:25;;10857:1;10854;10850:9;10879:30;10897:11;10879:30;:::i;:::-;10868:41;;11058:1;11049:7;11045:15;11042:1;11039:22;11019:1;11012:9;10992:83;10969:139;;11088:18;;:::i;:::-;10969:139;10753:362;10705:410;;;;:::o;11121:180::-;11169:77;11166:1;11159:88;11266:4;11263:1;11256:15;11290:4;11287:1;11280:15;11307:185;11347:1;11364:20;11382:1;11364:20;:::i;:::-;11359:25;;11398:20;11416:1;11398:20;:::i;:::-;11393:25;;11437:1;11427:35;;11442:18;;:::i;:::-;11427:35;11484:1;11481;11477:9;11472:14;;11307:185;;;;:::o;11498:234::-;11638:34;11634:1;11626:6;11622:14;11615:58;11707:17;11702:2;11694:6;11690:15;11683:42;11498:234;:::o;11738:366::-;11880:3;11901:67;11965:2;11960:3;11901:67;:::i;:::-;11894:74;;11977:93;12066:3;11977:93;:::i;:::-;12095:2;12090:3;12086:12;12079:19;;11738:366;;;:::o;12110:419::-;12276:4;12314:2;12303:9;12299:18;12291:26;;12363:9;12357:4;12353:20;12349:1;12338:9;12334:17;12327:47;12391:131;12517:4;12391:131;:::i;:::-;12383:139;;12110:419;;;:::o;12535:227::-;12675:34;12671:1;12663:6;12659:14;12652:58;12744:10;12739:2;12731:6;12727:15;12720:35;12535:227;:::o;12768:366::-;12910:3;12931:67;12995:2;12990:3;12931:67;:::i;:::-;12924:74;;13007:93;13096:3;13007:93;:::i;:::-;13125:2;13120:3;13116:12;13109:19;;12768:366;;;:::o;13140:419::-;13306:4;13344:2;13333:9;13329:18;13321:26;;13393:9;13387:4;13383:20;13379:1;13368:9;13364:17;13357:47;13421:131;13547:4;13421:131;:::i;:::-;13413:139;;13140:419;;;:::o;13565:191::-;13605:3;13624:20;13642:1;13624:20;:::i;:::-;13619:25;;13658:20;13676:1;13658:20;:::i;:::-;13653:25;;13701:1;13698;13694:9;13687:16;;13722:3;13719:1;13716:10;13713:36;;;13729:18;;:::i;:::-;13713:36;13565:191;;;;:::o;13762:177::-;13902:29;13898:1;13890:6;13886:14;13879:53;13762:177;:::o;13945:366::-;14087:3;14108:67;14172:2;14167:3;14108:67;:::i;:::-;14101:74;;14184:93;14273:3;14184:93;:::i;:::-;14302:2;14297:3;14293:12;14286:19;;13945:366;;;:::o;14317:419::-;14483:4;14521:2;14510:9;14506:18;14498:26;;14570:9;14564:4;14560:20;14556:1;14545:9;14541:17;14534:47;14598:131;14724:4;14598:131;:::i;:::-;14590:139;;14317:419;;;:::o;14742:244::-;14882:34;14878:1;14870:6;14866:14;14859:58;14951:27;14946:2;14938:6;14934:15;14927:52;14742:244;:::o;14992:366::-;15134:3;15155:67;15219:2;15214:3;15155:67;:::i;:::-;15148:74;;15231:93;15320:3;15231:93;:::i;:::-;15349:2;15344:3;15340:12;15333:19;;14992:366;;;:::o;15364:419::-;15530:4;15568:2;15557:9;15553:18;15545:26;;15617:9;15611:4;15607:20;15603:1;15592:9;15588:17;15581:47;15645:131;15771:4;15645:131;:::i;:::-;15637:139;;15364:419;;;:::o;15789:224::-;15929:34;15925:1;15917:6;15913:14;15906:58;15998:7;15993:2;15985:6;15981:15;15974:32;15789:224;:::o;16019:366::-;16161:3;16182:67;16246:2;16241:3;16182:67;:::i;:::-;16175:74;;16258:93;16347:3;16258:93;:::i;:::-;16376:2;16371:3;16367:12;16360:19;;16019:366;;;:::o;16391:419::-;16557:4;16595:2;16584:9;16580:18;16572:26;;16644:9;16638:4;16634:20;16630:1;16619:9;16615:17;16608:47;16672:131;16798:4;16672:131;:::i;:::-;16664:139;;16391:419;;;:::o;16816:223::-;16956:34;16952:1;16944:6;16940:14;16933:58;17025:6;17020:2;17012:6;17008:15;17001:31;16816:223;:::o;17045:366::-;17187:3;17208:67;17272:2;17267:3;17208:67;:::i;:::-;17201:74;;17284:93;17373:3;17284:93;:::i;:::-;17402:2;17397:3;17393:12;17386:19;;17045:366;;;:::o;17417:419::-;17583:4;17621:2;17610:9;17606:18;17598:26;;17670:9;17664:4;17660:20;17656:1;17645:9;17641:17;17634:47;17698:131;17824:4;17698:131;:::i;:::-;17690:139;;17417:419;;;:::o;17842:240::-;17982:34;17978:1;17970:6;17966:14;17959:58;18051:23;18046:2;18038:6;18034:15;18027:48;17842:240;:::o;18088:366::-;18230:3;18251:67;18315:2;18310:3;18251:67;:::i;:::-;18244:74;;18327:93;18416:3;18327:93;:::i;:::-;18445:2;18440:3;18436:12;18429:19;;18088:366;;;:::o;18460:419::-;18626:4;18664:2;18653:9;18649:18;18641:26;;18713:9;18707:4;18703:20;18699:1;18688:9;18684:17;18677:47;18741:131;18867:4;18741:131;:::i;:::-;18733:139;;18460:419;;;:::o;18885:239::-;19025:34;19021:1;19013:6;19009:14;19002:58;19094:22;19089:2;19081:6;19077:15;19070:47;18885:239;:::o;19130:366::-;19272:3;19293:67;19357:2;19352:3;19293:67;:::i;:::-;19286:74;;19369:93;19458:3;19369:93;:::i;:::-;19487:2;19482:3;19478:12;19471:19;;19130:366;;;:::o;19502:419::-;19668:4;19706:2;19695:9;19691:18;19683:26;;19755:9;19749:4;19745:20;19741:1;19730:9;19726:17;19719:47;19783:131;19909:4;19783:131;:::i;:::-;19775:139;;19502:419;;;:::o;19927:225::-;20067:34;20063:1;20055:6;20051:14;20044:58;20136:8;20131:2;20123:6;20119:15;20112:33;19927:225;:::o;20158:366::-;20300:3;20321:67;20385:2;20380:3;20321:67;:::i;:::-;20314:74;;20397:93;20486:3;20397:93;:::i;:::-;20515:2;20510:3;20506:12;20499:19;;20158:366;;;:::o;20530:419::-;20696:4;20734:2;20723:9;20719:18;20711:26;;20783:9;20777:4;20773:20;20769:1;20758:9;20754:17;20747:47;20811:131;20937:4;20811:131;:::i;:::-;20803:139;;20530:419;;;:::o;20955:223::-;21095:34;21091:1;21083:6;21079:14;21072:58;21164:6;21159:2;21151:6;21147:15;21140:31;20955:223;:::o;21184:366::-;21326:3;21347:67;21411:2;21406:3;21347:67;:::i;:::-;21340:74;;21423:93;21512:3;21423:93;:::i;:::-;21541:2;21536:3;21532:12;21525:19;;21184:366;;;:::o;21556:419::-;21722:4;21760:2;21749:9;21745:18;21737:26;;21809:9;21803:4;21799:20;21795:1;21784:9;21780:17;21773:47;21837:131;21963:4;21837:131;:::i;:::-;21829:139;;21556:419;;;:::o;21981:221::-;22121:34;22117:1;22109:6;22105:14;22098:58;22190:4;22185:2;22177:6;22173:15;22166:29;21981:221;:::o;22208:366::-;22350:3;22371:67;22435:2;22430:3;22371:67;:::i;:::-;22364:74;;22447:93;22536:3;22447:93;:::i;:::-;22565:2;22560:3;22556:12;22549:19;;22208:366;;;:::o;22580:419::-;22746:4;22784:2;22773:9;22769:18;22761:26;;22833:9;22827:4;22823:20;22819:1;22808:9;22804:17;22797:47;22861:131;22987:4;22861:131;:::i;:::-;22853:139;;22580:419;;;:::o;23005:224::-;23145:34;23141:1;23133:6;23129:14;23122:58;23214:7;23209:2;23201:6;23197:15;23190:32;23005:224;:::o;23235:366::-;23377:3;23398:67;23462:2;23457:3;23398:67;:::i;:::-;23391:74;;23474:93;23563:3;23474:93;:::i;:::-;23592:2;23587:3;23583:12;23576:19;;23235:366;;;:::o;23607:419::-;23773:4;23811:2;23800:9;23796:18;23788:26;;23860:9;23854:4;23850:20;23846:1;23835:9;23831:17;23824:47;23888:131;24014:4;23888:131;:::i;:::-;23880:139;;23607:419;;;:::o;24032:222::-;24172:34;24168:1;24160:6;24156:14;24149:58;24241:5;24236:2;24228:6;24224:15;24217:30;24032:222;:::o;24260:366::-;24402:3;24423:67;24487:2;24482:3;24423:67;:::i;:::-;24416:74;;24499:93;24588:3;24499:93;:::i;:::-;24617:2;24612:3;24608:12;24601:19;;24260:366;;;:::o;24632:419::-;24798:4;24836:2;24825:9;24821:18;24813:26;;24885:9;24879:4;24875:20;24871:1;24860:9;24856:17;24849:47;24913:131;25039:4;24913:131;:::i;:::-;24905:139;;24632:419;;;:::o;25057:172::-;25197:24;25193:1;25185:6;25181:14;25174:48;25057:172;:::o;25235:366::-;25377:3;25398:67;25462:2;25457:3;25398:67;:::i;:::-;25391:74;;25474:93;25563:3;25474:93;:::i;:::-;25592:2;25587:3;25583:12;25576:19;;25235:366;;;:::o;25607:419::-;25773:4;25811:2;25800:9;25796:18;25788:26;;25860:9;25854:4;25850:20;25846:1;25835:9;25831:17;25824:47;25888:131;26014:4;25888:131;:::i;:::-;25880:139;;25607:419;;;:::o;26032:240::-;26172:34;26168:1;26160:6;26156:14;26149:58;26241:23;26236:2;26228:6;26224:15;26217:48;26032:240;:::o;26278:366::-;26420:3;26441:67;26505:2;26500:3;26441:67;:::i;:::-;26434:74;;26517:93;26606:3;26517:93;:::i;:::-;26635:2;26630:3;26626:12;26619:19;;26278:366;;;:::o;26650:419::-;26816:4;26854:2;26843:9;26839:18;26831:26;;26903:9;26897:4;26893:20;26889:1;26878:9;26874:17;26867:47;26931:131;27057:4;26931:131;:::i;:::-;26923:139;;26650:419;;;:::o;27075:169::-;27215:21;27211:1;27203:6;27199:14;27192:45;27075:169;:::o;27250:366::-;27392:3;27413:67;27477:2;27472:3;27413:67;:::i;:::-;27406:74;;27489:93;27578:3;27489:93;:::i;:::-;27607:2;27602:3;27598:12;27591:19;;27250:366;;;:::o;27622:419::-;27788:4;27826:2;27815:9;27811:18;27803:26;;27875:9;27869:4;27865:20;27861:1;27850:9;27846:17;27839:47;27903:131;28029:4;27903:131;:::i;:::-;27895:139;;27622:419;;;:::o;28047:241::-;28187:34;28183:1;28175:6;28171:14;28164:58;28256:24;28251:2;28243:6;28239:15;28232:49;28047:241;:::o;28294:366::-;28436:3;28457:67;28521:2;28516:3;28457:67;:::i;:::-;28450:74;;28533:93;28622:3;28533:93;:::i;:::-;28651:2;28646:3;28642:12;28635:19;;28294:366;;;:::o;28666:419::-;28832:4;28870:2;28859:9;28855:18;28847:26;;28919:9;28913:4;28909:20;28905:1;28894:9;28890:17;28883:47;28947:131;29073:4;28947:131;:::i;:::-;28939:139;;28666:419;;;:::o;29091:194::-;29131:4;29151:20;29169:1;29151:20;:::i;:::-;29146:25;;29185:20;29203:1;29185:20;:::i;:::-;29180:25;;29229:1;29226;29222:9;29214:17;;29253:1;29247:4;29244:11;29241:37;;;29258:18;;:::i;:::-;29241:37;29091:194;;;;:::o;29291:225::-;29431:34;29427:1;29419:6;29415:14;29408:58;29500:8;29495:2;29487:6;29483:15;29476:33;29291:225;:::o;29522:366::-;29664:3;29685:67;29749:2;29744:3;29685:67;:::i;:::-;29678:74;;29761:93;29850:3;29761:93;:::i;:::-;29879:2;29874:3;29870:12;29863:19;;29522:366;;;:::o;29894:419::-;30060:4;30098:2;30087:9;30083:18;30075:26;;30147:9;30141:4;30137:20;30133:1;30122:9;30118:17;30111:47;30175:131;30301:4;30175:131;:::i;:::-;30167:139;;29894:419;;;:::o;30319:147::-;30420:11;30457:3;30442:18;;30319:147;;;;:::o;30472:114::-;;:::o;30592:398::-;30751:3;30772:83;30853:1;30848:3;30772:83;:::i;:::-;30765:90;;30864:93;30953:3;30864:93;:::i;:::-;30982:1;30977:3;30973:11;30966:18;;30592:398;;;:::o;30996:379::-;31180:3;31202:147;31345:3;31202:147;:::i;:::-;31195:154;;31366:3;31359:10;;30996:379;;;:::o;31381:442::-;31530:4;31568:2;31557:9;31553:18;31545:26;;31581:71;31649:1;31638:9;31634:17;31625:6;31581:71;:::i;:::-;31662:72;31730:2;31719:9;31715:18;31706:6;31662:72;:::i;:::-;31744;31812:2;31801:9;31797:18;31788:6;31744:72;:::i;:::-;31381:442;;;;;;:::o;31829:180::-;31877:77;31874:1;31867:88;31974:4;31971:1;31964:15;31998:4;31995:1;31988:15;32015:180;32063:77;32060:1;32053:88;32160:4;32157:1;32150:15;32184:4;32181:1;32174:15;32201:143;32258:5;32289:6;32283:13;32274:22;;32305:33;32332:5;32305:33;:::i;:::-;32201:143;;;;:::o;32350:351::-;32420:6;32469:2;32457:9;32448:7;32444:23;32440:32;32437:119;;;32475:79;;:::i;:::-;32437:119;32595:1;32620:64;32676:7;32667:6;32656:9;32652:22;32620:64;:::i;:::-;32610:74;;32566:128;32350:351;;;;:::o;32707:85::-;32752:7;32781:5;32770:16;;32707:85;;;:::o;32798:158::-;32856:9;32889:61;32907:42;32916:32;32942:5;32916:32;:::i;:::-;32907:42;:::i;:::-;32889:61;:::i;:::-;32876:74;;32798:158;;;:::o;32962:147::-;33057:45;33096:5;33057:45;:::i;:::-;33052:3;33045:58;32962:147;;:::o;33115:114::-;33182:6;33216:5;33210:12;33200:22;;33115:114;;;:::o;33235:184::-;33334:11;33368:6;33363:3;33356:19;33408:4;33403:3;33399:14;33384:29;;33235:184;;;;:::o;33425:132::-;33492:4;33515:3;33507:11;;33545:4;33540:3;33536:14;33528:22;;33425:132;;;:::o;33563:108::-;33640:24;33658:5;33640:24;:::i;:::-;33635:3;33628:37;33563:108;;:::o;33677:179::-;33746:10;33767:46;33809:3;33801:6;33767:46;:::i;:::-;33845:4;33840:3;33836:14;33822:28;;33677:179;;;;:::o;33862:113::-;33932:4;33964;33959:3;33955:14;33947:22;;33862:113;;;:::o;34011:732::-;34130:3;34159:54;34207:5;34159:54;:::i;:::-;34229:86;34308:6;34303:3;34229:86;:::i;:::-;34222:93;;34339:56;34389:5;34339:56;:::i;:::-;34418:7;34449:1;34434:284;34459:6;34456:1;34453:13;34434:284;;;34535:6;34529:13;34562:63;34621:3;34606:13;34562:63;:::i;:::-;34555:70;;34648:60;34701:6;34648:60;:::i;:::-;34638:70;;34494:224;34481:1;34478;34474:9;34469:14;;34434:284;;;34438:14;34734:3;34727:10;;34135:608;;;34011:732;;;;:::o;34749:831::-;35012:4;35050:3;35039:9;35035:19;35027:27;;35064:71;35132:1;35121:9;35117:17;35108:6;35064:71;:::i;:::-;35145:80;35221:2;35210:9;35206:18;35197:6;35145:80;:::i;:::-;35272:9;35266:4;35262:20;35257:2;35246:9;35242:18;35235:48;35300:108;35403:4;35394:6;35300:108;:::i;:::-;35292:116;;35418:72;35486:2;35475:9;35471:18;35462:6;35418:72;:::i;:::-;35500:73;35568:3;35557:9;35553:19;35544:6;35500:73;:::i;:::-;34749:831;;;;;;;;:::o;35586:807::-;35835:4;35873:3;35862:9;35858:19;35850:27;;35887:71;35955:1;35944:9;35940:17;35931:6;35887:71;:::i;:::-;35968:72;36036:2;36025:9;36021:18;36012:6;35968:72;:::i;:::-;36050:80;36126:2;36115:9;36111:18;36102:6;36050:80;:::i;:::-;36140;36216:2;36205:9;36201:18;36192:6;36140:80;:::i;:::-;36230:73;36298:3;36287:9;36283:19;36274:6;36230:73;:::i;:::-;36313;36381:3;36370:9;36366:19;36357:6;36313:73;:::i;:::-;35586:807;;;;;;;;;:::o;36399:143::-;36456:5;36487:6;36481:13;36472:22;;36503:33;36530:5;36503:33;:::i;:::-;36399:143;;;;:::o;36548:663::-;36636:6;36644;36652;36701:2;36689:9;36680:7;36676:23;36672:32;36669:119;;;36707:79;;:::i;:::-;36669:119;36827:1;36852:64;36908:7;36899:6;36888:9;36884:22;36852:64;:::i;:::-;36842:74;;36798:128;36965:2;36991:64;37047:7;37038:6;37027:9;37023:22;36991:64;:::i;:::-;36981:74;;36936:129;37104:2;37130:64;37186:7;37177:6;37166:9;37162:22;37130:64;:::i;:::-;37120:74;;37075:129;36548:663;;;;;:::o

Swarm Source

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