ETH Price: $3,487.63 (+2.02%)

Token

TaoSwap (TAOSW)
 

Overview

Max Total Supply

1,000,000 TAOSW

Holders

240

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: TAOSW
Balance
672,777.684036106624798711 TAOSW

Value
$0.00
0x877d72ae86f0321f71995791659ce1ccecc38925
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:
TaoSwap

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/****

TaoSwap - Empowering Decentralized Trading with Bittensor Network

→ Website:    https://taoswap.app
→ Twitter:    https://x.com/TaoSwapX
→ Telegram:   https://t.me/TAO_Swap
→ dApp:       https://app.taoswap.app

// SPDX-License-Identifier: Unlicensed

****/

pragma solidity ^0.8.26;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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 _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

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

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

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

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

library SafeMath {

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

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

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

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

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

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

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

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

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

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

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

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

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

interface 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 TaoSwap is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public marketerWallet;
    address public DevsWallet;

    uint256 public maxTx;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallets;

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

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = false;

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

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

    uint256 public tokensForMarkets;
    uint256 public tokensForDev;

    mapping(address => bool) private _isBlackList;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTx;

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event marketerWalletUpdated(
        address indexed newWallet,
        address indexed olDevsWalletallet
    );

    event DevsWalletUpdated(
        address indexed newWallet,
        address indexed olDevsWalletallet
    );

    constructor() ERC20("TaoSwap", unicode"TAOSW") {
        uint256 totalSupply = 1_000_000 * 1e18;

        maxTx = 20_000 * 1e18;
        maxWallets = 20_000 * 1e18;
        swapTokensAtAmount = (totalSupply * 3) / 10000;

        uint256 _buyMarketingFee = 5;
        uint256 _buyDevFee = 0;
        uint256 _sellMarketingFee = 5;
        uint256 _sellDevFee = 0;

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

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

        marketerWallet = address(0x2C80C0334003C7A622F216b4A6e1b6eA6B38B134);
        DevsWallet = address(0x2C80C0334003C7A622F216b4A6e1b6eA6B38B134);

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFrommaxTx(owner(), true);
        excludeFrommaxTx(address(this), true);
        excludeFrommaxTx(address(0xdead), true);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

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

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

    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    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 maxTx lower than 0.1%"
        );
        maxTx = newNum * (10**18);
    }

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

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

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

    function updateFees(
        uint256 _buyMarketingFee,
        uint256 _buyDevFee,
        uint256 _sellMarketingFee,
        uint256 _sellDevFee) external onlyOwner {
        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(buyTotalFees <= 75, "Must keep fees at 75% or less");
        require(sellTotalFees <= 75, "Must keep fees at 75% or less");
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        require(buyTotalFees <= 75, "Must keep fees at 75% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees <= 75, "Must keep fees at 75% or less");
    }

    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 updatemarketerWallet(address newmarketerWallet) external onlyOwner {
        emit marketerWalletUpdated(newmarketerWallet, marketerWallet);
        marketerWallet = newmarketerWallet;
    }

    function updateDevsWallet(address newWallet) external onlyOwner {
        emit DevsWalletUpdated(newWallet, DevsWallet);
        DevsWallet = 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");
        require(!_isBlackList[from], "[from] black list");
        require(!_isBlackList[to], "[to] black list");

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

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

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedmaxTx[to]) {
                    require(amount <= maxTx, "Buy transfer amount exceeds the maxTx.");
                    require(amount + balanceOf(to) <= maxWallets, "Max wallet exceeded");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedmaxTx[from]) {
                    require(amount <= maxTx, "Sell transfer amount exceeds the maxTx.");
                }
                else if (!_isExcludedmaxTx[to]) {
                    require(amount + balanceOf(to) <= maxWallets, "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);
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarkets += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarkets += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

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

    function swapTokensForEth(uint256 tokenAmount) private {
        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 swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarkets + tokensForDev;
        bool success;

        if (contractBalance == 0) {
            return;
        }

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

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

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

        tokensForMarkets = 0;
        tokensForDev = 0;

        (success, ) = address(DevsWallet).call{value: ethForDev}("");
        (success, ) = address(marketerWallet).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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"olDevsWalletallet","type":"address"}],"name":"DevsWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":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":"olDevsWalletallet","type":"address"}],"name":"marketerWalletUpdated","type":"event"},{"inputs":[],"name":"DevsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTx","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":"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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFrommaxTx","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallets","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":"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":"tokensForMarkets","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyDevFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellDevFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","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"},{"inputs":[{"internalType":"address","name":"newmarketerWallet","type":"address"}],"name":"updatemarketerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaxWalletsAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff0219169083151502179055505f600e5f6101000a81548160ff021916908315150217905550348015610076575f80fd5b506040518060400160405280600781526020017f54616f53776170000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f54414f535700000000000000000000000000000000000000000000000000000081525081600390816100f29190610ca4565b5080600490816101029190610ca4565b50505061012161011661055f60201b60201c565b61056660201b60201c565b5f69d3c21bcecceda1000000905069043c33c193756480000060098190555069043c33c1937564800000600b819055506127106003826101619190610da0565b61016b9190610e0e565b600a819055505f600590505f80600590505f836010819055508260118190555060115460105461019b9190610e3e565b600f8190555081601381905550806014819055506014546013546101bf9190610e3e565b601281905550732c80c0334003c7a622f216b4a6e1b6ea6b38b13460075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732c80c0334003c7a622f216b4a6e1b6ea6b38b13460085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061028b61027e61062960201b60201c565b600161065160201b60201c565b61029c30600161065160201b60201c565b6102af61dead600161065160201b60201c565b6102cd6102c061062960201b60201c565b600161077f60201b60201c565b6102de30600161077f60201b60201c565b6102f161dead600161077f60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061031a81600161077f60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103bb9190610ecf565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610420573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104449190610ecf565b6040518363ffffffff1660e01b8152600401610461929190610f09565b6020604051808303815f875af115801561047d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a19190610ecf565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061051260065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161077f60201b60201c565b61054460065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161085f60201b60201c565b61055433876108fd60201b60201c565b50505050505061106b565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61065f61055f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661068361062960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146106d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d090610f8a565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516107739190610fc2565b60405180910390a25050565b61078d61055f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166107b161062960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fe90610f8a565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096290611025565b60405180910390fd5b61097c5f8383610a6060201b60201c565b8060025f82825461098d9190610e3e565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109df9190610e3e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a439190611052565b60405180910390a3610a5c5f8383610a6560201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610ae557607f821691505b602082108103610af857610af7610aa1565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610b5a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610b1f565b610b648683610b1f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610ba8610ba3610b9e84610b7c565b610b85565b610b7c565b9050919050565b5f819050919050565b610bc183610b8e565b610bd5610bcd82610baf565b848454610b2b565b825550505050565b5f90565b610be9610bdd565b610bf4818484610bb8565b505050565b5b81811015610c1757610c0c5f82610be1565b600181019050610bfa565b5050565b601f821115610c5c57610c2d81610afe565b610c3684610b10565b81016020851015610c45578190505b610c59610c5185610b10565b830182610bf9565b50505b505050565b5f82821c905092915050565b5f610c7c5f1984600802610c61565b1980831691505092915050565b5f610c948383610c6d565b9150826002028217905092915050565b610cad82610a6a565b67ffffffffffffffff811115610cc657610cc5610a74565b5b610cd08254610ace565b610cdb828285610c1b565b5f60209050601f831160018114610d0c575f8415610cfa578287015190505b610d048582610c89565b865550610d6b565b601f198416610d1a86610afe565b5f5b82811015610d4157848901518255600182019150602085019450602081019050610d1c565b86831015610d5e5784890151610d5a601f891682610c6d565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610daa82610b7c565b9150610db583610b7c565b9250828202610dc381610b7c565b91508282048414831517610dda57610dd9610d73565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610e1882610b7c565b9150610e2383610b7c565b925082610e3357610e32610de1565b5b828204905092915050565b5f610e4882610b7c565b9150610e5383610b7c565b9250828201905080821115610e6b57610e6a610d73565b5b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e9e82610e75565b9050919050565b610eae81610e94565b8114610eb8575f80fd5b50565b5f81519050610ec981610ea5565b92915050565b5f60208284031215610ee457610ee3610e71565b5b5f610ef184828501610ebb565b91505092915050565b610f0381610e94565b82525050565b5f604082019050610f1c5f830185610efa565b610f296020830184610efa565b9392505050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610f74602083610f30565b9150610f7f82610f40565b602082019050919050565b5f6020820190508181035f830152610fa181610f68565b9050919050565b5f8115159050919050565b610fbc81610fa8565b82525050565b5f602082019050610fd55f830184610fb3565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f61100f601f83610f30565b915061101a82610fdb565b602082019050919050565b5f6020820190508181035f83015261103c81611003565b9050919050565b61104c81610b7c565b82525050565b5f6020820190506110655f830184611043565b92915050565b608051614efc61109f5f395f8181610df7015281816129fa0152818161349801528181613577015261359e0152614efc5ff3fe60806040526004361061031d575f3560e01c80638a8c523c116101aa578063b70143c9116100f6578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610ba8578063e884f26014610be4578063f1b9ad6b14610c0e578063f2fde38b14610c3657610324565b8063d85ba06314610b18578063dd62ed3e14610b42578063e2f4560514610b7e57610324565b8063c0246668116100d0578063c024666814610a62578063c6616ba114610a8a578063c876d0b914610ab2578063d257b34f14610adc57610324565b8063b70143c9146109e8578063b819a1a914610a10578063bbc0c74214610a3857610324565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d71461090a578063a72f458614610946578063a9059cbb14610970578063b62496f5146109ac57610324565b80639c3b4fdc1461088c5780639fccce32146108b6578063a0d82dc5146108e057610324565b80638a8c523c146107a85780638da5cb5b146107be57806392136913146107e8578063924de9b71461081257806395d89b411461083a5780639a7a23d61461086457610324565b806349bd5a5e116102695780636a486a8e11610222578063715018a6116101fc578063715018a6146107145780637437681e1461072a578063751039fc146107545780637bce5a041461077e57610324565b80636a486a8e146106845780636ddd1713146106ae57806370a08231146106d857610324565b806349bd5a5e1461057a5780634a62bb65146105a45780634fbee193146105ce57806361528e271461060a578063644130d81461063457806366ca9b831461065c57610324565b8063217580a2116102d657806330a136ad116102b057806330a136ad146104c05780633103b39e146104ea578063313ce56714610514578063395093511461053e57610324565b8063217580a21461043257806323b872dd1461045a57806327c8f8351461049657610324565b806302dbd8f81461032857806306fdde0314610350578063095ea7b31461037a5780631694505e146103b657806318160ddd146103e0578063203e727e1461040a57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061034e60048036038101906103499190613af2565b610c5e565b005b34801561035b575f80fd5b50610364610d48565b6040516103719190613ba0565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b9190613c1a565b610dd8565b6040516103ad9190613c72565b60405180910390f35b3480156103c1575f80fd5b506103ca610df5565b6040516103d79190613ce6565b60405180910390f35b3480156103eb575f80fd5b506103f4610e19565b6040516104019190613d0e565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b9190613d27565b610e22565b005b34801561043d575f80fd5b5061045860048036038101906104539190613d27565b610f31565b005b348015610465575f80fd5b50610480600480360381019061047b9190613d52565b611040565b60405161048d9190613c72565b60405180910390f35b3480156104a1575f80fd5b506104aa611132565b6040516104b79190613db1565b60405180910390f35b3480156104cb575f80fd5b506104d4611138565b6040516104e19190613d0e565b60405180910390f35b3480156104f5575f80fd5b506104fe61113e565b60405161050b9190613db1565b60405180910390f35b34801561051f575f80fd5b50610528611163565b6040516105359190613de5565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f9190613c1a565b61116b565b6040516105719190613c72565b60405180910390f35b348015610585575f80fd5b5061058e611212565b60405161059b9190613db1565b60405180910390f35b3480156105af575f80fd5b506105b8611237565b6040516105c59190613c72565b60405180910390f35b3480156105d9575f80fd5b506105f460048036038101906105ef9190613dfe565b611249565b6040516106019190613c72565b60405180910390f35b348015610615575f80fd5b5061061e61129b565b60405161062b9190613d0e565b60405180910390f35b34801561063f575f80fd5b5061065a60048036038101906106559190613e53565b6112a1565b005b348015610667575f80fd5b50610682600480360381019061067d9190613af2565b611375565b005b34801561068f575f80fd5b5061069861145f565b6040516106a59190613d0e565b60405180910390f35b3480156106b9575f80fd5b506106c2611465565b6040516106cf9190613c72565b60405180910390f35b3480156106e3575f80fd5b506106fe60048036038101906106f99190613dfe565b611478565b60405161070b9190613d0e565b60405180910390f35b34801561071f575f80fd5b506107286114bd565b005b348015610735575f80fd5b5061073e611544565b60405161074b9190613d0e565b60405180910390f35b34801561075f575f80fd5b5061076861154a565b6040516107759190613c72565b60405180910390f35b348015610789575f80fd5b506107926115e7565b60405161079f9190613d0e565b60405180910390f35b3480156107b3575f80fd5b506107bc6115ed565b005b3480156107c9575f80fd5b506107d26116a1565b6040516107df9190613db1565b60405180910390f35b3480156107f3575f80fd5b506107fc6116c9565b6040516108099190613d0e565b60405180910390f35b34801561081d575f80fd5b5061083860048036038101906108339190613e91565b6116cf565b005b348015610845575f80fd5b5061084e611768565b60405161085b9190613ba0565b60405180910390f35b34801561086f575f80fd5b5061088a60048036038101906108859190613e53565b6117f8565b005b348015610897575f80fd5b506108a0611911565b6040516108ad9190613d0e565b60405180910390f35b3480156108c1575f80fd5b506108ca611917565b6040516108d79190613d0e565b60405180910390f35b3480156108eb575f80fd5b506108f461191d565b6040516109019190613d0e565b60405180910390f35b348015610915575f80fd5b50610930600480360381019061092b9190613c1a565b611923565b60405161093d9190613c72565b60405180910390f35b348015610951575f80fd5b5061095a611a09565b6040516109679190613db1565b60405180910390f35b34801561097b575f80fd5b5061099660048036038101906109919190613c1a565b611a2e565b6040516109a39190613c72565b60405180910390f35b3480156109b7575f80fd5b506109d260048036038101906109cd9190613dfe565b611a4b565b6040516109df9190613c72565b60405180910390f35b3480156109f3575f80fd5b50610a0e6004803603810190610a099190613d27565b611a68565b005b348015610a1b575f80fd5b50610a366004803603810190610a319190613dfe565b611b29565b005b348015610a43575f80fd5b50610a4c611c63565b604051610a599190613c72565b60405180910390f35b348015610a6d575f80fd5b50610a886004803603810190610a839190613e53565b611c76565b005b348015610a95575f80fd5b50610ab06004803603810190610aab9190613ebc565b611d98565b005b348015610abd575f80fd5b50610ac6611eee565b604051610ad39190613c72565b60405180910390f35b348015610ae7575f80fd5b50610b026004803603810190610afd9190613d27565b611f00565b604051610b0f9190613c72565b60405180910390f35b348015610b23575f80fd5b50610b2c612054565b604051610b399190613d0e565b60405180910390f35b348015610b4d575f80fd5b50610b686004803603810190610b639190613f20565b61205a565b604051610b759190613d0e565b60405180910390f35b348015610b89575f80fd5b50610b926120dc565b604051610b9f9190613d0e565b60405180910390f35b348015610bb3575f80fd5b50610bce6004803603810190610bc99190613dfe565b6120e2565b604051610bdb9190613c72565b60405180910390f35b348015610bef575f80fd5b50610bf86120ff565b604051610c059190613c72565b60405180910390f35b348015610c19575f80fd5b50610c346004803603810190610c2f9190613dfe565b61219c565b005b348015610c41575f80fd5b50610c5c6004803603810190610c579190613dfe565b6122d6565b005b610c666123cc565b73ffffffffffffffffffffffffffffffffffffffff16610c846116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613fa8565b60405180910390fd5b8160138190555080601481905550601454601354610cf89190613ff3565b601281905550604b6012541115610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614070565b60405180910390fd5b5050565b606060038054610d57906140bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d83906140bb565b8015610dce5780601f10610da557610100808354040283529160200191610dce565b820191905f5260205f20905b815481529060010190602001808311610db157829003601f168201915b5050505050905090565b5f610deb610de46123cc565b84846123d3565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610e2a6123cc565b73ffffffffffffffffffffffffffffffffffffffff16610e486116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590613fa8565b60405180910390fd5b670de0b6b3a76400006103e86001610eb4610e19565b610ebe91906140eb565b610ec89190614159565b610ed29190614159565b811015610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b906141d3565b60405180910390fd5b670de0b6b3a764000081610f2891906140eb565b60098190555050565b610f396123cc565b73ffffffffffffffffffffffffffffffffffffffff16610f576116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490613fa8565b60405180910390fd5b670de0b6b3a76400006103e86005610fc3610e19565b610fcd91906140eb565b610fd79190614159565b610fe19190614159565b811015611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90614261565b60405180910390fd5b670de0b6b3a76400008161103791906140eb565b600b8190555050565b5f61104c848484612596565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110936123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611109906142ef565b60405180910390fd5b6111268561111e6123cc565b8584036123d3565b60019150509392505050565b61dead81565b600b5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f6112086111776123cc565b848460015f6111846123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112039190613ff3565b6123d3565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b6112a96123cc565b73ffffffffffffffffffffffffffffffffffffffff166112c76116a1565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613fa8565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61137d6123cc565b73ffffffffffffffffffffffffffffffffffffffff1661139b6116a1565b73ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890613fa8565b60405180910390fd5b816010819055508060118190555060115460105461140f9190613ff3565b600f81905550604b600f54111561145b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145290614070565b60405180910390fd5b5050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114c56123cc565b73ffffffffffffffffffffffffffffffffffffffff166114e36116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090613fa8565b60405180910390fd5b6115425f61329a565b565b60095481565b5f6115536123cc565b73ffffffffffffffffffffffffffffffffffffffff166115716116a1565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be90613fa8565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6115f56123cc565b73ffffffffffffffffffffffffffffffffffffffff166116136116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613fa8565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6116d76123cc565b73ffffffffffffffffffffffffffffffffffffffff166116f56116a1565b73ffffffffffffffffffffffffffffffffffffffff161461174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290613fa8565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611777906140bb565b80601f01602080910402602001604051908101604052809291908181526020018280546117a3906140bb565b80156117ee5780601f106117c5576101008083540402835291602001916117ee565b820191905f5260205f20905b8154815290600101906020018083116117d157829003601f168201915b5050505050905090565b6118006123cc565b73ffffffffffffffffffffffffffffffffffffffff1661181e6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b90613fa8565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa9061437d565b60405180910390fd5b61190d828261335d565b5050565b60115481565b60165481565b60145481565b5f8060015f6119306123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e19061440b565b60405180910390fd5b6119fe6119f56123cc565b858584036123d3565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611a41611a3a6123cc565b8484612596565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611aa86123cc565b73ffffffffffffffffffffffffffffffffffffffff1614611ac7575f80fd5b611ad030611478565b8111158015611ade57505f81115b611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490614473565b60405180910390fd5b611b26816133fb565b50565b611b316123cc565b73ffffffffffffffffffffffffffffffffffffffff16611b4f6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90613fa8565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c260405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b611c7e6123cc565b73ffffffffffffffffffffffffffffffffffffffff16611c9c6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990613fa8565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d8c9190613c72565b60405180910390a25050565b611da06123cc565b73ffffffffffffffffffffffffffffffffffffffff16611dbe6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90613fa8565b60405180910390fd5b8360108190555082601181905550601154601054611e329190613ff3565b600f819055508160138190555080601481905550601454601354611e569190613ff3565b601281905550604b600f541115611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9990614070565b60405180910390fd5b604b6012541115611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf90614070565b60405180910390fd5b50505050565b600e5f9054906101000a900460ff1681565b5f611f096123cc565b73ffffffffffffffffffffffffffffffffffffffff16611f276116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613fa8565b60405180910390fd5b620186a06001611f8b610e19565b611f9591906140eb565b611f9f9190614159565b821015611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890614501565b60405180910390fd5b6103e86005611fee610e19565b611ff891906140eb565b6120029190614159565b821115612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b9061458f565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b5f6121086123cc565b73ffffffffffffffffffffffffffffffffffffffff166121266116a1565b73ffffffffffffffffffffffffffffffffffffffff161461217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390613fa8565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6121a46123cc565b73ffffffffffffffffffffffffffffffffffffffff166121c26116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90613fa8565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122de6123cc565b73ffffffffffffffffffffffffffffffffffffffff166122fc6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234990613fa8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b79061461d565b60405180910390fd5b6123c98161329a565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612438906146ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a690614739565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125899190613d0e565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fb906147c7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990614855565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156126fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f3906148bd565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d90614925565b60405180910390fd5b5f810361279d5761279883835f61362e565b613295565b600c5f9054906101000a900460ff1615612e45576127b96116a1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561282757506127f76116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561285f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612899575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b25750600660149054906101000a900460ff16155b15612e4457600c60019054906101000a900460ff166129a65760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612966575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c9061498d565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612b6a576129c26116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a4957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b695743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1d90614a41565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c07575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cae57600954811115612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890614acf565b60405180910390fd5b600b54612c5d83611478565b82612c689190613ff3565b1115612ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca090614b37565b60405180910390fd5b612e43565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d4b575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d9a57600954811115612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c90614bc5565b60405180910390fd5b612e42565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e4157600b54612df483611478565b82612dff9190613ff3565b1115612e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3790614b37565b60405180910390fd5b5b5b5b5b5b5f612e4f30611478565b90505f600a548210159050808015612e735750600c60029054906101000a900460ff165b8015612e8c5750600660149054906101000a900460ff16155b8015612edf5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f32575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f85575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fc8576001600660146101000a81548160ff021916908315150217905550612fad6138a3565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613077575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613080575f90505b5f811561328557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130de57505f601254115b156131765761310b60646130fd60125488613a7290919063ffffffff16565b613a8790919063ffffffff16565b90506012546014548261311e91906140eb565b6131289190614159565b60165f8282546131389190613ff3565b925050819055506012546013548261315091906140eb565b61315a9190614159565b60155f82825461316a9190613ff3565b92505081905550613262565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131cd57505f600f54115b15613261576131fa60646131ec600f5488613a7290919063ffffffff16565b613a8790919063ffffffff16565b9050600f546011548261320d91906140eb565b6132179190614159565b60165f8282546132279190613ff3565b92505081905550600f546010548261323f91906140eb565b6132499190614159565b60155f8282546132599190613ff3565b925050819055505b5b5f8111156132765761327587308361362e565b5b80856132829190614be3565b94505b61329087878761362e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561341757613416614c16565b5b6040519080825280602002602001820160405280156134455781602001602082028036833780820191505090505b50905030815f8151811061345c5761345b614c43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135239190614c84565b8160018151811061353757613536614c43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061359c307f0000000000000000000000000000000000000000000000000000000000000000846123d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135fd959493929190614d9f565b5f604051808303815f87803b158015613614575f80fd5b505af1158015613626573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361369c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613693906147c7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361370a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370190614855565b60405180910390fd5b613715838383613a9c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378f90614e67565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546138269190613ff3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161388a9190613d0e565b60405180910390a361389d848484613aa1565b50505050565b5f6138ad30611478565b90505f6016546015546138c09190613ff3565b90505f8083036138d257505050613a70565b6014600a546138e191906140eb565b8311156138fa576014600a546138f791906140eb565b92505b5f479050613907846133fb565b5f61391b8247613aa690919063ffffffff16565b90505f6139458561393760165485613a7290919063ffffffff16565b613a8790919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161399a90614eb2565b5f6040518083038185875af1925050503d805f81146139d4576040519150601f19603f3d011682016040523d82523d5f602084013e6139d9565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a2490614eb2565b5f6040518083038185875af1925050503d805f8114613a5e576040519150601f19603f3d011682016040523d82523d5f602084013e613a63565b606091505b5050809450505050505050505b565b5f8183613a7f91906140eb565b905092915050565b5f8183613a949190614159565b905092915050565b505050565b505050565b5f8183613ab39190614be3565b905092915050565b5f80fd5b5f819050919050565b613ad181613abf565b8114613adb575f80fd5b50565b5f81359050613aec81613ac8565b92915050565b5f8060408385031215613b0857613b07613abb565b5b5f613b1585828601613ade565b9250506020613b2685828601613ade565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613b7282613b30565b613b7c8185613b3a565b9350613b8c818560208601613b4a565b613b9581613b58565b840191505092915050565b5f6020820190508181035f830152613bb88184613b68565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613be982613bc0565b9050919050565b613bf981613bdf565b8114613c03575f80fd5b50565b5f81359050613c1481613bf0565b92915050565b5f8060408385031215613c3057613c2f613abb565b5b5f613c3d85828601613c06565b9250506020613c4e85828601613ade565b9150509250929050565b5f8115159050919050565b613c6c81613c58565b82525050565b5f602082019050613c855f830184613c63565b92915050565b5f819050919050565b5f613cae613ca9613ca484613bc0565b613c8b565b613bc0565b9050919050565b5f613cbf82613c94565b9050919050565b5f613cd082613cb5565b9050919050565b613ce081613cc6565b82525050565b5f602082019050613cf95f830184613cd7565b92915050565b613d0881613abf565b82525050565b5f602082019050613d215f830184613cff565b92915050565b5f60208284031215613d3c57613d3b613abb565b5b5f613d4984828501613ade565b91505092915050565b5f805f60608486031215613d6957613d68613abb565b5b5f613d7686828701613c06565b9350506020613d8786828701613c06565b9250506040613d9886828701613ade565b9150509250925092565b613dab81613bdf565b82525050565b5f602082019050613dc45f830184613da2565b92915050565b5f60ff82169050919050565b613ddf81613dca565b82525050565b5f602082019050613df85f830184613dd6565b92915050565b5f60208284031215613e1357613e12613abb565b5b5f613e2084828501613c06565b91505092915050565b613e3281613c58565b8114613e3c575f80fd5b50565b5f81359050613e4d81613e29565b92915050565b5f8060408385031215613e6957613e68613abb565b5b5f613e7685828601613c06565b9250506020613e8785828601613e3f565b9150509250929050565b5f60208284031215613ea657613ea5613abb565b5b5f613eb384828501613e3f565b91505092915050565b5f805f8060808587031215613ed457613ed3613abb565b5b5f613ee187828801613ade565b9450506020613ef287828801613ade565b9350506040613f0387828801613ade565b9250506060613f1487828801613ade565b91505092959194509250565b5f8060408385031215613f3657613f35613abb565b5b5f613f4385828601613c06565b9250506020613f5485828601613c06565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613f92602083613b3a565b9150613f9d82613f5e565b602082019050919050565b5f6020820190508181035f830152613fbf81613f86565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ffd82613abf565b915061400883613abf565b92508282019050808211156140205761401f613fc6565b5b92915050565b7f4d757374206b656570206665657320617420373525206f72206c6573730000005f82015250565b5f61405a601d83613b3a565b915061406582614026565b602082019050919050565b5f6020820190508181035f8301526140878161404e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806140d257607f821691505b6020821081036140e5576140e461408e565b5b50919050565b5f6140f582613abf565b915061410083613abf565b925082820261410e81613abf565b9150828204841483151761412557614124613fc6565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61416382613abf565b915061416e83613abf565b92508261417e5761417d61412c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f6141bd602083613b3a565b91506141c882614189565b602082019050919050565b5f6020820190508181035f8301526141ea816141b1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f61424b602583613b3a565b9150614256826141f1565b604082019050919050565b5f6020820190508181035f8301526142788161423f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6142d9602883613b3a565b91506142e48261427f565b604082019050919050565b5f6020820190508181035f830152614306816142cd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614367603983613b3a565b91506143728261430d565b604082019050919050565b5f6020820190508181035f8301526143948161435b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6143f5602583613b3a565b91506144008261439b565b604082019050919050565b5f6020820190508181035f830152614422816143e9565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f61445d600c83613b3a565b915061446882614429565b602082019050919050565b5f6020820190508181035f83015261448a81614451565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6144eb603583613b3a565b91506144f682614491565b604082019050919050565b5f6020820190508181035f830152614518816144df565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614579603483613b3a565b91506145848261451f565b604082019050919050565b5f6020820190508181035f8301526145a68161456d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614607602683613b3a565b9150614612826145ad565b604082019050919050565b5f6020820190508181035f830152614634816145fb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614695602483613b3a565b91506146a08261463b565b604082019050919050565b5f6020820190508181035f8301526146c281614689565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614723602283613b3a565b915061472e826146c9565b604082019050919050565b5f6020820190508181035f83015261475081614717565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6147b1602583613b3a565b91506147bc82614757565b604082019050919050565b5f6020820190508181035f8301526147de816147a5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61483f602383613b3a565b915061484a826147e5565b604082019050919050565b5f6020820190508181035f83015261486c81614833565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f6148a7601183613b3a565b91506148b282614873565b602082019050919050565b5f6020820190508181035f8301526148d48161489b565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f61490f600f83613b3a565b915061491a826148db565b602082019050919050565b5f6020820190508181035f83015261493c81614903565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614977601683613b3a565b915061498282614943565b602082019050919050565b5f6020820190508181035f8301526149a48161496b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614a2b604983613b3a565b9150614a36826149ab565b606082019050919050565b5f6020820190508181035f830152614a5881614a1f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614ab9602683613b3a565b9150614ac482614a5f565b604082019050919050565b5f6020820190508181035f830152614ae681614aad565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614b21601383613b3a565b9150614b2c82614aed565b602082019050919050565b5f6020820190508181035f830152614b4e81614b15565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614baf602783613b3a565b9150614bba82614b55565b604082019050919050565b5f6020820190508181035f830152614bdc81614ba3565b9050919050565b5f614bed82613abf565b9150614bf883613abf565b9250828203905081811115614c1057614c0f613fc6565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614c7e81613bf0565b92915050565b5f60208284031215614c9957614c98613abb565b5b5f614ca684828501614c70565b91505092915050565b5f819050919050565b5f614cd2614ccd614cc884614caf565b613c8b565b613abf565b9050919050565b614ce281614cb8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614d1a81613bdf565b82525050565b5f614d2b8383614d11565b60208301905092915050565b5f602082019050919050565b5f614d4d82614ce8565b614d578185614cf2565b9350614d6283614d02565b805f5b83811015614d92578151614d798882614d20565b9750614d8483614d37565b925050600181019050614d65565b5085935050505092915050565b5f60a082019050614db25f830188613cff565b614dbf6020830187614cd9565b8181036040830152614dd18186614d43565b9050614de06060830185613da2565b614ded6080830184613cff565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614e51602683613b3a565b9150614e5c82614df7565b604082019050919050565b5f6020820190508181035f830152614e7e81614e45565b9050919050565b5f81905092915050565b50565b5f614e9d5f83614e85565b9150614ea882614e8f565b5f82019050919050565b5f614ebc82614e92565b915081905091905056fea2646970667358221220395111b3acdba3ce7160d0f84407fbc2c56b8b2ebb3674f88ab61807b54c6e0b64736f6c634300081a0033

Deployed Bytecode

0x60806040526004361061031d575f3560e01c80638a8c523c116101aa578063b70143c9116100f6578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610ba8578063e884f26014610be4578063f1b9ad6b14610c0e578063f2fde38b14610c3657610324565b8063d85ba06314610b18578063dd62ed3e14610b42578063e2f4560514610b7e57610324565b8063c0246668116100d0578063c024666814610a62578063c6616ba114610a8a578063c876d0b914610ab2578063d257b34f14610adc57610324565b8063b70143c9146109e8578063b819a1a914610a10578063bbc0c74214610a3857610324565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d71461090a578063a72f458614610946578063a9059cbb14610970578063b62496f5146109ac57610324565b80639c3b4fdc1461088c5780639fccce32146108b6578063a0d82dc5146108e057610324565b80638a8c523c146107a85780638da5cb5b146107be57806392136913146107e8578063924de9b71461081257806395d89b411461083a5780639a7a23d61461086457610324565b806349bd5a5e116102695780636a486a8e11610222578063715018a6116101fc578063715018a6146107145780637437681e1461072a578063751039fc146107545780637bce5a041461077e57610324565b80636a486a8e146106845780636ddd1713146106ae57806370a08231146106d857610324565b806349bd5a5e1461057a5780634a62bb65146105a45780634fbee193146105ce57806361528e271461060a578063644130d81461063457806366ca9b831461065c57610324565b8063217580a2116102d657806330a136ad116102b057806330a136ad146104c05780633103b39e146104ea578063313ce56714610514578063395093511461053e57610324565b8063217580a21461043257806323b872dd1461045a57806327c8f8351461049657610324565b806302dbd8f81461032857806306fdde0314610350578063095ea7b31461037a5780631694505e146103b657806318160ddd146103e0578063203e727e1461040a57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061034e60048036038101906103499190613af2565b610c5e565b005b34801561035b575f80fd5b50610364610d48565b6040516103719190613ba0565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b9190613c1a565b610dd8565b6040516103ad9190613c72565b60405180910390f35b3480156103c1575f80fd5b506103ca610df5565b6040516103d79190613ce6565b60405180910390f35b3480156103eb575f80fd5b506103f4610e19565b6040516104019190613d0e565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b9190613d27565b610e22565b005b34801561043d575f80fd5b5061045860048036038101906104539190613d27565b610f31565b005b348015610465575f80fd5b50610480600480360381019061047b9190613d52565b611040565b60405161048d9190613c72565b60405180910390f35b3480156104a1575f80fd5b506104aa611132565b6040516104b79190613db1565b60405180910390f35b3480156104cb575f80fd5b506104d4611138565b6040516104e19190613d0e565b60405180910390f35b3480156104f5575f80fd5b506104fe61113e565b60405161050b9190613db1565b60405180910390f35b34801561051f575f80fd5b50610528611163565b6040516105359190613de5565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f9190613c1a565b61116b565b6040516105719190613c72565b60405180910390f35b348015610585575f80fd5b5061058e611212565b60405161059b9190613db1565b60405180910390f35b3480156105af575f80fd5b506105b8611237565b6040516105c59190613c72565b60405180910390f35b3480156105d9575f80fd5b506105f460048036038101906105ef9190613dfe565b611249565b6040516106019190613c72565b60405180910390f35b348015610615575f80fd5b5061061e61129b565b60405161062b9190613d0e565b60405180910390f35b34801561063f575f80fd5b5061065a60048036038101906106559190613e53565b6112a1565b005b348015610667575f80fd5b50610682600480360381019061067d9190613af2565b611375565b005b34801561068f575f80fd5b5061069861145f565b6040516106a59190613d0e565b60405180910390f35b3480156106b9575f80fd5b506106c2611465565b6040516106cf9190613c72565b60405180910390f35b3480156106e3575f80fd5b506106fe60048036038101906106f99190613dfe565b611478565b60405161070b9190613d0e565b60405180910390f35b34801561071f575f80fd5b506107286114bd565b005b348015610735575f80fd5b5061073e611544565b60405161074b9190613d0e565b60405180910390f35b34801561075f575f80fd5b5061076861154a565b6040516107759190613c72565b60405180910390f35b348015610789575f80fd5b506107926115e7565b60405161079f9190613d0e565b60405180910390f35b3480156107b3575f80fd5b506107bc6115ed565b005b3480156107c9575f80fd5b506107d26116a1565b6040516107df9190613db1565b60405180910390f35b3480156107f3575f80fd5b506107fc6116c9565b6040516108099190613d0e565b60405180910390f35b34801561081d575f80fd5b5061083860048036038101906108339190613e91565b6116cf565b005b348015610845575f80fd5b5061084e611768565b60405161085b9190613ba0565b60405180910390f35b34801561086f575f80fd5b5061088a60048036038101906108859190613e53565b6117f8565b005b348015610897575f80fd5b506108a0611911565b6040516108ad9190613d0e565b60405180910390f35b3480156108c1575f80fd5b506108ca611917565b6040516108d79190613d0e565b60405180910390f35b3480156108eb575f80fd5b506108f461191d565b6040516109019190613d0e565b60405180910390f35b348015610915575f80fd5b50610930600480360381019061092b9190613c1a565b611923565b60405161093d9190613c72565b60405180910390f35b348015610951575f80fd5b5061095a611a09565b6040516109679190613db1565b60405180910390f35b34801561097b575f80fd5b5061099660048036038101906109919190613c1a565b611a2e565b6040516109a39190613c72565b60405180910390f35b3480156109b7575f80fd5b506109d260048036038101906109cd9190613dfe565b611a4b565b6040516109df9190613c72565b60405180910390f35b3480156109f3575f80fd5b50610a0e6004803603810190610a099190613d27565b611a68565b005b348015610a1b575f80fd5b50610a366004803603810190610a319190613dfe565b611b29565b005b348015610a43575f80fd5b50610a4c611c63565b604051610a599190613c72565b60405180910390f35b348015610a6d575f80fd5b50610a886004803603810190610a839190613e53565b611c76565b005b348015610a95575f80fd5b50610ab06004803603810190610aab9190613ebc565b611d98565b005b348015610abd575f80fd5b50610ac6611eee565b604051610ad39190613c72565b60405180910390f35b348015610ae7575f80fd5b50610b026004803603810190610afd9190613d27565b611f00565b604051610b0f9190613c72565b60405180910390f35b348015610b23575f80fd5b50610b2c612054565b604051610b399190613d0e565b60405180910390f35b348015610b4d575f80fd5b50610b686004803603810190610b639190613f20565b61205a565b604051610b759190613d0e565b60405180910390f35b348015610b89575f80fd5b50610b926120dc565b604051610b9f9190613d0e565b60405180910390f35b348015610bb3575f80fd5b50610bce6004803603810190610bc99190613dfe565b6120e2565b604051610bdb9190613c72565b60405180910390f35b348015610bef575f80fd5b50610bf86120ff565b604051610c059190613c72565b60405180910390f35b348015610c19575f80fd5b50610c346004803603810190610c2f9190613dfe565b61219c565b005b348015610c41575f80fd5b50610c5c6004803603810190610c579190613dfe565b6122d6565b005b610c666123cc565b73ffffffffffffffffffffffffffffffffffffffff16610c846116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613fa8565b60405180910390fd5b8160138190555080601481905550601454601354610cf89190613ff3565b601281905550604b6012541115610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614070565b60405180910390fd5b5050565b606060038054610d57906140bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d83906140bb565b8015610dce5780601f10610da557610100808354040283529160200191610dce565b820191905f5260205f20905b815481529060010190602001808311610db157829003601f168201915b5050505050905090565b5f610deb610de46123cc565b84846123d3565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610e2a6123cc565b73ffffffffffffffffffffffffffffffffffffffff16610e486116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590613fa8565b60405180910390fd5b670de0b6b3a76400006103e86001610eb4610e19565b610ebe91906140eb565b610ec89190614159565b610ed29190614159565b811015610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b906141d3565b60405180910390fd5b670de0b6b3a764000081610f2891906140eb565b60098190555050565b610f396123cc565b73ffffffffffffffffffffffffffffffffffffffff16610f576116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490613fa8565b60405180910390fd5b670de0b6b3a76400006103e86005610fc3610e19565b610fcd91906140eb565b610fd79190614159565b610fe19190614159565b811015611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90614261565b60405180910390fd5b670de0b6b3a76400008161103791906140eb565b600b8190555050565b5f61104c848484612596565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110936123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611109906142ef565b60405180910390fd5b6111268561111e6123cc565b8584036123d3565b60019150509392505050565b61dead81565b600b5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f6112086111776123cc565b848460015f6111846123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112039190613ff3565b6123d3565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b6112a96123cc565b73ffffffffffffffffffffffffffffffffffffffff166112c76116a1565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613fa8565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61137d6123cc565b73ffffffffffffffffffffffffffffffffffffffff1661139b6116a1565b73ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890613fa8565b60405180910390fd5b816010819055508060118190555060115460105461140f9190613ff3565b600f81905550604b600f54111561145b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145290614070565b60405180910390fd5b5050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114c56123cc565b73ffffffffffffffffffffffffffffffffffffffff166114e36116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090613fa8565b60405180910390fd5b6115425f61329a565b565b60095481565b5f6115536123cc565b73ffffffffffffffffffffffffffffffffffffffff166115716116a1565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be90613fa8565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6115f56123cc565b73ffffffffffffffffffffffffffffffffffffffff166116136116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613fa8565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6116d76123cc565b73ffffffffffffffffffffffffffffffffffffffff166116f56116a1565b73ffffffffffffffffffffffffffffffffffffffff161461174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290613fa8565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611777906140bb565b80601f01602080910402602001604051908101604052809291908181526020018280546117a3906140bb565b80156117ee5780601f106117c5576101008083540402835291602001916117ee565b820191905f5260205f20905b8154815290600101906020018083116117d157829003601f168201915b5050505050905090565b6118006123cc565b73ffffffffffffffffffffffffffffffffffffffff1661181e6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b90613fa8565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa9061437d565b60405180910390fd5b61190d828261335d565b5050565b60115481565b60165481565b60145481565b5f8060015f6119306123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e19061440b565b60405180910390fd5b6119fe6119f56123cc565b858584036123d3565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611a41611a3a6123cc565b8484612596565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611aa86123cc565b73ffffffffffffffffffffffffffffffffffffffff1614611ac7575f80fd5b611ad030611478565b8111158015611ade57505f81115b611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490614473565b60405180910390fd5b611b26816133fb565b50565b611b316123cc565b73ffffffffffffffffffffffffffffffffffffffff16611b4f6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90613fa8565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c260405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b611c7e6123cc565b73ffffffffffffffffffffffffffffffffffffffff16611c9c6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990613fa8565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d8c9190613c72565b60405180910390a25050565b611da06123cc565b73ffffffffffffffffffffffffffffffffffffffff16611dbe6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90613fa8565b60405180910390fd5b8360108190555082601181905550601154601054611e329190613ff3565b600f819055508160138190555080601481905550601454601354611e569190613ff3565b601281905550604b600f541115611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9990614070565b60405180910390fd5b604b6012541115611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf90614070565b60405180910390fd5b50505050565b600e5f9054906101000a900460ff1681565b5f611f096123cc565b73ffffffffffffffffffffffffffffffffffffffff16611f276116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613fa8565b60405180910390fd5b620186a06001611f8b610e19565b611f9591906140eb565b611f9f9190614159565b821015611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890614501565b60405180910390fd5b6103e86005611fee610e19565b611ff891906140eb565b6120029190614159565b821115612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b9061458f565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b5f6121086123cc565b73ffffffffffffffffffffffffffffffffffffffff166121266116a1565b73ffffffffffffffffffffffffffffffffffffffff161461217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390613fa8565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6121a46123cc565b73ffffffffffffffffffffffffffffffffffffffff166121c26116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90613fa8565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122de6123cc565b73ffffffffffffffffffffffffffffffffffffffff166122fc6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234990613fa8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b79061461d565b60405180910390fd5b6123c98161329a565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612438906146ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a690614739565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125899190613d0e565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fb906147c7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990614855565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156126fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f3906148bd565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d90614925565b60405180910390fd5b5f810361279d5761279883835f61362e565b613295565b600c5f9054906101000a900460ff1615612e45576127b96116a1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561282757506127f76116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561285f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612899575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b25750600660149054906101000a900460ff16155b15612e4457600c60019054906101000a900460ff166129a65760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612966575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c9061498d565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612b6a576129c26116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a4957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b695743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1d90614a41565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c07575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cae57600954811115612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890614acf565b60405180910390fd5b600b54612c5d83611478565b82612c689190613ff3565b1115612ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca090614b37565b60405180910390fd5b612e43565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d4b575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d9a57600954811115612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c90614bc5565b60405180910390fd5b612e42565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e4157600b54612df483611478565b82612dff9190613ff3565b1115612e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3790614b37565b60405180910390fd5b5b5b5b5b5b5f612e4f30611478565b90505f600a548210159050808015612e735750600c60029054906101000a900460ff165b8015612e8c5750600660149054906101000a900460ff16155b8015612edf5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f32575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f85575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fc8576001600660146101000a81548160ff021916908315150217905550612fad6138a3565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613077575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613080575f90505b5f811561328557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130de57505f601254115b156131765761310b60646130fd60125488613a7290919063ffffffff16565b613a8790919063ffffffff16565b90506012546014548261311e91906140eb565b6131289190614159565b60165f8282546131389190613ff3565b925050819055506012546013548261315091906140eb565b61315a9190614159565b60155f82825461316a9190613ff3565b92505081905550613262565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131cd57505f600f54115b15613261576131fa60646131ec600f5488613a7290919063ffffffff16565b613a8790919063ffffffff16565b9050600f546011548261320d91906140eb565b6132179190614159565b60165f8282546132279190613ff3565b92505081905550600f546010548261323f91906140eb565b6132499190614159565b60155f8282546132599190613ff3565b925050819055505b5b5f8111156132765761327587308361362e565b5b80856132829190614be3565b94505b61329087878761362e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561341757613416614c16565b5b6040519080825280602002602001820160405280156134455781602001602082028036833780820191505090505b50905030815f8151811061345c5761345b614c43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135239190614c84565b8160018151811061353757613536614c43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061359c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123d3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135fd959493929190614d9f565b5f604051808303815f87803b158015613614575f80fd5b505af1158015613626573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361369c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613693906147c7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361370a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370190614855565b60405180910390fd5b613715838383613a9c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378f90614e67565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546138269190613ff3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161388a9190613d0e565b60405180910390a361389d848484613aa1565b50505050565b5f6138ad30611478565b90505f6016546015546138c09190613ff3565b90505f8083036138d257505050613a70565b6014600a546138e191906140eb565b8311156138fa576014600a546138f791906140eb565b92505b5f479050613907846133fb565b5f61391b8247613aa690919063ffffffff16565b90505f6139458561393760165485613a7290919063ffffffff16565b613a8790919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161399a90614eb2565b5f6040518083038185875af1925050503d805f81146139d4576040519150601f19603f3d011682016040523d82523d5f602084013e6139d9565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a2490614eb2565b5f6040518083038185875af1925050503d805f8114613a5e576040519150601f19603f3d011682016040523d82523d5f602084013e613a63565b606091505b5050809450505050505050505b565b5f8183613a7f91906140eb565b905092915050565b5f8183613a949190614159565b905092915050565b505050565b505050565b5f8183613ab39190614be3565b905092915050565b5f80fd5b5f819050919050565b613ad181613abf565b8114613adb575f80fd5b50565b5f81359050613aec81613ac8565b92915050565b5f8060408385031215613b0857613b07613abb565b5b5f613b1585828601613ade565b9250506020613b2685828601613ade565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613b7282613b30565b613b7c8185613b3a565b9350613b8c818560208601613b4a565b613b9581613b58565b840191505092915050565b5f6020820190508181035f830152613bb88184613b68565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613be982613bc0565b9050919050565b613bf981613bdf565b8114613c03575f80fd5b50565b5f81359050613c1481613bf0565b92915050565b5f8060408385031215613c3057613c2f613abb565b5b5f613c3d85828601613c06565b9250506020613c4e85828601613ade565b9150509250929050565b5f8115159050919050565b613c6c81613c58565b82525050565b5f602082019050613c855f830184613c63565b92915050565b5f819050919050565b5f613cae613ca9613ca484613bc0565b613c8b565b613bc0565b9050919050565b5f613cbf82613c94565b9050919050565b5f613cd082613cb5565b9050919050565b613ce081613cc6565b82525050565b5f602082019050613cf95f830184613cd7565b92915050565b613d0881613abf565b82525050565b5f602082019050613d215f830184613cff565b92915050565b5f60208284031215613d3c57613d3b613abb565b5b5f613d4984828501613ade565b91505092915050565b5f805f60608486031215613d6957613d68613abb565b5b5f613d7686828701613c06565b9350506020613d8786828701613c06565b9250506040613d9886828701613ade565b9150509250925092565b613dab81613bdf565b82525050565b5f602082019050613dc45f830184613da2565b92915050565b5f60ff82169050919050565b613ddf81613dca565b82525050565b5f602082019050613df85f830184613dd6565b92915050565b5f60208284031215613e1357613e12613abb565b5b5f613e2084828501613c06565b91505092915050565b613e3281613c58565b8114613e3c575f80fd5b50565b5f81359050613e4d81613e29565b92915050565b5f8060408385031215613e6957613e68613abb565b5b5f613e7685828601613c06565b9250506020613e8785828601613e3f565b9150509250929050565b5f60208284031215613ea657613ea5613abb565b5b5f613eb384828501613e3f565b91505092915050565b5f805f8060808587031215613ed457613ed3613abb565b5b5f613ee187828801613ade565b9450506020613ef287828801613ade565b9350506040613f0387828801613ade565b9250506060613f1487828801613ade565b91505092959194509250565b5f8060408385031215613f3657613f35613abb565b5b5f613f4385828601613c06565b9250506020613f5485828601613c06565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613f92602083613b3a565b9150613f9d82613f5e565b602082019050919050565b5f6020820190508181035f830152613fbf81613f86565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ffd82613abf565b915061400883613abf565b92508282019050808211156140205761401f613fc6565b5b92915050565b7f4d757374206b656570206665657320617420373525206f72206c6573730000005f82015250565b5f61405a601d83613b3a565b915061406582614026565b602082019050919050565b5f6020820190508181035f8301526140878161404e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806140d257607f821691505b6020821081036140e5576140e461408e565b5b50919050565b5f6140f582613abf565b915061410083613abf565b925082820261410e81613abf565b9150828204841483151761412557614124613fc6565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61416382613abf565b915061416e83613abf565b92508261417e5761417d61412c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f6141bd602083613b3a565b91506141c882614189565b602082019050919050565b5f6020820190508181035f8301526141ea816141b1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f61424b602583613b3a565b9150614256826141f1565b604082019050919050565b5f6020820190508181035f8301526142788161423f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6142d9602883613b3a565b91506142e48261427f565b604082019050919050565b5f6020820190508181035f830152614306816142cd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614367603983613b3a565b91506143728261430d565b604082019050919050565b5f6020820190508181035f8301526143948161435b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6143f5602583613b3a565b91506144008261439b565b604082019050919050565b5f6020820190508181035f830152614422816143e9565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f61445d600c83613b3a565b915061446882614429565b602082019050919050565b5f6020820190508181035f83015261448a81614451565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6144eb603583613b3a565b91506144f682614491565b604082019050919050565b5f6020820190508181035f830152614518816144df565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614579603483613b3a565b91506145848261451f565b604082019050919050565b5f6020820190508181035f8301526145a68161456d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614607602683613b3a565b9150614612826145ad565b604082019050919050565b5f6020820190508181035f830152614634816145fb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614695602483613b3a565b91506146a08261463b565b604082019050919050565b5f6020820190508181035f8301526146c281614689565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614723602283613b3a565b915061472e826146c9565b604082019050919050565b5f6020820190508181035f83015261475081614717565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6147b1602583613b3a565b91506147bc82614757565b604082019050919050565b5f6020820190508181035f8301526147de816147a5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61483f602383613b3a565b915061484a826147e5565b604082019050919050565b5f6020820190508181035f83015261486c81614833565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f6148a7601183613b3a565b91506148b282614873565b602082019050919050565b5f6020820190508181035f8301526148d48161489b565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f61490f600f83613b3a565b915061491a826148db565b602082019050919050565b5f6020820190508181035f83015261493c81614903565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614977601683613b3a565b915061498282614943565b602082019050919050565b5f6020820190508181035f8301526149a48161496b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614a2b604983613b3a565b9150614a36826149ab565b606082019050919050565b5f6020820190508181035f830152614a5881614a1f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614ab9602683613b3a565b9150614ac482614a5f565b604082019050919050565b5f6020820190508181035f830152614ae681614aad565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614b21601383613b3a565b9150614b2c82614aed565b602082019050919050565b5f6020820190508181035f830152614b4e81614b15565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614baf602783613b3a565b9150614bba82614b55565b604082019050919050565b5f6020820190508181035f830152614bdc81614ba3565b9050919050565b5f614bed82613abf565b9150614bf883613abf565b9250828203905081811115614c1057614c0f613fc6565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614c7e81613bf0565b92915050565b5f60208284031215614c9957614c98613abb565b5b5f614ca684828501614c70565b91505092915050565b5f819050919050565b5f614cd2614ccd614cc884614caf565b613c8b565b613abf565b9050919050565b614ce281614cb8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614d1a81613bdf565b82525050565b5f614d2b8383614d11565b60208301905092915050565b5f602082019050919050565b5f614d4d82614ce8565b614d578185614cf2565b9350614d6283614d02565b805f5b83811015614d92578151614d798882614d20565b9750614d8483614d37565b925050600181019050614d65565b5085935050505092915050565b5f60a082019050614db25f830188613cff565b614dbf6020830187614cd9565b8181036040830152614dd18186614d43565b9050614de06060830185613da2565b614ded6080830184613cff565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614e51602683613b3a565b9150614e5c82614df7565b604082019050919050565b5f6020820190508181035f830152614e7e81614e45565b9050919050565b5f81905092915050565b50565b5f614e9d5f83614e85565b9150614ea882614e8f565b5f82019050919050565b5f614ebc82614e92565b915081905091905056fea2646970667358221220395111b3acdba3ce7160d0f84407fbc2c56b8b2ebb3674f88ab61807b54c6e0b64736f6c634300081a0033

Deployed Bytecode Sourcemap

15207:13125:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21156:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2904:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3818:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15284:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3225:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19460:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19713:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3995:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15377:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15606:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15505;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3124:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4495:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15342:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15640:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22558:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16091:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19980:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20837:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15984:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15720:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3341:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1026:103;;;;;;;;;;;;;:::i;:::-;;15539:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18683:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15914:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18563:112;;;;;;;;;;;;;:::i;:::-;;803:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16019:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20131:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3012:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21672:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15951:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16129:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16057:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4718:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15469:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3476:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16333:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26685:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22389:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15680:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21482:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20239:590;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15831:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18955:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15880:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3659:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15566:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16276:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18812:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22180:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21156:318;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21294:13:::1;21275:16;:32;;;;21331:7;21318:10;:20;;;;21384:10;;21365:16;;:29;;;;:::i;:::-;21349:13;:45;;;;21430:2;21413:13;;:19;;21405:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21156:318:::0;;:::o;2904:100::-;2958:13;2991:5;2984:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2904:100;:::o;3818:169::-;3901:4;3918:39;3927:12;:10;:12::i;:::-;3941:7;3950:6;3918:8;:39::i;:::-;3975:4;3968:11;;3818:169;;;;:::o;15284:51::-;;;:::o;3225:108::-;3286:7;3313:12;;3306:19;;3225:108;:::o;19460:245::-;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19597:4:::1;19589;19584:1;19568:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19567:26;;;;:::i;:::-;19566:35;;;;:::i;:::-;19556:6;:45;;19534:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;19690:6;19680;:17;;;;:::i;:::-;19672:5;:25;;;;19460:245:::0;:::o;19713:259::-;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19854:4:::1;19846;19841:1;19825:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19824:26;;;;:::i;:::-;19823:35;;;;:::i;:::-;19813:6;:45;;19791:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;19957:6;19947;:17;;;;:::i;:::-;19934:10;:30;;;;19713:259:::0;:::o;3995:492::-;4135:4;4152:36;4162:6;4170:9;4181:6;4152:9;:36::i;:::-;4201:24;4228:11;:19;4240:6;4228:19;;;;;;;;;;;;;;;:33;4248:12;:10;:12::i;:::-;4228:33;;;;;;;;;;;;;;;;4201:60;;4300:6;4280:16;:26;;4272:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4387:57;4396:6;4404:12;:10;:12::i;:::-;4437:6;4418:16;:25;4387:8;:57::i;:::-;4475:4;4468:11;;;3995:492;;;;;:::o;15377:53::-;15423:6;15377:53;:::o;15606:25::-;;;;:::o;15505:::-;;;;;;;;;;;;;:::o;3124:93::-;3182:5;3207:2;3200:9;;3124:93;:::o;4495:215::-;4583:4;4600:80;4609:12;:10;:12::i;:::-;4623:7;4669:10;4632:11;:25;4644:12;:10;:12::i;:::-;4632:25;;;;;;;;;;;;;;;:34;4658:7;4632:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4600:8;:80::i;:::-;4698:4;4691:11;;4495:215;;;;:::o;15342:28::-;;;;;;;;;;;;;:::o;15640:33::-;;;;;;;;;;;;;:::o;22558:126::-;22624:4;22648:19;:28;22668:7;22648:28;;;;;;;;;;;;;;;;;;;;;;;;;22641:35;;22558:126;;;:::o;16091:31::-;;;;:::o;19980:143::-;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20111:4:::1;20084:16;:24;20101:6;20084:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;19980:143:::0;;:::o;20837:311::-;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20973:13:::1;20955:15;:31;;;;21009:7;20997:9;:19;;;;21060:9;;21042:15;;:27;;;;:::i;:::-;21027:12;:42;;;;21104:2;21088:12;;:18;;21080:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20837:311:::0;;:::o;15984:28::-;;;;:::o;15720:31::-;;;;;;;;;;;;;:::o;3341:127::-;3415:7;3442:9;:18;3452:7;3442:18;;;;;;;;;;;;;;;;3435:25;;3341:127;;;:::o;1026:103::-;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1091:30:::1;1118:1;1091:18;:30::i;:::-;1026:103::o:0;15539:20::-;;;;:::o;18683:121::-;18735:4;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18769:5:::1;18752:14;;:22;;;;;;;;;;;;;;;;;;18792:4;18785:11;;18683:121:::0;:::o;15914:30::-;;;;:::o;18563:112::-;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18634:4:::1;18618:13;;:20;;;;;;;;;;;;;;;;;;18663:4;18649:11;;:18;;;;;;;;;;;;;;;;;;18563:112::o:0;803:87::-;849:7;876:6;;;;;;;;;;;869:13;;803:87;:::o;16019:31::-;;;;:::o;20131:100::-;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20216:7:::1;20202:11;;:21;;;;;;;;;;;;;;;;;;20131:100:::0;:::o;3012:104::-;3068:13;3101:7;3094:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3012:104;:::o;21672:304::-;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21816:13:::1;;;;;;;;;;;21808:21;;:4;:21;;::::0;21786:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21927:41;21956:4;21962:5;21927:28;:41::i;:::-;21672:304:::0;;:::o;15951:24::-;;;;:::o;16129:27::-;;;;:::o;16057:25::-;;;;:::o;4718:413::-;4811:4;4828:24;4855:11;:25;4867:12;:10;:12::i;:::-;4855:25;;;;;;;;;;;;;;;:34;4881:7;4855:34;;;;;;;;;;;;;;;;4828:61;;4928:15;4908:16;:35;;4900:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5021:67;5030:12;:10;:12::i;:::-;5044:7;5072:15;5053:16;:34;5021:8;:67::i;:::-;5119:4;5112:11;;;4718:413;;;;:::o;15469:29::-;;;;;;;;;;;;;:::o;3476:175::-;3562:4;3579:42;3589:12;:10;:12::i;:::-;3603:9;3614:6;3579:9;:42::i;:::-;3639:4;3632:11;;3476:175;;;;:::o;16333:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;26685:222::-;26765:14;;;;;;;;;;;26749:30;;:12;:10;:12::i;:::-;:30;;;26741:39;;;;;;26809:24;26827:4;26809:9;:24::i;:::-;26799:6;:34;;:48;;;;;26846:1;26837:6;:10;26799:48;26791:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26875:24;26892:6;26875:16;:24::i;:::-;26685:222;:::o;22389:161::-;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22498:10:::1;;;;;;;;;;;22469:40;;22487:9;22469:40;;;;;;;;;;;;22533:9;22520:10;;:22;;;;;;;;;;;;;;;;;;22389:161:::0;:::o;15680:33::-;;;;;;;;;;;;;:::o;21482:182::-;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21598:8:::1;21567:19;:28;21587:7;21567:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21638:7;21622:34;;;21647:8;21622:34;;;;;;:::i;:::-;;;;;;;;21482:182:::0;;:::o;20239:590::-;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20438:16:::1;20420:15;:34;;;;20477:10;20465:9;:22;;;;20531:9;;20513:15;;:27;;;;:::i;:::-;20498:12;:42;;;;20570:17;20551:16;:36;;;;20611:11;20598:10;:24;;;;20668:10;;20649:16;;:29;;;;:::i;:::-;20633:13;:45;;;;20713:2;20697:12;;:18;;20689:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20785:2;20768:13;;:19;;20760:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20239:590:::0;;;;:::o;15831:40::-;;;;;;;;;;;;;:::o;18955:497::-;19063:4;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19142:6:::1;19137:1;19121:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19120:28;;;;:::i;:::-;19107:9;:41;;19085:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;19297:4;19292:1;19276:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19275:26;;;;:::i;:::-;19262:9;:39;;19240:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;19413:9;19392:18;:30;;;;19440:4;19433:11;;18955:497:::0;;;:::o;15880:27::-;;;;:::o;3659:151::-;3748:7;3775:11;:18;3787:5;3775:18;;;;;;;;;;;;;;;:27;3794:7;3775:27;;;;;;;;;;;;;;;;3768:34;;3659:151;;;;:::o;15566:33::-;;;;:::o;16276:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;18812:135::-;18872:4;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18912:5:::1;18889:20;;:28;;;;;;;;;;;;;;;;;;18935:4;18928:11;;18812:135:::0;:::o;22180:201::-;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22313:14:::1;;;;;;;;;;;22272:56;;22294:17;22272:56;;;;;;;;;;;;22356:17;22339:14;;:34;;;;;;;;;;;;;;;;;;22180:201:::0;:::o;1137:::-;949:12;:10;:12::i;:::-;938:23;;:7;:5;:7::i;:::-;:23;;;930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1246:1:::1;1226:22;;:8;:22;;::::0;1218:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1302:28;1321:8;1302:18;:28::i;:::-;1137:201:::0;:::o;349:98::-;402:7;429:10;422:17;;349:98;:::o;6886:380::-;7039:1;7022:19;;:5;:19;;;7014:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7120:1;7101:21;;:7;:21;;;7093:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7204:6;7174:11;:18;7186:5;7174:18;;;;;;;;;;;;;;;:27;7193:7;7174:27;;;;;;;;;;;;;;;:36;;;;7242:7;7226:32;;7235:5;7226:32;;;7251:6;7226:32;;;;;;:::i;:::-;;;;;;;;6886:380;;;:::o;22742:3820::-;22890:1;22874:18;;:4;:18;;;22866:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22967:1;22953:16;;:2;:16;;;22945:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23029:12;:18;23042:4;23029:18;;;;;;;;;;;;;;;;;;;;;;;;;23028:19;23020:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;23089:12;:16;23102:2;23089:16;;;;;;;;;;;;;;;;;;;;;;;;;23088:17;23080:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;23152:1;23142:6;:11;23138:93;;23170:28;23186:4;23192:2;23196:1;23170:15;:28::i;:::-;23213:7;;23138:93;23247:14;;;;;;;;;;;23243:1666;;;23290:7;:5;:7::i;:::-;23282:15;;:4;:15;;;;:49;;;;;23324:7;:5;:7::i;:::-;23318:13;;:2;:13;;;;23282:49;:86;;;;;23366:1;23352:16;;:2;:16;;;;23282:86;:128;;;;;23403:6;23389:21;;:2;:21;;;;23282:128;:158;;;;;23432:8;;;;;;;;;;;23431:9;23282:158;23278:1620;;;23466:13;;;;;;;;;;;23461:150;;23512:19;:25;23532:4;23512:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23541:19;:23;23561:2;23541:23;;;;;;;;;;;;;;;;;;;;;;;;;23512:52;23504:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;23461:150;23767:20;;;;;;;;;;;23763:425;;;23822:7;:5;:7::i;:::-;23816:13;;:2;:13;;;;:47;;;;;23847:15;23833:30;;:2;:30;;;;23816:47;:79;;;;;23881:13;;;;;;;;;;;23867:28;;:2;:28;;;;23816:79;23812:357;;;23974:12;23932:28;:39;23961:9;23932:39;;;;;;;;;;;;;;;;:54;23924:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24133:12;24091:28;:39;24120:9;24091:39;;;;;;;;;;;;;;;:54;;;;23812:357;23763:425;24240:25;:31;24266:4;24240:31;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;24276:16;:20;24293:2;24276:20;;;;;;;;;;;;;;;;;;;;;;;;;24275:21;24240:56;24236:647;;;24339:5;;24329:6;:15;;24321:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24444:10;;24427:13;24437:2;24427:9;:13::i;:::-;24418:6;:22;;;;:::i;:::-;:36;;24410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24236:647;;;24554:25;:29;24580:2;24554:29;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;24588:16;:22;24605:4;24588:22;;;;;;;;;;;;;;;;;;;;;;;;;24587:23;24554:56;24550:333;;;24653:5;;24643:6;:15;;24635:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24550:333;;;24750:16;:20;24767:2;24750:20;;;;;;;;;;;;;;;;;;;;;;;;;24745:138;;24829:10;;24812:13;24822:2;24812:9;:13::i;:::-;24803:6;:22;;;;:::i;:::-;:36;;24795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24745:138;24550:333;24236:647;23278:1620;23243:1666;24921:28;24952:24;24970:4;24952:9;:24::i;:::-;24921:55;;24987:12;25026:18;;25002:20;:42;;24987:57;;25061:7;:35;;;;;25085:11;;;;;;;;;;;25061:35;:61;;;;;25114:8;;;;;;;;;;;25113:9;25061:61;:110;;;;;25140:25;:31;25166:4;25140:31;;;;;;;;;;;;;;;;;;;;;;;;;25139:32;25061:110;:153;;;;;25189:19;:25;25209:4;25189:25;;;;;;;;;;;;;;;;;;;;;;;;;25188:26;25061:153;:194;;;;;25232:19;:23;25252:2;25232:23;;;;;;;;;;;;;;;;;;;;;;;;;25231:24;25061:194;25057:302;;;25283:4;25272:8;;:15;;;;;;;;;;;;;;;;;;25304:10;:8;:10::i;:::-;25342:5;25331:8;;:16;;;;;;;;;;;;;;;;;;25057:302;25371:12;25387:8;;;;;;;;;;;25386:9;25371:24;;25497:19;:25;25517:4;25497:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25526:19;:23;25546:2;25526:23;;;;;;;;;;;;;;;;;;;;;;;;;25497:52;25493:100;;;25576:5;25566:15;;25493:100;25605:12;25710:7;25706:803;;;25762:25;:29;25788:2;25762:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;25811:1;25795:13;;:17;25762:50;25758:602;;;25840:34;25870:3;25840:25;25851:13;;25840:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;25833:41;;25931:13;;25917:10;;25910:4;:17;;;;:::i;:::-;25909:35;;;;:::i;:::-;25893:12;;:51;;;;;;;:::i;:::-;;;;;;;;26011:13;;25991:16;;25984:4;:23;;;;:::i;:::-;25983:41;;;;:::i;:::-;25963:16;;:61;;;;;;;:::i;:::-;;;;;;;;25758:602;;;26086:25;:31;26112:4;26086:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26136:1;26121:12;;:16;26086:51;26082:278;;;26165:33;26194:3;26165:24;26176:12;;26165:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26158:40;;26254:12;;26241:9;;26234:4;:16;;;;:::i;:::-;26233:33;;;;:::i;:::-;26217:12;;:49;;;;;;;:::i;:::-;;;;;;;;26332:12;;26313:15;;26306:4;:22;;;;:::i;:::-;26305:39;;;;:::i;:::-;26285:16;;:59;;;;;;;:::i;:::-;;;;;;;;26082:278;25758:602;26387:1;26380:4;:8;26376:91;;;26409:42;26425:4;26439;26446;26409:15;:42::i;:::-;26376:91;26493:4;26483:14;;;;;:::i;:::-;;;25706:803;26521:33;26537:4;26543:2;26547:6;26521:15;:33::i;:::-;22855:3707;;;;22742:3820;;;;:::o;1346:191::-;1420:16;1439:6;;;;;;;;;;;1420:25;;1465:8;1456:6;;:17;;;;;;;;;;;;;;;;;;1520:8;1489:40;;1510:8;1489:40;;;;;;;;;;;;1409:128;1346:191;:::o;21984:188::-;22101:5;22067:25;:31;22093:4;22067:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22158:5;22124:40;;22152:4;22124:40;;;;;;;;;;;;21984:188;;:::o;26916:529::-;26982:21;27020:1;27006:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26982:40;;27051:4;27033;27038:1;27033:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27077:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27067:4;27072:1;27067:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27112:62;27129:4;27144:15;27162:11;27112:8;:62::i;:::-;27213:15;:66;;;27294:11;27320:1;27364:4;27391;27411:15;27213:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26971:474;26916:529;:::o;5139:733::-;5297:1;5279:20;;:6;:20;;;5271:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5381:1;5360:23;;:9;:23;;;5352:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5436:47;5457:6;5465:9;5476:6;5436:20;:47::i;:::-;5496:21;5520:9;:17;5530:6;5520:17;;;;;;;;;;;;;;;;5496:41;;5573:6;5556:13;:23;;5548:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5694:6;5678:13;:22;5658:9;:17;5668:6;5658:17;;;;;;;;;;;;;;;:42;;;;5746:6;5722:9;:20;5732:9;5722:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5787:9;5770:35;;5779:6;5770:35;;;5798:6;5770:35;;;;;;:::i;:::-;;;;;;;;5818:46;5838:6;5846:9;5857:6;5818:19;:46::i;:::-;5260:612;5139:733;;;:::o;27453:876::-;27492:23;27518:24;27536:4;27518:9;:24::i;:::-;27492:50;;27553:25;27600:12;;27581:16;;:31;;;;:::i;:::-;27553:59;;27623:12;27671:1;27652:15;:20;27648:59;;27689:7;;;;;27648:59;27762:2;27741:18;;:23;;;;:::i;:::-;27723:15;:41;27719:115;;;27820:2;27799:18;;:23;;;;:::i;:::-;27781:41;;27719:115;27846:25;27874:21;27846:49;;27906:33;27923:15;27906:16;:33::i;:::-;27952:18;27973:44;27999:17;27973:21;:25;;:44;;;;:::i;:::-;27952:65;;28028:17;28048:51;28081:17;28048:28;28063:12;;28048:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;28028:71;;28131:1;28112:16;:20;;;;28158:1;28143:12;:16;;;;28194:10;;;;;;;;;;;28186:24;;28218:9;28186:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28172:60;;;;;28265:14;;;;;;;;;;;28257:28;;28294:21;28257:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28243:78;;;;;27481:848;;;;;;27453:876;:::o;8892:98::-;8950:7;8981:1;8977;:5;;;;:::i;:::-;8970:12;;8892:98;;;;:::o;8998:::-;9056:7;9087:1;9083;:5;;;;:::i;:::-;9076:12;;8998:98;;;;:::o;7274:125::-;;;;:::o;7407:124::-;;;;:::o;8786:98::-;8844:7;8875:1;8871;:5;;;;:::i;:::-;8864:12;;8786:98;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:139::-;1539:6;1534:3;1529;1523:23;1580:1;1571:6;1566:3;1562:16;1555:27;1450:139;;;:::o;1595:102::-;1636:6;1687:2;1683:7;1678:2;1671:5;1667:14;1663:28;1653:38;;1595:102;;;:::o;1703:377::-;1791:3;1819:39;1852:5;1819:39;:::i;:::-;1874:71;1938:6;1933:3;1874:71;:::i;:::-;1867:78;;1954:65;2012:6;2007:3;2000:4;1993:5;1989:16;1954:65;:::i;:::-;2044:29;2066:6;2044:29;:::i;:::-;2039:3;2035:39;2028:46;;1795:285;1703:377;;;;:::o;2086:313::-;2199:4;2237:2;2226:9;2222:18;2214:26;;2286:9;2280:4;2276:20;2272:1;2261:9;2257:17;2250:47;2314:78;2387:4;2378:6;2314:78;:::i;:::-;2306:86;;2086:313;;;;:::o;2405:126::-;2442:7;2482:42;2475:5;2471:54;2460:65;;2405:126;;;:::o;2537:96::-;2574:7;2603:24;2621:5;2603:24;:::i;:::-;2592:35;;2537:96;;;:::o;2639:122::-;2712:24;2730:5;2712:24;:::i;:::-;2705:5;2702:35;2692:63;;2751:1;2748;2741:12;2692:63;2639:122;:::o;2767:139::-;2813:5;2851:6;2838:20;2829:29;;2867:33;2894:5;2867:33;:::i;:::-;2767:139;;;;:::o;2912:474::-;2980:6;2988;3037:2;3025:9;3016:7;3012:23;3008:32;3005:119;;;3043:79;;:::i;:::-;3005:119;3163:1;3188:53;3233:7;3224:6;3213:9;3209:22;3188:53;:::i;:::-;3178:63;;3134:117;3290:2;3316:53;3361:7;3352:6;3341:9;3337:22;3316:53;:::i;:::-;3306:63;;3261:118;2912:474;;;;;:::o;3392:90::-;3426:7;3469:5;3462:13;3455:21;3444:32;;3392:90;;;:::o;3488:109::-;3569:21;3584:5;3569:21;:::i;:::-;3564:3;3557:34;3488:109;;:::o;3603:210::-;3690:4;3728:2;3717:9;3713:18;3705:26;;3741:65;3803:1;3792:9;3788:17;3779:6;3741:65;:::i;:::-;3603:210;;;;:::o;3819:60::-;3847:3;3868:5;3861:12;;3819:60;;;:::o;3885:142::-;3935:9;3968:53;3986:34;3995:24;4013:5;3995:24;:::i;:::-;3986:34;:::i;:::-;3968:53;:::i;:::-;3955:66;;3885:142;;;:::o;4033:126::-;4083:9;4116:37;4147:5;4116:37;:::i;:::-;4103:50;;4033:126;;;:::o;4165:153::-;4242:9;4275:37;4306:5;4275:37;:::i;:::-;4262:50;;4165:153;;;:::o;4324:185::-;4438:64;4496:5;4438:64;:::i;:::-;4433:3;4426:77;4324:185;;:::o;4515:276::-;4635:4;4673:2;4662:9;4658:18;4650:26;;4686:98;4781:1;4770:9;4766:17;4757:6;4686:98;:::i;:::-;4515:276;;;;:::o;4797:118::-;4884:24;4902:5;4884:24;:::i;:::-;4879:3;4872:37;4797:118;;:::o;4921:222::-;5014:4;5052:2;5041:9;5037:18;5029:26;;5065:71;5133:1;5122:9;5118:17;5109:6;5065:71;:::i;:::-;4921:222;;;;:::o;5149:329::-;5208:6;5257:2;5245:9;5236:7;5232:23;5228:32;5225:119;;;5263:79;;:::i;:::-;5225:119;5383:1;5408:53;5453:7;5444:6;5433:9;5429:22;5408:53;:::i;:::-;5398:63;;5354:117;5149:329;;;;:::o;5484:619::-;5561:6;5569;5577;5626:2;5614:9;5605:7;5601:23;5597:32;5594:119;;;5632:79;;:::i;:::-;5594:119;5752:1;5777:53;5822:7;5813:6;5802:9;5798:22;5777:53;:::i;:::-;5767:63;;5723:117;5879:2;5905:53;5950:7;5941:6;5930:9;5926:22;5905:53;:::i;:::-;5895:63;;5850:118;6007:2;6033:53;6078:7;6069:6;6058:9;6054:22;6033:53;:::i;:::-;6023:63;;5978:118;5484:619;;;;;:::o;6109:118::-;6196:24;6214:5;6196:24;:::i;:::-;6191:3;6184:37;6109:118;;:::o;6233:222::-;6326:4;6364:2;6353:9;6349:18;6341:26;;6377:71;6445:1;6434:9;6430:17;6421:6;6377:71;:::i;:::-;6233:222;;;;:::o;6461:86::-;6496:7;6536:4;6529:5;6525:16;6514:27;;6461:86;;;:::o;6553:112::-;6636:22;6652:5;6636:22;:::i;:::-;6631:3;6624:35;6553:112;;:::o;6671:214::-;6760:4;6798:2;6787:9;6783:18;6775:26;;6811:67;6875:1;6864:9;6860:17;6851:6;6811:67;:::i;:::-;6671:214;;;;:::o;6891:329::-;6950:6;6999:2;6987:9;6978:7;6974:23;6970:32;6967:119;;;7005:79;;:::i;:::-;6967:119;7125:1;7150:53;7195:7;7186:6;7175:9;7171:22;7150:53;:::i;:::-;7140:63;;7096:117;6891:329;;;;:::o;7226:116::-;7296:21;7311:5;7296:21;:::i;:::-;7289:5;7286:32;7276:60;;7332:1;7329;7322:12;7276:60;7226:116;:::o;7348:133::-;7391:5;7429:6;7416:20;7407:29;;7445:30;7469:5;7445:30;:::i;:::-;7348:133;;;;:::o;7487:468::-;7552:6;7560;7609:2;7597:9;7588:7;7584:23;7580:32;7577:119;;;7615:79;;:::i;:::-;7577:119;7735:1;7760:53;7805:7;7796:6;7785:9;7781:22;7760:53;:::i;:::-;7750:63;;7706:117;7862:2;7888:50;7930:7;7921:6;7910:9;7906:22;7888:50;:::i;:::-;7878:60;;7833:115;7487:468;;;;;:::o;7961:323::-;8017:6;8066:2;8054:9;8045:7;8041:23;8037:32;8034:119;;;8072:79;;:::i;:::-;8034:119;8192:1;8217:50;8259:7;8250:6;8239:9;8235:22;8217:50;:::i;:::-;8207:60;;8163:114;7961:323;;;;:::o;8290:765::-;8376:6;8384;8392;8400;8449:3;8437:9;8428:7;8424:23;8420:33;8417:120;;;8456:79;;:::i;:::-;8417:120;8576:1;8601:53;8646:7;8637:6;8626:9;8622:22;8601:53;:::i;:::-;8591:63;;8547:117;8703:2;8729:53;8774:7;8765:6;8754:9;8750:22;8729:53;:::i;:::-;8719:63;;8674:118;8831:2;8857:53;8902:7;8893:6;8882:9;8878:22;8857:53;:::i;:::-;8847:63;;8802:118;8959:2;8985:53;9030:7;9021:6;9010:9;9006:22;8985:53;:::i;:::-;8975:63;;8930:118;8290:765;;;;;;;:::o;9061:474::-;9129:6;9137;9186:2;9174:9;9165:7;9161:23;9157:32;9154:119;;;9192:79;;:::i;:::-;9154:119;9312:1;9337:53;9382:7;9373:6;9362:9;9358:22;9337:53;:::i;:::-;9327:63;;9283:117;9439:2;9465:53;9510:7;9501:6;9490:9;9486:22;9465:53;:::i;:::-;9455:63;;9410:118;9061:474;;;;;:::o;9541:182::-;9681:34;9677:1;9669:6;9665:14;9658:58;9541:182;:::o;9729:366::-;9871:3;9892:67;9956:2;9951:3;9892:67;:::i;:::-;9885:74;;9968:93;10057:3;9968:93;:::i;:::-;10086:2;10081:3;10077:12;10070:19;;9729:366;;;:::o;10101:419::-;10267:4;10305:2;10294:9;10290:18;10282:26;;10354:9;10348:4;10344:20;10340:1;10329:9;10325:17;10318:47;10382:131;10508:4;10382:131;:::i;:::-;10374:139;;10101:419;;;:::o;10526:180::-;10574:77;10571:1;10564:88;10671:4;10668:1;10661:15;10695:4;10692:1;10685:15;10712:191;10752:3;10771:20;10789:1;10771:20;:::i;:::-;10766:25;;10805:20;10823:1;10805:20;:::i;:::-;10800:25;;10848:1;10845;10841:9;10834:16;;10869:3;10866:1;10863:10;10860:36;;;10876:18;;:::i;:::-;10860:36;10712:191;;;;:::o;10909:179::-;11049:31;11045:1;11037:6;11033:14;11026:55;10909:179;:::o;11094:366::-;11236:3;11257:67;11321:2;11316:3;11257:67;:::i;:::-;11250:74;;11333:93;11422:3;11333:93;:::i;:::-;11451:2;11446:3;11442:12;11435:19;;11094:366;;;:::o;11466:419::-;11632:4;11670:2;11659:9;11655:18;11647:26;;11719:9;11713:4;11709:20;11705:1;11694:9;11690:17;11683:47;11747:131;11873:4;11747:131;:::i;:::-;11739:139;;11466:419;;;:::o;11891:180::-;11939:77;11936:1;11929:88;12036:4;12033:1;12026:15;12060:4;12057:1;12050:15;12077:320;12121:6;12158:1;12152:4;12148:12;12138:22;;12205:1;12199:4;12195:12;12226:18;12216:81;;12282:4;12274:6;12270:17;12260:27;;12216:81;12344:2;12336:6;12333:14;12313:18;12310:38;12307:84;;12363:18;;:::i;:::-;12307:84;12128:269;12077:320;;;:::o;12403:410::-;12443:7;12466:20;12484:1;12466:20;:::i;:::-;12461:25;;12500:20;12518:1;12500:20;:::i;:::-;12495:25;;12555:1;12552;12548:9;12577:30;12595:11;12577:30;:::i;:::-;12566:41;;12756:1;12747:7;12743:15;12740:1;12737:22;12717:1;12710:9;12690:83;12667:139;;12786:18;;:::i;:::-;12667:139;12451:362;12403:410;;;;:::o;12819:180::-;12867:77;12864:1;12857:88;12964:4;12961:1;12954:15;12988:4;12985:1;12978:15;13005:185;13045:1;13062:20;13080:1;13062:20;:::i;:::-;13057:25;;13096:20;13114:1;13096:20;:::i;:::-;13091:25;;13135:1;13125:35;;13140:18;;:::i;:::-;13125:35;13182:1;13179;13175:9;13170:14;;13005:185;;;;:::o;13196:182::-;13336:34;13332:1;13324:6;13320:14;13313:58;13196:182;:::o;13384:366::-;13526:3;13547:67;13611:2;13606:3;13547:67;:::i;:::-;13540:74;;13623:93;13712:3;13623:93;:::i;:::-;13741:2;13736:3;13732:12;13725:19;;13384:366;;;:::o;13756:419::-;13922:4;13960:2;13949:9;13945:18;13937:26;;14009:9;14003:4;13999:20;13995:1;13984:9;13980:17;13973:47;14037:131;14163:4;14037:131;:::i;:::-;14029:139;;13756:419;;;:::o;14181:224::-;14321:34;14317:1;14309:6;14305:14;14298:58;14390:7;14385:2;14377:6;14373:15;14366:32;14181:224;:::o;14411:366::-;14553:3;14574:67;14638:2;14633:3;14574:67;:::i;:::-;14567:74;;14650:93;14739:3;14650:93;:::i;:::-;14768:2;14763:3;14759:12;14752:19;;14411:366;;;:::o;14783:419::-;14949:4;14987:2;14976:9;14972:18;14964:26;;15036:9;15030:4;15026:20;15022:1;15011:9;15007:17;15000:47;15064:131;15190:4;15064:131;:::i;:::-;15056:139;;14783:419;;;:::o;15208:227::-;15348:34;15344:1;15336:6;15332:14;15325:58;15417:10;15412:2;15404:6;15400:15;15393:35;15208:227;:::o;15441:366::-;15583:3;15604:67;15668:2;15663:3;15604:67;:::i;:::-;15597:74;;15680:93;15769:3;15680:93;:::i;:::-;15798:2;15793:3;15789:12;15782:19;;15441:366;;;:::o;15813:419::-;15979:4;16017:2;16006:9;16002:18;15994:26;;16066:9;16060:4;16056:20;16052:1;16041:9;16037:17;16030:47;16094:131;16220:4;16094:131;:::i;:::-;16086:139;;15813:419;;;:::o;16238:244::-;16378:34;16374:1;16366:6;16362:14;16355:58;16447:27;16442:2;16434:6;16430:15;16423:52;16238:244;:::o;16488:366::-;16630:3;16651:67;16715:2;16710:3;16651:67;:::i;:::-;16644:74;;16727:93;16816:3;16727:93;:::i;:::-;16845:2;16840:3;16836:12;16829:19;;16488:366;;;:::o;16860:419::-;17026:4;17064:2;17053:9;17049:18;17041:26;;17113:9;17107:4;17103:20;17099:1;17088:9;17084:17;17077:47;17141:131;17267:4;17141:131;:::i;:::-;17133:139;;16860:419;;;:::o;17285:224::-;17425:34;17421:1;17413:6;17409:14;17402:58;17494:7;17489:2;17481:6;17477:15;17470:32;17285:224;:::o;17515:366::-;17657:3;17678:67;17742:2;17737:3;17678:67;:::i;:::-;17671:74;;17754:93;17843:3;17754:93;:::i;:::-;17872:2;17867:3;17863:12;17856:19;;17515:366;;;:::o;17887:419::-;18053:4;18091:2;18080:9;18076:18;18068:26;;18140:9;18134:4;18130:20;18126:1;18115:9;18111:17;18104:47;18168:131;18294:4;18168:131;:::i;:::-;18160:139;;17887:419;;;:::o;18312:162::-;18452:14;18448:1;18440:6;18436:14;18429:38;18312:162;:::o;18480:366::-;18622:3;18643:67;18707:2;18702:3;18643:67;:::i;:::-;18636:74;;18719:93;18808:3;18719:93;:::i;:::-;18837:2;18832:3;18828:12;18821:19;;18480:366;;;:::o;18852:419::-;19018:4;19056:2;19045:9;19041:18;19033:26;;19105:9;19099:4;19095:20;19091:1;19080:9;19076:17;19069:47;19133:131;19259:4;19133:131;:::i;:::-;19125:139;;18852:419;;;:::o;19277:240::-;19417:34;19413:1;19405:6;19401:14;19394:58;19486:23;19481:2;19473:6;19469:15;19462:48;19277:240;:::o;19523:366::-;19665:3;19686:67;19750:2;19745:3;19686:67;:::i;:::-;19679:74;;19762:93;19851:3;19762:93;:::i;:::-;19880:2;19875:3;19871:12;19864:19;;19523:366;;;:::o;19895:419::-;20061:4;20099:2;20088:9;20084:18;20076:26;;20148:9;20142:4;20138:20;20134:1;20123:9;20119:17;20112:47;20176:131;20302:4;20176:131;:::i;:::-;20168:139;;19895:419;;;:::o;20320:239::-;20460:34;20456:1;20448:6;20444:14;20437:58;20529:22;20524:2;20516:6;20512:15;20505:47;20320:239;:::o;20565:366::-;20707:3;20728:67;20792:2;20787:3;20728:67;:::i;:::-;20721:74;;20804:93;20893:3;20804:93;:::i;:::-;20922:2;20917:3;20913:12;20906:19;;20565:366;;;:::o;20937:419::-;21103:4;21141:2;21130:9;21126:18;21118:26;;21190:9;21184:4;21180:20;21176:1;21165:9;21161:17;21154:47;21218:131;21344:4;21218:131;:::i;:::-;21210:139;;20937:419;;;:::o;21362:225::-;21502:34;21498:1;21490:6;21486:14;21479:58;21571:8;21566:2;21558:6;21554:15;21547:33;21362:225;:::o;21593:366::-;21735:3;21756:67;21820:2;21815:3;21756:67;:::i;:::-;21749:74;;21832:93;21921:3;21832:93;:::i;:::-;21950:2;21945:3;21941:12;21934:19;;21593:366;;;:::o;21965:419::-;22131:4;22169:2;22158:9;22154:18;22146:26;;22218:9;22212:4;22208:20;22204:1;22193:9;22189:17;22182:47;22246:131;22372:4;22246:131;:::i;:::-;22238:139;;21965:419;;;:::o;22390:223::-;22530:34;22526:1;22518:6;22514:14;22507:58;22599:6;22594:2;22586:6;22582:15;22575:31;22390:223;:::o;22619:366::-;22761:3;22782:67;22846:2;22841:3;22782:67;:::i;:::-;22775:74;;22858:93;22947:3;22858:93;:::i;:::-;22976:2;22971:3;22967:12;22960:19;;22619:366;;;:::o;22991:419::-;23157:4;23195:2;23184:9;23180:18;23172:26;;23244:9;23238:4;23234:20;23230:1;23219:9;23215:17;23208:47;23272:131;23398:4;23272:131;:::i;:::-;23264:139;;22991:419;;;:::o;23416:221::-;23556:34;23552:1;23544:6;23540:14;23533:58;23625:4;23620:2;23612:6;23608:15;23601:29;23416:221;:::o;23643:366::-;23785:3;23806:67;23870:2;23865:3;23806:67;:::i;:::-;23799:74;;23882:93;23971:3;23882:93;:::i;:::-;24000:2;23995:3;23991:12;23984:19;;23643:366;;;:::o;24015:419::-;24181:4;24219:2;24208:9;24204:18;24196:26;;24268:9;24262:4;24258:20;24254:1;24243:9;24239:17;24232:47;24296:131;24422:4;24296:131;:::i;:::-;24288:139;;24015:419;;;:::o;24440:224::-;24580:34;24576:1;24568:6;24564:14;24557:58;24649:7;24644:2;24636:6;24632:15;24625:32;24440:224;:::o;24670:366::-;24812:3;24833:67;24897:2;24892:3;24833:67;:::i;:::-;24826:74;;24909:93;24998:3;24909:93;:::i;:::-;25027:2;25022:3;25018:12;25011:19;;24670:366;;;:::o;25042:419::-;25208:4;25246:2;25235:9;25231:18;25223:26;;25295:9;25289:4;25285:20;25281:1;25270:9;25266:17;25259:47;25323:131;25449:4;25323:131;:::i;:::-;25315:139;;25042:419;;;:::o;25467:222::-;25607:34;25603:1;25595:6;25591:14;25584:58;25676:5;25671:2;25663:6;25659:15;25652:30;25467:222;:::o;25695:366::-;25837:3;25858:67;25922:2;25917:3;25858:67;:::i;:::-;25851:74;;25934:93;26023:3;25934:93;:::i;:::-;26052:2;26047:3;26043:12;26036:19;;25695:366;;;:::o;26067:419::-;26233:4;26271:2;26260:9;26256:18;26248:26;;26320:9;26314:4;26310:20;26306:1;26295:9;26291:17;26284:47;26348:131;26474:4;26348:131;:::i;:::-;26340:139;;26067:419;;;:::o;26492:167::-;26632:19;26628:1;26620:6;26616:14;26609:43;26492:167;:::o;26665:366::-;26807:3;26828:67;26892:2;26887:3;26828:67;:::i;:::-;26821:74;;26904:93;26993:3;26904:93;:::i;:::-;27022:2;27017:3;27013:12;27006:19;;26665:366;;;:::o;27037:419::-;27203:4;27241:2;27230:9;27226:18;27218:26;;27290:9;27284:4;27280:20;27276:1;27265:9;27261:17;27254:47;27318:131;27444:4;27318:131;:::i;:::-;27310:139;;27037:419;;;:::o;27462:165::-;27602:17;27598:1;27590:6;27586:14;27579:41;27462:165;:::o;27633:366::-;27775:3;27796:67;27860:2;27855:3;27796:67;:::i;:::-;27789:74;;27872:93;27961:3;27872:93;:::i;:::-;27990:2;27985:3;27981:12;27974:19;;27633:366;;;:::o;28005:419::-;28171:4;28209:2;28198:9;28194:18;28186:26;;28258:9;28252:4;28248:20;28244:1;28233:9;28229:17;28222:47;28286:131;28412:4;28286:131;:::i;:::-;28278:139;;28005:419;;;:::o;28430:172::-;28570:24;28566:1;28558:6;28554:14;28547:48;28430:172;:::o;28608:366::-;28750:3;28771:67;28835:2;28830:3;28771:67;:::i;:::-;28764:74;;28847:93;28936:3;28847:93;:::i;:::-;28965:2;28960:3;28956:12;28949:19;;28608:366;;;:::o;28980:419::-;29146:4;29184:2;29173:9;29169:18;29161:26;;29233:9;29227:4;29223:20;29219:1;29208:9;29204:17;29197:47;29261:131;29387:4;29261:131;:::i;:::-;29253:139;;28980:419;;;:::o;29405:297::-;29545:34;29541:1;29533:6;29529:14;29522:58;29614:34;29609:2;29601:6;29597:15;29590:59;29683:11;29678:2;29670:6;29666:15;29659:36;29405:297;:::o;29708:366::-;29850:3;29871:67;29935:2;29930:3;29871:67;:::i;:::-;29864:74;;29947:93;30036:3;29947:93;:::i;:::-;30065:2;30060:3;30056:12;30049:19;;29708:366;;;:::o;30080:419::-;30246:4;30284:2;30273:9;30269:18;30261:26;;30333:9;30327:4;30323:20;30319:1;30308:9;30304:17;30297:47;30361:131;30487:4;30361:131;:::i;:::-;30353:139;;30080:419;;;:::o;30505:225::-;30645:34;30641:1;30633:6;30629:14;30622:58;30714:8;30709:2;30701:6;30697:15;30690:33;30505:225;:::o;30736:366::-;30878:3;30899:67;30963:2;30958:3;30899:67;:::i;:::-;30892:74;;30975:93;31064:3;30975:93;:::i;:::-;31093:2;31088:3;31084:12;31077:19;;30736:366;;;:::o;31108:419::-;31274:4;31312:2;31301:9;31297:18;31289:26;;31361:9;31355:4;31351:20;31347:1;31336:9;31332:17;31325:47;31389:131;31515:4;31389:131;:::i;:::-;31381:139;;31108:419;;;:::o;31533:169::-;31673:21;31669:1;31661:6;31657:14;31650:45;31533:169;:::o;31708:366::-;31850:3;31871:67;31935:2;31930:3;31871:67;:::i;:::-;31864:74;;31947:93;32036:3;31947:93;:::i;:::-;32065:2;32060:3;32056:12;32049:19;;31708:366;;;:::o;32080:419::-;32246:4;32284:2;32273:9;32269:18;32261:26;;32333:9;32327:4;32323:20;32319:1;32308:9;32304:17;32297:47;32361:131;32487:4;32361:131;:::i;:::-;32353:139;;32080:419;;;:::o;32505:226::-;32645:34;32641:1;32633:6;32629:14;32622:58;32714:9;32709:2;32701:6;32697:15;32690:34;32505:226;:::o;32737:366::-;32879:3;32900:67;32964:2;32959:3;32900:67;:::i;:::-;32893:74;;32976:93;33065:3;32976:93;:::i;:::-;33094:2;33089:3;33085:12;33078:19;;32737:366;;;:::o;33109:419::-;33275:4;33313:2;33302:9;33298:18;33290:26;;33362:9;33356:4;33352:20;33348:1;33337:9;33333:17;33326:47;33390:131;33516:4;33390:131;:::i;:::-;33382:139;;33109:419;;;:::o;33534:194::-;33574:4;33594:20;33612:1;33594:20;:::i;:::-;33589:25;;33628:20;33646:1;33628:20;:::i;:::-;33623:25;;33672:1;33669;33665:9;33657:17;;33696:1;33690:4;33687:11;33684:37;;;33701:18;;:::i;:::-;33684:37;33534:194;;;;:::o;33734:180::-;33782:77;33779:1;33772:88;33879:4;33876:1;33869:15;33903:4;33900:1;33893:15;33920:180;33968:77;33965:1;33958:88;34065:4;34062:1;34055:15;34089:4;34086:1;34079:15;34106:143;34163:5;34194:6;34188:13;34179:22;;34210:33;34237:5;34210:33;:::i;:::-;34106:143;;;;:::o;34255:351::-;34325:6;34374:2;34362:9;34353:7;34349:23;34345:32;34342:119;;;34380:79;;:::i;:::-;34342:119;34500:1;34525:64;34581:7;34572:6;34561:9;34557:22;34525:64;:::i;:::-;34515:74;;34471:128;34255:351;;;;:::o;34612:85::-;34657:7;34686:5;34675:16;;34612:85;;;:::o;34703:158::-;34761:9;34794:61;34812:42;34821:32;34847:5;34821:32;:::i;:::-;34812:42;:::i;:::-;34794:61;:::i;:::-;34781:74;;34703:158;;;:::o;34867:147::-;34962:45;35001:5;34962:45;:::i;:::-;34957:3;34950:58;34867:147;;:::o;35020:114::-;35087:6;35121:5;35115:12;35105:22;;35020:114;;;:::o;35140:184::-;35239:11;35273:6;35268:3;35261:19;35313:4;35308:3;35304:14;35289:29;;35140:184;;;;:::o;35330:132::-;35397:4;35420:3;35412:11;;35450:4;35445:3;35441:14;35433:22;;35330:132;;;:::o;35468:108::-;35545:24;35563:5;35545:24;:::i;:::-;35540:3;35533:37;35468:108;;:::o;35582:179::-;35651:10;35672:46;35714:3;35706:6;35672:46;:::i;:::-;35750:4;35745:3;35741:14;35727:28;;35582:179;;;;:::o;35767:113::-;35837:4;35869;35864:3;35860:14;35852:22;;35767:113;;;:::o;35916:732::-;36035:3;36064:54;36112:5;36064:54;:::i;:::-;36134:86;36213:6;36208:3;36134:86;:::i;:::-;36127:93;;36244:56;36294:5;36244:56;:::i;:::-;36323:7;36354:1;36339:284;36364:6;36361:1;36358:13;36339:284;;;36440:6;36434:13;36467:63;36526:3;36511:13;36467:63;:::i;:::-;36460:70;;36553:60;36606:6;36553:60;:::i;:::-;36543:70;;36399:224;36386:1;36383;36379:9;36374:14;;36339:284;;;36343:14;36639:3;36632:10;;36040:608;;;35916:732;;;;:::o;36654:831::-;36917:4;36955:3;36944:9;36940:19;36932:27;;36969:71;37037:1;37026:9;37022:17;37013:6;36969:71;:::i;:::-;37050:80;37126:2;37115:9;37111:18;37102:6;37050:80;:::i;:::-;37177:9;37171:4;37167:20;37162:2;37151:9;37147:18;37140:48;37205:108;37308:4;37299:6;37205:108;:::i;:::-;37197:116;;37323:72;37391:2;37380:9;37376:18;37367:6;37323:72;:::i;:::-;37405:73;37473:3;37462:9;37458:19;37449:6;37405:73;:::i;:::-;36654:831;;;;;;;;:::o;37491:225::-;37631:34;37627:1;37619:6;37615:14;37608:58;37700:8;37695:2;37687:6;37683:15;37676:33;37491:225;:::o;37722:366::-;37864:3;37885:67;37949:2;37944:3;37885:67;:::i;:::-;37878:74;;37961:93;38050:3;37961:93;:::i;:::-;38079:2;38074:3;38070:12;38063:19;;37722:366;;;:::o;38094:419::-;38260:4;38298:2;38287:9;38283:18;38275:26;;38347:9;38341:4;38337:20;38333:1;38322:9;38318:17;38311:47;38375:131;38501:4;38375:131;:::i;:::-;38367:139;;38094:419;;;:::o;38519:147::-;38620:11;38657:3;38642:18;;38519:147;;;;:::o;38672:114::-;;:::o;38792:398::-;38951:3;38972:83;39053:1;39048:3;38972:83;:::i;:::-;38965:90;;39064:93;39153:3;39064:93;:::i;:::-;39182:1;39177:3;39173:11;39166:18;;38792:398;;;:::o;39196:379::-;39380:3;39402:147;39545:3;39402:147;:::i;:::-;39395:154;;39566:3;39559:10;;39196:379;;;:::o

Swarm Source

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