ETH Price: $2,479.09 (+0.10%)

Token

FriendLack (LCK)
 

Overview

Max Total Supply

10,000,000 LCK

Holders

64

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,953.711275326709612018 LCK

Value
$0.00
0x54850433Eac0AedBC7970CCac66BD1E1cceA3d31
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:
FriendLackToken

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Website: https://friendlack.tech
// Telegram: https://t.me/Friendlack
// Twitter: https://twitter.com/friendlack

// SPDX-License-Identifier: MIT
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private boosting;

    address private marketingWallet;
    address private developmentWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    bool public limitsInEffect = true;
    bool public liquidityBoostEnabled = true;

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public snipeProtectEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;

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


    mapping(address => bool) private isBlocked;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    mapping(address => bool) public automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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


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

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

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

        uint256 _buyMarketingFee = 1;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevelopmentFee = 28;

        uint256 _sellMarketingFee = 1;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevelopmentFee = 28;

        uint256 totalSupply = 10_000_000 * 1e18;

        maxTransactionAmount = (totalSupply * 10) / 1000;
        maxWallet = (totalSupply * 50) / 1000;
        swapTokensAtAmount = (totalSupply * 10) / 10000;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee;

        marketingWallet = address(0x1320311a71Ca667E41f9c7709a0Fb3A6d5A74Ad9);
        // Enter marketing wallet here

        developmentWallet = owner();
        // Enter development wallet here

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

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function updateLimits(bool enabled) external onlyOwner {
        limitsInEffect = enabled;
    }

    function updateSnipeProtect(bool enabled) external onlyOwner {
        snipeProtectEnabled = enabled;
    }

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

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

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

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

    function updateLiquidityBoostEnabled(bool enabled) external onlyOwner {
        liquidityBoostEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _developmentFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee;
        require(buyTotalFees <= 40, "Must keep fees at 40% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _developmentFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee;
        require(sellTotalFees <= 40, "Must keep fees at 40% or less");
    }

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

    function blockAddress(address account, bool blocked) external onlyOwner {
        isBlocked[account] = blocked;
    }

    function blockAddressMultiple(address[] memory accounts) external onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            isBlocked[accounts[i]] = true;
        }
    }

    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 updateMarketingWalletInfo(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateDevelopmentWalletInfo(address newWallet) external onlyOwner {
        emit developmentWalletUpdated(newWallet, developmentWallet);
        developmentWallet = newWallet;
    }

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


    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 from the zero address");

        require(!isBlocked[to], "ERC20: transfer to the blackListed address");
        require(!isBlocked[from], "ERC20: transfer from the blackListed address");

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !boosting
            ) {
                // at launch if the snipe protect is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (snipeProtectEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                            block.number,
                            "_transfer:: Transfer Protect enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canBoost = contractTokenBalance >= swapTokensAtAmount && automatedMarketMakerPairs[to] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to];

        bool takeFee = (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to];

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

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

            amount -= fees;

            // boost liquidity on sell
            if (canBoost && liquidityBoostEnabled && !boosting) {
                boosting = true;
                boostLiquidity();
                boosting = false;
            }
        }

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

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

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

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

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

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


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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

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

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

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

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

    function rescueExtraEth() external onlyOwner {
        (bool success,) = msg.sender.call{value : address(this).balance}("");
        require(success, "RESCUE EXTRA ETH FAILED!");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"blocked","type":"bool"}],"name":"blockAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"blockAddressMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBoostEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueExtraEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipeProtectEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevelopmentWalletInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateLiquidityBoostEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWalletInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSnipeProtect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600a81526020017f467269656e644c61636b000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4c434b00000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000acc565b5080600490805190602001906200010092919062000acc565b50505062000123620001176200058c60201b60201c565b6200059460201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200014f8160016200065a60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f5919062000be6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000283919062000be6565b6040518363ffffffff1660e01b8152600401620002a292919062000c29565b6020604051808303816000875af1158015620002c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e8919062000be6565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033060a05160016200065a60201b60201c565b6200034560a05160016200074460201b60201c565b6000600190506000600190506000601c90506000600190506000600190506000601c905060006a084595161401484a00000090506103e8600a826200038b919062000c8f565b62000397919062000d1f565b6008819055506103e8603282620003af919062000c8f565b620003bb919062000d1f565b600a81905550612710600a82620003d3919062000c8f565b620003df919062000d1f565b60098190555086600f819055508560108190555084601181905550601154601054600f546200040f919062000d57565b6200041b919062000d57565b600e819055508360138190555082601481905550816015819055506015546014546013546200044b919062000d57565b62000457919062000d57565b601281905550731320311a71ca667e41f9c7709a0fb3a6d5a74ad9600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004c2620007e560201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200052462000516620007e560201b60201c565b60016200080f60201b60201c565b620005373060016200080f60201b60201c565b620005596200054b620007e560201b60201c565b60016200065a60201b60201c565b6200056c3060016200065a60201b60201c565b6200057e33826200094960201b60201c565b505050505050505062000f76565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200066a6200058c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000690620007e560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e09062000e15565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200081f6200058c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000845620007e560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200089e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008959062000e15565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200093d919062000e54565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009b39062000ec1565b60405180910390fd5b620009d06000838362000ac260201b60201c565b8060026000828254620009e4919062000d57565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a3b919062000d57565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aa2919062000ef4565b60405180910390a362000abe6000838362000ac760201b60201c565b5050565b505050565b505050565b82805462000ada9062000f40565b90600052602060002090601f01602090048101928262000afe576000855562000b4a565b82601f1062000b1957805160ff191683800117855562000b4a565b8280016001018555821562000b4a579182015b8281111562000b4957825182559160200191906001019062000b2c565b5b50905062000b59919062000b5d565b5090565b5b8082111562000b7857600081600090555060010162000b5e565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bae8262000b81565b9050919050565b62000bc08162000ba1565b811462000bcc57600080fd5b50565b60008151905062000be08162000bb5565b92915050565b60006020828403121562000bff5762000bfe62000b7c565b5b600062000c0f8482850162000bcf565b91505092915050565b62000c238162000ba1565b82525050565b600060408201905062000c40600083018562000c18565b62000c4f602083018462000c18565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c9c8262000c56565b915062000ca98362000c56565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ce55762000ce462000c60565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d2c8262000c56565b915062000d398362000c56565b92508262000d4c5762000d4b62000cf0565b5b828204905092915050565b600062000d648262000c56565b915062000d718362000c56565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000da95762000da862000c60565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000dfd60208362000db4565b915062000e0a8262000dc5565b602082019050919050565b6000602082019050818103600083015262000e308162000dee565b9050919050565b60008115159050919050565b62000e4e8162000e37565b82525050565b600060208201905062000e6b600083018462000e43565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ea9601f8362000db4565b915062000eb68262000e71565b602082019050919050565b6000602082019050818103600083015262000edc8162000e9a565b9050919050565b62000eee8162000c56565b82525050565b600060208201905062000f0b600083018462000ee3565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f5957607f821691505b6020821081141562000f705762000f6f62000f11565b5b50919050565b60805160a05161552762000fd46000396000818161102c01528181611aa201526129bd015260008181610d1d0152818161296501528181613ae901528181613bca01528181613bf101528181613c8d0152613cb401526155276000f3fe6080604052600436106103035760003560e01c80637bce5a0411610190578063c0246668116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610ba1578063f2fde38b14610bcc578063f637434214610bf5578063f8b45b0514610c205761030a565b8063dd62ed3e14610b10578063e2f4560514610b4d578063ec0d498214610b785761030a565b8063c024666814610a02578063c17b5b8c14610a2b578063c18bc19514610a54578063c8c8ebe414610a7d578063d257b34f14610aa8578063d85ba06314610ae55761030a565b80639a7a23d611610149578063a9059cbb11610123578063a9059cbb14610934578063aef3724d14610971578063b20414111461099a578063b62496f5146109c55761030a565b80639a7a23d6146108a35780639fccce32146108cc578063a457c2d7146108f75761030a565b80637bce5a04146107a55780637d831a8b146107d05780638095d564146107f95780638da5cb5b14610822578063921369131461084d57806395d89b41146108785761030a565b806349bd5a5e1161024f578063594573ad1161020857806370a08231116101e257806370a08231146106ff578063715018a61461073c57806374326f53146107535780637571336a1461077c5761030a565b8063594573ad146106945780636a486a8e146106bd5780636e4faa00146106e85761030a565b806349bd5a5e146105845780634a62bb65146105af5780634cf38517146105da5780634fbee193146106055780635181544a14610642578063535e02d81461066b5761030a565b80631a8145bb116102bc57806323b872dd1161029657806323b872dd146104b457806330cf6831146104f1578063313ce5671461051c57806339509351146105475761030a565b80631a8145bb146104355780631f3fed8f14610460578063203e727e1461048b5761030a565b806306fdde031461030f578063095ea7b31461033a57806310d5de53146103775780631694505e146103b457806318160ddd146103df57806318a94cf11461040a5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c4b565b6040516103319190613e01565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613ecb565b610cdd565b60405161036e9190613f26565b60405180910390f35b34801561038357600080fd5b5061039e60048036038101906103999190613f41565b610cfb565b6040516103ab9190613f26565b60405180910390f35b3480156103c057600080fd5b506103c9610d1b565b6040516103d69190613fcd565b60405180910390f35b3480156103eb57600080fd5b506103f4610d3f565b6040516104019190613ff7565b60405180910390f35b34801561041657600080fd5b5061041f610d49565b60405161042c9190613ff7565b60405180910390f35b34801561044157600080fd5b5061044a610d4f565b6040516104579190613ff7565b60405180910390f35b34801561046c57600080fd5b50610475610d55565b6040516104829190613ff7565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190614012565b610d5b565b005b3480156104c057600080fd5b506104db60048036038101906104d6919061403f565b610e6a565b6040516104e89190613f26565b60405180910390f35b3480156104fd57600080fd5b50610506610f62565b6040516105139190613f26565b60405180910390f35b34801561052857600080fd5b50610531610f75565b60405161053e91906140ae565b60405180910390f35b34801561055357600080fd5b5061056e60048036038101906105699190613ecb565b610f7e565b60405161057b9190613f26565b60405180910390f35b34801561059057600080fd5b5061059961102a565b6040516105a691906140d8565b60405180910390f35b3480156105bb57600080fd5b506105c461104e565b6040516105d19190613f26565b60405180910390f35b3480156105e657600080fd5b506105ef611061565b6040516105fc9190613f26565b60405180910390f35b34801561061157600080fd5b5061062c60048036038101906106279190613f41565b611074565b6040516106399190613f26565b60405180910390f35b34801561064e57600080fd5b506106696004803603810190610664919061423b565b6110ca565b005b34801561067757600080fd5b50610692600480360381019061068d9190613f41565b6111db565b005b3480156106a057600080fd5b506106bb60048036038101906106b691906142b0565b611317565b005b3480156106c957600080fd5b506106d26113b0565b6040516106df9190613ff7565b60405180910390f35b3480156106f457600080fd5b506106fd6113b6565b005b34801561070b57600080fd5b5061072660048036038101906107219190613f41565b6114e1565b6040516107339190613ff7565b60405180910390f35b34801561074857600080fd5b50610751611529565b005b34801561075f57600080fd5b5061077a600480360381019061077591906142b0565b6115b1565b005b34801561078857600080fd5b506107a3600480360381019061079e91906142dd565b61164a565b005b3480156107b157600080fd5b506107ba611721565b6040516107c79190613ff7565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f29190613f41565b611727565b005b34801561080557600080fd5b50610820600480360381019061081b919061431d565b611863565b005b34801561082e57600080fd5b50610837611962565b60405161084491906140d8565b60405180910390f35b34801561085957600080fd5b5061086261198c565b60405161086f9190613ff7565b60405180910390f35b34801561088457600080fd5b5061088d611992565b60405161089a9190613e01565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c591906142dd565b611a24565b005b3480156108d857600080fd5b506108e1611b3d565b6040516108ee9190613ff7565b60405180910390f35b34801561090357600080fd5b5061091e60048036038101906109199190613ecb565b611b43565b60405161092b9190613f26565b60405180910390f35b34801561094057600080fd5b5061095b60048036038101906109569190613ecb565b611c2e565b6040516109689190613f26565b60405180910390f35b34801561097d57600080fd5b50610998600480360381019061099391906142b0565b611c4c565b005b3480156109a657600080fd5b506109af611ce5565b6040516109bc9190613ff7565b60405180910390f35b3480156109d157600080fd5b506109ec60048036038101906109e79190613f41565b611ceb565b6040516109f99190613f26565b60405180910390f35b348015610a0e57600080fd5b50610a296004803603810190610a2491906142dd565b611d0b565b005b348015610a3757600080fd5b50610a526004803603810190610a4d919061431d565b611e30565b005b348015610a6057600080fd5b50610a7b6004803603810190610a769190614012565b611f2f565b005b348015610a8957600080fd5b50610a9261203e565b604051610a9f9190613ff7565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca9190614012565b612044565b604051610adc9190613f26565b60405180910390f35b348015610af157600080fd5b50610afa612199565b604051610b079190613ff7565b60405180910390f35b348015610b1c57600080fd5b50610b376004803603810190610b329190614370565b61219f565b604051610b449190613ff7565b60405180910390f35b348015610b5957600080fd5b50610b62612226565b604051610b6f9190613ff7565b60405180910390f35b348015610b8457600080fd5b50610b9f6004803603810190610b9a91906142dd565b61222c565b005b348015610bad57600080fd5b50610bb6612303565b604051610bc39190613ff7565b60405180910390f35b348015610bd857600080fd5b50610bf36004803603810190610bee9190613f41565b612309565b005b348015610c0157600080fd5b50610c0a612401565b604051610c179190613ff7565b60405180910390f35b348015610c2c57600080fd5b50610c35612407565b604051610c429190613ff7565b60405180910390f35b606060038054610c5a906143df565b80601f0160208091040260200160405190810160405280929190818152602001828054610c86906143df565b8015610cd35780601f10610ca857610100808354040283529160200191610cd3565b820191906000526020600020905b815481529060010190602001808311610cb657829003601f168201915b5050505050905090565b6000610cf1610cea61240d565b8484612415565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60155481565b60175481565b60165481565b610d6361240d565b73ffffffffffffffffffffffffffffffffffffffff16610d81611962565b73ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce9061445d565b60405180910390fd5b670de0b6b3a76400006103e86001610ded610d3f565b610df791906144ac565b610e019190614535565b610e0b9190614535565b811015610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e44906145d8565b60405180910390fd5b670de0b6b3a764000081610e6191906144ac565b60088190555050565b6000610e778484846125e0565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ec261240d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f399061466a565b60405180910390fd5b610f5685610f4e61240d565b858403612415565b60019150509392505050565b600d60009054906101000a900460ff1681565b60006012905090565b6000611020610f8b61240d565b848460016000610f9961240d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461101b919061468a565b612415565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110d261240d565b73ffffffffffffffffffffffffffffffffffffffff166110f0611962565b73ffffffffffffffffffffffffffffffffffffffff1614611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113d9061445d565b60405180910390fd5b60005b81518110156111d75760016019600084848151811061116b5761116a6146e0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111cf9061470f565b915050611149565b5050565b6111e361240d565b73ffffffffffffffffffffffffffffffffffffffff16611201611962565b73ffffffffffffffffffffffffffffffffffffffff1614611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e9061445d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61131f61240d565b73ffffffffffffffffffffffffffffffffffffffff1661133d611962565b73ffffffffffffffffffffffffffffffffffffffff1614611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a9061445d565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60125481565b6113be61240d565b73ffffffffffffffffffffffffffffffffffffffff166113dc611962565b73ffffffffffffffffffffffffffffffffffffffff1614611432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114299061445d565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161145890614789565b60006040518083038185875af1925050503d8060008114611495576040519150601f19603f3d011682016040523d82523d6000602084013e61149a565b606091505b50509050806114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d5906147ea565b60405180910390fd5b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61153161240d565b73ffffffffffffffffffffffffffffffffffffffff1661154f611962565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c9061445d565b60405180910390fd5b6115af600061332f565b565b6115b961240d565b73ffffffffffffffffffffffffffffffffffffffff166115d7611962565b73ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116249061445d565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b61165261240d565b73ffffffffffffffffffffffffffffffffffffffff16611670611962565b73ffffffffffffffffffffffffffffffffffffffff16146116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd9061445d565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b61172f61240d565b73ffffffffffffffffffffffffffffffffffffffff1661174d611962565b73ffffffffffffffffffffffffffffffffffffffff16146117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a9061445d565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61186b61240d565b73ffffffffffffffffffffffffffffffffffffffff16611889611962565b73ffffffffffffffffffffffffffffffffffffffff16146118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d69061445d565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f54611907919061468a565b611911919061468a565b600e819055506028600e54111561195d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195490614856565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6060600480546119a1906143df565b80601f01602080910402602001604051908101604052809291908181526020018280546119cd906143df565b8015611a1a5780601f106119ef57610100808354040283529160200191611a1a565b820191906000526020600020905b8154815290600101906020018083116119fd57829003601f168201915b5050505050905090565b611a2c61240d565b73ffffffffffffffffffffffffffffffffffffffff16611a4a611962565b73ffffffffffffffffffffffffffffffffffffffff1614611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a979061445d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b26906148e8565b60405180910390fd5b611b3982826133f5565b5050565b60185481565b60008060016000611b5261240d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c069061497a565b60405180910390fd5b611c23611c1a61240d565b85858403612415565b600191505092915050565b6000611c42611c3b61240d565b84846125e0565b6001905092915050565b611c5461240d565b73ffffffffffffffffffffffffffffffffffffffff16611c72611962565b73ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf9061445d565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b60115481565b601c6020528060005260406000206000915054906101000a900460ff1681565b611d1361240d565b73ffffffffffffffffffffffffffffffffffffffff16611d31611962565b73ffffffffffffffffffffffffffffffffffffffff1614611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e9061445d565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e249190613f26565b60405180910390a25050565b611e3861240d565b73ffffffffffffffffffffffffffffffffffffffff16611e56611962565b73ffffffffffffffffffffffffffffffffffffffff1614611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea39061445d565b60405180910390fd5b826013819055508160148190555080601581905550601554601454601354611ed4919061468a565b611ede919061468a565b60128190555060286012541115611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2190614856565b60405180910390fd5b505050565b611f3761240d565b73ffffffffffffffffffffffffffffffffffffffff16611f55611962565b73ffffffffffffffffffffffffffffffffffffffff1614611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa29061445d565b60405180910390fd5b670de0b6b3a76400006103e86005611fc1610d3f565b611fcb91906144ac565b611fd59190614535565b611fdf9190614535565b811015612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201890614a0c565b60405180910390fd5b670de0b6b3a76400008161203591906144ac565b600a8190555050565b60085481565b600061204e61240d565b73ffffffffffffffffffffffffffffffffffffffff1661206c611962565b73ffffffffffffffffffffffffffffffffffffffff16146120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b99061445d565b60405180910390fd5b620186a060016120d0610d3f565b6120da91906144ac565b6120e49190614535565b821015612126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211d90614a9e565b60405180910390fd5b6103e86005612133610d3f565b61213d91906144ac565b6121479190614535565b821115612189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218090614b30565b60405180910390fd5b8160098190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b61223461240d565b73ffffffffffffffffffffffffffffffffffffffff16612252611962565b73ffffffffffffffffffffffffffffffffffffffff16146122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229f9061445d565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b61231161240d565b73ffffffffffffffffffffffffffffffffffffffff1661232f611962565b73ffffffffffffffffffffffffffffffffffffffff1614612385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c9061445d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ec90614bc2565b60405180910390fd5b6123fe8161332f565b50565b60145481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247c90614c54565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec90614ce6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125d39190613ff7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264790614d78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b790614d78565b60405180910390fd5b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490614e0a565b60405180910390fd5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d190614e9c565b60405180910390fd5b60008114156127f4576127ef83836000613496565b61332a565b600b60009054906101000a900460ff1615612dc257612811611962565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561287f575061284f611962565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128f2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561290b5750600560149054906101000a900460ff16155b15612dc157600d60009054906101000a900460ff1615612ad85761292d611962565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156129b457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a0c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ad75743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8990614f54565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b7b5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c2257600854811115612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc90614fe6565b60405180910390fd5b600a54612bd1836114e1565b82612bdc919061468a565b1115612c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1490615052565b60405180910390fd5b612dc0565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cc55750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d1457600854811115612d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d06906150e4565b60405180910390fd5b612dbf565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612dbe57600a54612d71836114e1565b82612d7c919061468a565b1115612dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db490615052565b60405180910390fd5b5b5b5b5b5b6000612dcd306114e1565b905060006009548210158015612e2c5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612e825750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ed85750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90506000601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f7d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612fd35750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130295750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90506000811561331a57601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561308e57506000601254115b1561315b576130bb60646130ad6012548861371790919063ffffffff16565b61372d90919063ffffffff16565b9050601254601454826130ce91906144ac565b6130d89190614535565b601760008282546130e9919061468a565b925050819055506012546015548261310191906144ac565b61310b9190614535565b6018600082825461311c919061468a565b925050819055506012546013548261313491906144ac565b61313e9190614535565b6016600082825461314f919061468a565b92505081905550613280565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b657506000600e54115b1561327f576131e360646131d5600e548861371790919063ffffffff16565b61372d90919063ffffffff16565b9050600e54601054826131f691906144ac565b6132009190614535565b60176000828254613211919061468a565b92505081905550600e546011548261322991906144ac565b6132339190614535565b60186000828254613244919061468a565b92505081905550600e54600f548261325c91906144ac565b6132669190614535565b60166000828254613277919061468a565b925050819055505b5b600081111561329557613294873083613496565b5b80856132a19190615104565b94508280156132bc5750600b60019054906101000a900460ff165b80156132d55750600560149054906101000a900460ff16155b15613319576001600560146101000a81548160ff0219169083151502179055506132fd613743565b6000600560146101000a81548160ff0219169083151502179055505b5b613325878787613496565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fd90614d78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356d906151aa565b60405180910390fd5b613581838383613a2a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fe9061523c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461369a919061468a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136fe9190613ff7565b60405180910390a3613711848484613a2f565b50505050565b6000818361372591906144ac565b905092915050565b6000818361373b9190614535565b905092915050565b600061374e306114e1565b90506000601854601654601754613765919061468a565b61376f919061468a565b90506000808314806137815750600082145b1561378e57505050613a28565b601460095461379d91906144ac565b8311156137b65760146009546137b391906144ac565b92505b6000600283601754866137c991906144ac565b6137d39190614535565b6137dd9190614535565b905060006137f48286613a3490919063ffffffff16565b9050600047905061380482613a4a565b60006138198247613a3490919063ffffffff16565b90506000613844876138366016548561371790919063ffffffff16565b61372d90919063ffffffff16565b9050600061386f886138616018548661371790919063ffffffff16565b61372d90919063ffffffff16565b905060008183856138809190615104565b61388a9190615104565b9050600060178190555060006016819055506000601881905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516138ea90614789565b60006040518083038185875af1925050503d8060008114613927576040519150601f19603f3d011682016040523d82523d6000602084013e61392c565b606091505b5050809850506000871180156139425750600081115b1561398f576139518782613c87565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826017546040516139869392919061525c565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516139d590614789565b60006040518083038185875af1925050503d8060008114613a12576040519150601f19603f3d011682016040523d82523d6000602084013e613a17565b606091505b505080985050505050505050505050505b565b505050565b505050565b60008183613a429190615104565b905092915050565b6000600267ffffffffffffffff811115613a6757613a666140f8565b5b604051908082528060200260200182016040528015613a955781602001602082028036833780820191505090505b5090503081600081518110613aad57613aac6146e0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7691906152a8565b81600181518110613b8a57613b896146e0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bef307f000000000000000000000000000000000000000000000000000000000000000084612415565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c519594939291906153ce565b600060405180830381600087803b158015613c6b57600080fd5b505af1158015613c7f573d6000803e3d6000fd5b505050505050565b613cb2307f000000000000000000000000000000000000000000000000000000000000000084612415565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613cfc611962565b426040518863ffffffff1660e01b8152600401613d1e96959493929190615428565b60606040518083038185885af1158015613d3c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d61919061549e565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613da2578082015181840152602081019050613d87565b83811115613db1576000848401525b50505050565b6000601f19601f8301169050919050565b6000613dd382613d68565b613ddd8185613d73565b9350613ded818560208601613d84565b613df681613db7565b840191505092915050565b60006020820190508181036000830152613e1b8184613dc8565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e6282613e37565b9050919050565b613e7281613e57565b8114613e7d57600080fd5b50565b600081359050613e8f81613e69565b92915050565b6000819050919050565b613ea881613e95565b8114613eb357600080fd5b50565b600081359050613ec581613e9f565b92915050565b60008060408385031215613ee257613ee1613e2d565b5b6000613ef085828601613e80565b9250506020613f0185828601613eb6565b9150509250929050565b60008115159050919050565b613f2081613f0b565b82525050565b6000602082019050613f3b6000830184613f17565b92915050565b600060208284031215613f5757613f56613e2d565b5b6000613f6584828501613e80565b91505092915050565b6000819050919050565b6000613f93613f8e613f8984613e37565b613f6e565b613e37565b9050919050565b6000613fa582613f78565b9050919050565b6000613fb782613f9a565b9050919050565b613fc781613fac565b82525050565b6000602082019050613fe26000830184613fbe565b92915050565b613ff181613e95565b82525050565b600060208201905061400c6000830184613fe8565b92915050565b60006020828403121561402857614027613e2d565b5b600061403684828501613eb6565b91505092915050565b60008060006060848603121561405857614057613e2d565b5b600061406686828701613e80565b935050602061407786828701613e80565b925050604061408886828701613eb6565b9150509250925092565b600060ff82169050919050565b6140a881614092565b82525050565b60006020820190506140c3600083018461409f565b92915050565b6140d281613e57565b82525050565b60006020820190506140ed60008301846140c9565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61413082613db7565b810181811067ffffffffffffffff8211171561414f5761414e6140f8565b5b80604052505050565b6000614162613e23565b905061416e8282614127565b919050565b600067ffffffffffffffff82111561418e5761418d6140f8565b5b602082029050602081019050919050565b600080fd5b60006141b76141b284614173565b614158565b905080838252602082019050602084028301858111156141da576141d961419f565b5b835b8181101561420357806141ef8882613e80565b8452602084019350506020810190506141dc565b5050509392505050565b600082601f830112614222576142216140f3565b5b81356142328482602086016141a4565b91505092915050565b60006020828403121561425157614250613e2d565b5b600082013567ffffffffffffffff81111561426f5761426e613e32565b5b61427b8482850161420d565b91505092915050565b61428d81613f0b565b811461429857600080fd5b50565b6000813590506142aa81614284565b92915050565b6000602082840312156142c6576142c5613e2d565b5b60006142d48482850161429b565b91505092915050565b600080604083850312156142f4576142f3613e2d565b5b600061430285828601613e80565b92505060206143138582860161429b565b9150509250929050565b60008060006060848603121561433657614335613e2d565b5b600061434486828701613eb6565b935050602061435586828701613eb6565b925050604061436686828701613eb6565b9150509250925092565b6000806040838503121561438757614386613e2d565b5b600061439585828601613e80565b92505060206143a685828601613e80565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143f757607f821691505b6020821081141561440b5761440a6143b0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614447602083613d73565b915061445282614411565b602082019050919050565b600060208201905081810360008301526144768161443a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144b782613e95565b91506144c283613e95565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144fb576144fa61447d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061454082613e95565b915061454b83613e95565b92508261455b5761455a614506565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006145c2602f83613d73565b91506145cd82614566565b604082019050919050565b600060208201905081810360008301526145f1816145b5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614654602883613d73565b915061465f826145f8565b604082019050919050565b6000602082019050818103600083015261468381614647565b9050919050565b600061469582613e95565b91506146a083613e95565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146d5576146d461447d565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061471a82613e95565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561474d5761474c61447d565b5b600182019050919050565b600081905092915050565b50565b6000614773600083614758565b915061477e82614763565b600082019050919050565b600061479482614766565b9150819050919050565b7f52455343554520455854524120455448204641494c4544210000000000000000600082015250565b60006147d4601883613d73565b91506147df8261479e565b602082019050919050565b60006020820190508181036000830152614803816147c7565b9050919050565b7f4d757374206b656570206665657320617420343025206f72206c657373000000600082015250565b6000614840601d83613d73565b915061484b8261480a565b602082019050919050565b6000602082019050818103600083015261486f81614833565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006148d2603983613d73565b91506148dd82614876565b604082019050919050565b60006020820190508181036000830152614901816148c5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614964602583613d73565b915061496f82614908565b604082019050919050565b6000602082019050818103600083015261499381614957565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006149f6602483613d73565b9150614a018261499a565b604082019050919050565b60006020820190508181036000830152614a25816149e9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614a88603583613d73565b9150614a9382614a2c565b604082019050919050565b60006020820190508181036000830152614ab781614a7b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614b1a603483613d73565b9150614b2582614abe565b604082019050919050565b60006020820190508181036000830152614b4981614b0d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bac602683613d73565b9150614bb782614b50565b604082019050919050565b60006020820190508181036000830152614bdb81614b9f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c3e602483613d73565b9150614c4982614be2565b604082019050919050565b60006020820190508181036000830152614c6d81614c31565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cd0602283613d73565b9150614cdb82614c74565b604082019050919050565b60006020820190508181036000830152614cff81614cc3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d62602583613d73565b9150614d6d82614d06565b604082019050919050565b60006020820190508181036000830152614d9181614d55565b9050919050565b7f45524332303a207472616e7366657220746f2074686520626c61636b4c69737460008201527f6564206164647265737300000000000000000000000000000000000000000000602082015250565b6000614df4602a83613d73565b9150614dff82614d98565b604082019050919050565b60006020820190508181036000830152614e2381614de7565b9050919050565b7f45524332303a207472616e736665722066726f6d2074686520626c61636b4c6960008201527f7374656420616464726573730000000000000000000000000000000000000000602082015250565b6000614e86602c83613d73565b9150614e9182614e2a565b604082019050919050565b60006020820190508181036000830152614eb581614e79565b9050919050565b7f5f7472616e736665723a3a205472616e736665722050726f7465637420656e6160008201527f626c65642e20204f6e6c79206f6e652070757263686173652070657220626c6f60208201527f636b20616c6c6f7765642e000000000000000000000000000000000000000000604082015250565b6000614f3e604b83613d73565b9150614f4982614ebc565b606082019050919050565b60006020820190508181036000830152614f6d81614f31565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614fd0603583613d73565b9150614fdb82614f74565b604082019050919050565b60006020820190508181036000830152614fff81614fc3565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061503c601383613d73565b915061504782615006565b602082019050919050565b6000602082019050818103600083015261506b8161502f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006150ce603683613d73565b91506150d982615072565b604082019050919050565b600060208201905081810360008301526150fd816150c1565b9050919050565b600061510f82613e95565b915061511a83613e95565b92508282101561512d5761512c61447d565b5b828203905092915050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615194602383613d73565b915061519f82615138565b604082019050919050565b600060208201905081810360008301526151c381615187565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615226602683613d73565b9150615231826151ca565b604082019050919050565b6000602082019050818103600083015261525581615219565b9050919050565b60006060820190506152716000830186613fe8565b61527e6020830185613fe8565b61528b6040830184613fe8565b949350505050565b6000815190506152a281613e69565b92915050565b6000602082840312156152be576152bd613e2d565b5b60006152cc84828501615293565b91505092915050565b6000819050919050565b60006152fa6152f56152f0846152d5565b613f6e565b613e95565b9050919050565b61530a816152df565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61534581613e57565b82525050565b6000615357838361533c565b60208301905092915050565b6000602082019050919050565b600061537b82615310565b615385818561531b565b93506153908361532c565b8060005b838110156153c15781516153a8888261534b565b97506153b383615363565b925050600181019050615394565b5085935050505092915050565b600060a0820190506153e36000830188613fe8565b6153f06020830187615301565b81810360408301526154028186615370565b905061541160608301856140c9565b61541e6080830184613fe8565b9695505050505050565b600060c08201905061543d60008301896140c9565b61544a6020830188613fe8565b6154576040830187615301565b6154646060830186615301565b61547160808301856140c9565b61547e60a0830184613fe8565b979650505050505050565b60008151905061549881613e9f565b92915050565b6000806000606084860312156154b7576154b6613e2d565b5b60006154c586828701615489565b93505060206154d686828701615489565b92505060406154e786828701615489565b915050925092509256fea2646970667358221220e8d47fff8b78c5648a076ae0f0db5d2048a61177660843eb9fcfd74b700cc3ce64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80637bce5a0411610190578063c0246668116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610ba1578063f2fde38b14610bcc578063f637434214610bf5578063f8b45b0514610c205761030a565b8063dd62ed3e14610b10578063e2f4560514610b4d578063ec0d498214610b785761030a565b8063c024666814610a02578063c17b5b8c14610a2b578063c18bc19514610a54578063c8c8ebe414610a7d578063d257b34f14610aa8578063d85ba06314610ae55761030a565b80639a7a23d611610149578063a9059cbb11610123578063a9059cbb14610934578063aef3724d14610971578063b20414111461099a578063b62496f5146109c55761030a565b80639a7a23d6146108a35780639fccce32146108cc578063a457c2d7146108f75761030a565b80637bce5a04146107a55780637d831a8b146107d05780638095d564146107f95780638da5cb5b14610822578063921369131461084d57806395d89b41146108785761030a565b806349bd5a5e1161024f578063594573ad1161020857806370a08231116101e257806370a08231146106ff578063715018a61461073c57806374326f53146107535780637571336a1461077c5761030a565b8063594573ad146106945780636a486a8e146106bd5780636e4faa00146106e85761030a565b806349bd5a5e146105845780634a62bb65146105af5780634cf38517146105da5780634fbee193146106055780635181544a14610642578063535e02d81461066b5761030a565b80631a8145bb116102bc57806323b872dd1161029657806323b872dd146104b457806330cf6831146104f1578063313ce5671461051c57806339509351146105475761030a565b80631a8145bb146104355780631f3fed8f14610460578063203e727e1461048b5761030a565b806306fdde031461030f578063095ea7b31461033a57806310d5de53146103775780631694505e146103b457806318160ddd146103df57806318a94cf11461040a5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c4b565b6040516103319190613e01565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613ecb565b610cdd565b60405161036e9190613f26565b60405180910390f35b34801561038357600080fd5b5061039e60048036038101906103999190613f41565b610cfb565b6040516103ab9190613f26565b60405180910390f35b3480156103c057600080fd5b506103c9610d1b565b6040516103d69190613fcd565b60405180910390f35b3480156103eb57600080fd5b506103f4610d3f565b6040516104019190613ff7565b60405180910390f35b34801561041657600080fd5b5061041f610d49565b60405161042c9190613ff7565b60405180910390f35b34801561044157600080fd5b5061044a610d4f565b6040516104579190613ff7565b60405180910390f35b34801561046c57600080fd5b50610475610d55565b6040516104829190613ff7565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190614012565b610d5b565b005b3480156104c057600080fd5b506104db60048036038101906104d6919061403f565b610e6a565b6040516104e89190613f26565b60405180910390f35b3480156104fd57600080fd5b50610506610f62565b6040516105139190613f26565b60405180910390f35b34801561052857600080fd5b50610531610f75565b60405161053e91906140ae565b60405180910390f35b34801561055357600080fd5b5061056e60048036038101906105699190613ecb565b610f7e565b60405161057b9190613f26565b60405180910390f35b34801561059057600080fd5b5061059961102a565b6040516105a691906140d8565b60405180910390f35b3480156105bb57600080fd5b506105c461104e565b6040516105d19190613f26565b60405180910390f35b3480156105e657600080fd5b506105ef611061565b6040516105fc9190613f26565b60405180910390f35b34801561061157600080fd5b5061062c60048036038101906106279190613f41565b611074565b6040516106399190613f26565b60405180910390f35b34801561064e57600080fd5b506106696004803603810190610664919061423b565b6110ca565b005b34801561067757600080fd5b50610692600480360381019061068d9190613f41565b6111db565b005b3480156106a057600080fd5b506106bb60048036038101906106b691906142b0565b611317565b005b3480156106c957600080fd5b506106d26113b0565b6040516106df9190613ff7565b60405180910390f35b3480156106f457600080fd5b506106fd6113b6565b005b34801561070b57600080fd5b5061072660048036038101906107219190613f41565b6114e1565b6040516107339190613ff7565b60405180910390f35b34801561074857600080fd5b50610751611529565b005b34801561075f57600080fd5b5061077a600480360381019061077591906142b0565b6115b1565b005b34801561078857600080fd5b506107a3600480360381019061079e91906142dd565b61164a565b005b3480156107b157600080fd5b506107ba611721565b6040516107c79190613ff7565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f29190613f41565b611727565b005b34801561080557600080fd5b50610820600480360381019061081b919061431d565b611863565b005b34801561082e57600080fd5b50610837611962565b60405161084491906140d8565b60405180910390f35b34801561085957600080fd5b5061086261198c565b60405161086f9190613ff7565b60405180910390f35b34801561088457600080fd5b5061088d611992565b60405161089a9190613e01565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c591906142dd565b611a24565b005b3480156108d857600080fd5b506108e1611b3d565b6040516108ee9190613ff7565b60405180910390f35b34801561090357600080fd5b5061091e60048036038101906109199190613ecb565b611b43565b60405161092b9190613f26565b60405180910390f35b34801561094057600080fd5b5061095b60048036038101906109569190613ecb565b611c2e565b6040516109689190613f26565b60405180910390f35b34801561097d57600080fd5b50610998600480360381019061099391906142b0565b611c4c565b005b3480156109a657600080fd5b506109af611ce5565b6040516109bc9190613ff7565b60405180910390f35b3480156109d157600080fd5b506109ec60048036038101906109e79190613f41565b611ceb565b6040516109f99190613f26565b60405180910390f35b348015610a0e57600080fd5b50610a296004803603810190610a2491906142dd565b611d0b565b005b348015610a3757600080fd5b50610a526004803603810190610a4d919061431d565b611e30565b005b348015610a6057600080fd5b50610a7b6004803603810190610a769190614012565b611f2f565b005b348015610a8957600080fd5b50610a9261203e565b604051610a9f9190613ff7565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca9190614012565b612044565b604051610adc9190613f26565b60405180910390f35b348015610af157600080fd5b50610afa612199565b604051610b079190613ff7565b60405180910390f35b348015610b1c57600080fd5b50610b376004803603810190610b329190614370565b61219f565b604051610b449190613ff7565b60405180910390f35b348015610b5957600080fd5b50610b62612226565b604051610b6f9190613ff7565b60405180910390f35b348015610b8457600080fd5b50610b9f6004803603810190610b9a91906142dd565b61222c565b005b348015610bad57600080fd5b50610bb6612303565b604051610bc39190613ff7565b60405180910390f35b348015610bd857600080fd5b50610bf36004803603810190610bee9190613f41565b612309565b005b348015610c0157600080fd5b50610c0a612401565b604051610c179190613ff7565b60405180910390f35b348015610c2c57600080fd5b50610c35612407565b604051610c429190613ff7565b60405180910390f35b606060038054610c5a906143df565b80601f0160208091040260200160405190810160405280929190818152602001828054610c86906143df565b8015610cd35780601f10610ca857610100808354040283529160200191610cd3565b820191906000526020600020905b815481529060010190602001808311610cb657829003601f168201915b5050505050905090565b6000610cf1610cea61240d565b8484612415565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60155481565b60175481565b60165481565b610d6361240d565b73ffffffffffffffffffffffffffffffffffffffff16610d81611962565b73ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce9061445d565b60405180910390fd5b670de0b6b3a76400006103e86001610ded610d3f565b610df791906144ac565b610e019190614535565b610e0b9190614535565b811015610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e44906145d8565b60405180910390fd5b670de0b6b3a764000081610e6191906144ac565b60088190555050565b6000610e778484846125e0565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ec261240d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f399061466a565b60405180910390fd5b610f5685610f4e61240d565b858403612415565b60019150509392505050565b600d60009054906101000a900460ff1681565b60006012905090565b6000611020610f8b61240d565b848460016000610f9961240d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461101b919061468a565b612415565b6001905092915050565b7f00000000000000000000000086f4728cfe8e855bf20e2c277e1ba48918347d0581565b600b60009054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110d261240d565b73ffffffffffffffffffffffffffffffffffffffff166110f0611962565b73ffffffffffffffffffffffffffffffffffffffff1614611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113d9061445d565b60405180910390fd5b60005b81518110156111d75760016019600084848151811061116b5761116a6146e0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111cf9061470f565b915050611149565b5050565b6111e361240d565b73ffffffffffffffffffffffffffffffffffffffff16611201611962565b73ffffffffffffffffffffffffffffffffffffffff1614611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e9061445d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61131f61240d565b73ffffffffffffffffffffffffffffffffffffffff1661133d611962565b73ffffffffffffffffffffffffffffffffffffffff1614611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a9061445d565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60125481565b6113be61240d565b73ffffffffffffffffffffffffffffffffffffffff166113dc611962565b73ffffffffffffffffffffffffffffffffffffffff1614611432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114299061445d565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161145890614789565b60006040518083038185875af1925050503d8060008114611495576040519150601f19603f3d011682016040523d82523d6000602084013e61149a565b606091505b50509050806114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d5906147ea565b60405180910390fd5b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61153161240d565b73ffffffffffffffffffffffffffffffffffffffff1661154f611962565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c9061445d565b60405180910390fd5b6115af600061332f565b565b6115b961240d565b73ffffffffffffffffffffffffffffffffffffffff166115d7611962565b73ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116249061445d565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b61165261240d565b73ffffffffffffffffffffffffffffffffffffffff16611670611962565b73ffffffffffffffffffffffffffffffffffffffff16146116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd9061445d565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b61172f61240d565b73ffffffffffffffffffffffffffffffffffffffff1661174d611962565b73ffffffffffffffffffffffffffffffffffffffff16146117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a9061445d565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61186b61240d565b73ffffffffffffffffffffffffffffffffffffffff16611889611962565b73ffffffffffffffffffffffffffffffffffffffff16146118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d69061445d565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f54611907919061468a565b611911919061468a565b600e819055506028600e54111561195d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195490614856565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6060600480546119a1906143df565b80601f01602080910402602001604051908101604052809291908181526020018280546119cd906143df565b8015611a1a5780601f106119ef57610100808354040283529160200191611a1a565b820191906000526020600020905b8154815290600101906020018083116119fd57829003601f168201915b5050505050905090565b611a2c61240d565b73ffffffffffffffffffffffffffffffffffffffff16611a4a611962565b73ffffffffffffffffffffffffffffffffffffffff1614611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a979061445d565b60405180910390fd5b7f00000000000000000000000086f4728cfe8e855bf20e2c277e1ba48918347d0573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b26906148e8565b60405180910390fd5b611b3982826133f5565b5050565b60185481565b60008060016000611b5261240d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c069061497a565b60405180910390fd5b611c23611c1a61240d565b85858403612415565b600191505092915050565b6000611c42611c3b61240d565b84846125e0565b6001905092915050565b611c5461240d565b73ffffffffffffffffffffffffffffffffffffffff16611c72611962565b73ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf9061445d565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b60115481565b601c6020528060005260406000206000915054906101000a900460ff1681565b611d1361240d565b73ffffffffffffffffffffffffffffffffffffffff16611d31611962565b73ffffffffffffffffffffffffffffffffffffffff1614611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e9061445d565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e249190613f26565b60405180910390a25050565b611e3861240d565b73ffffffffffffffffffffffffffffffffffffffff16611e56611962565b73ffffffffffffffffffffffffffffffffffffffff1614611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea39061445d565b60405180910390fd5b826013819055508160148190555080601581905550601554601454601354611ed4919061468a565b611ede919061468a565b60128190555060286012541115611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2190614856565b60405180910390fd5b505050565b611f3761240d565b73ffffffffffffffffffffffffffffffffffffffff16611f55611962565b73ffffffffffffffffffffffffffffffffffffffff1614611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa29061445d565b60405180910390fd5b670de0b6b3a76400006103e86005611fc1610d3f565b611fcb91906144ac565b611fd59190614535565b611fdf9190614535565b811015612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201890614a0c565b60405180910390fd5b670de0b6b3a76400008161203591906144ac565b600a8190555050565b60085481565b600061204e61240d565b73ffffffffffffffffffffffffffffffffffffffff1661206c611962565b73ffffffffffffffffffffffffffffffffffffffff16146120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b99061445d565b60405180910390fd5b620186a060016120d0610d3f565b6120da91906144ac565b6120e49190614535565b821015612126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211d90614a9e565b60405180910390fd5b6103e86005612133610d3f565b61213d91906144ac565b6121479190614535565b821115612189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218090614b30565b60405180910390fd5b8160098190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b61223461240d565b73ffffffffffffffffffffffffffffffffffffffff16612252611962565b73ffffffffffffffffffffffffffffffffffffffff16146122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229f9061445d565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b61231161240d565b73ffffffffffffffffffffffffffffffffffffffff1661232f611962565b73ffffffffffffffffffffffffffffffffffffffff1614612385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c9061445d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ec90614bc2565b60405180910390fd5b6123fe8161332f565b50565b60145481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247c90614c54565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec90614ce6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125d39190613ff7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264790614d78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b790614d78565b60405180910390fd5b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490614e0a565b60405180910390fd5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d190614e9c565b60405180910390fd5b60008114156127f4576127ef83836000613496565b61332a565b600b60009054906101000a900460ff1615612dc257612811611962565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561287f575061284f611962565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128f2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561290b5750600560149054906101000a900460ff16155b15612dc157600d60009054906101000a900460ff1615612ad85761292d611962565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156129b457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a0c57507f00000000000000000000000086f4728cfe8e855bf20e2c277e1ba48918347d0573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ad75743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8990614f54565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b7b5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c2257600854811115612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc90614fe6565b60405180910390fd5b600a54612bd1836114e1565b82612bdc919061468a565b1115612c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1490615052565b60405180910390fd5b612dc0565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cc55750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d1457600854811115612d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d06906150e4565b60405180910390fd5b612dbf565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612dbe57600a54612d71836114e1565b82612d7c919061468a565b1115612dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db490615052565b60405180910390fd5b5b5b5b5b5b6000612dcd306114e1565b905060006009548210158015612e2c5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612e825750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ed85750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90506000601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f7d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612fd35750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130295750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90506000811561331a57601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561308e57506000601254115b1561315b576130bb60646130ad6012548861371790919063ffffffff16565b61372d90919063ffffffff16565b9050601254601454826130ce91906144ac565b6130d89190614535565b601760008282546130e9919061468a565b925050819055506012546015548261310191906144ac565b61310b9190614535565b6018600082825461311c919061468a565b925050819055506012546013548261313491906144ac565b61313e9190614535565b6016600082825461314f919061468a565b92505081905550613280565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b657506000600e54115b1561327f576131e360646131d5600e548861371790919063ffffffff16565b61372d90919063ffffffff16565b9050600e54601054826131f691906144ac565b6132009190614535565b60176000828254613211919061468a565b92505081905550600e546011548261322991906144ac565b6132339190614535565b60186000828254613244919061468a565b92505081905550600e54600f548261325c91906144ac565b6132669190614535565b60166000828254613277919061468a565b925050819055505b5b600081111561329557613294873083613496565b5b80856132a19190615104565b94508280156132bc5750600b60019054906101000a900460ff165b80156132d55750600560149054906101000a900460ff16155b15613319576001600560146101000a81548160ff0219169083151502179055506132fd613743565b6000600560146101000a81548160ff0219169083151502179055505b5b613325878787613496565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fd90614d78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356d906151aa565b60405180910390fd5b613581838383613a2a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fe9061523c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461369a919061468a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136fe9190613ff7565b60405180910390a3613711848484613a2f565b50505050565b6000818361372591906144ac565b905092915050565b6000818361373b9190614535565b905092915050565b600061374e306114e1565b90506000601854601654601754613765919061468a565b61376f919061468a565b90506000808314806137815750600082145b1561378e57505050613a28565b601460095461379d91906144ac565b8311156137b65760146009546137b391906144ac565b92505b6000600283601754866137c991906144ac565b6137d39190614535565b6137dd9190614535565b905060006137f48286613a3490919063ffffffff16565b9050600047905061380482613a4a565b60006138198247613a3490919063ffffffff16565b90506000613844876138366016548561371790919063ffffffff16565b61372d90919063ffffffff16565b9050600061386f886138616018548661371790919063ffffffff16565b61372d90919063ffffffff16565b905060008183856138809190615104565b61388a9190615104565b9050600060178190555060006016819055506000601881905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516138ea90614789565b60006040518083038185875af1925050503d8060008114613927576040519150601f19603f3d011682016040523d82523d6000602084013e61392c565b606091505b5050809850506000871180156139425750600081115b1561398f576139518782613c87565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826017546040516139869392919061525c565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516139d590614789565b60006040518083038185875af1925050503d8060008114613a12576040519150601f19603f3d011682016040523d82523d6000602084013e613a17565b606091505b505080985050505050505050505050505b565b505050565b505050565b60008183613a429190615104565b905092915050565b6000600267ffffffffffffffff811115613a6757613a666140f8565b5b604051908082528060200260200182016040528015613a955781602001602082028036833780820191505090505b5090503081600081518110613aad57613aac6146e0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7691906152a8565b81600181518110613b8a57613b896146e0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bef307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612415565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c519594939291906153ce565b600060405180830381600087803b158015613c6b57600080fd5b505af1158015613c7f573d6000803e3d6000fd5b505050505050565b613cb2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612415565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613cfc611962565b426040518863ffffffff1660e01b8152600401613d1e96959493929190615428565b60606040518083038185885af1158015613d3c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d61919061549e565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613da2578082015181840152602081019050613d87565b83811115613db1576000848401525b50505050565b6000601f19601f8301169050919050565b6000613dd382613d68565b613ddd8185613d73565b9350613ded818560208601613d84565b613df681613db7565b840191505092915050565b60006020820190508181036000830152613e1b8184613dc8565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e6282613e37565b9050919050565b613e7281613e57565b8114613e7d57600080fd5b50565b600081359050613e8f81613e69565b92915050565b6000819050919050565b613ea881613e95565b8114613eb357600080fd5b50565b600081359050613ec581613e9f565b92915050565b60008060408385031215613ee257613ee1613e2d565b5b6000613ef085828601613e80565b9250506020613f0185828601613eb6565b9150509250929050565b60008115159050919050565b613f2081613f0b565b82525050565b6000602082019050613f3b6000830184613f17565b92915050565b600060208284031215613f5757613f56613e2d565b5b6000613f6584828501613e80565b91505092915050565b6000819050919050565b6000613f93613f8e613f8984613e37565b613f6e565b613e37565b9050919050565b6000613fa582613f78565b9050919050565b6000613fb782613f9a565b9050919050565b613fc781613fac565b82525050565b6000602082019050613fe26000830184613fbe565b92915050565b613ff181613e95565b82525050565b600060208201905061400c6000830184613fe8565b92915050565b60006020828403121561402857614027613e2d565b5b600061403684828501613eb6565b91505092915050565b60008060006060848603121561405857614057613e2d565b5b600061406686828701613e80565b935050602061407786828701613e80565b925050604061408886828701613eb6565b9150509250925092565b600060ff82169050919050565b6140a881614092565b82525050565b60006020820190506140c3600083018461409f565b92915050565b6140d281613e57565b82525050565b60006020820190506140ed60008301846140c9565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61413082613db7565b810181811067ffffffffffffffff8211171561414f5761414e6140f8565b5b80604052505050565b6000614162613e23565b905061416e8282614127565b919050565b600067ffffffffffffffff82111561418e5761418d6140f8565b5b602082029050602081019050919050565b600080fd5b60006141b76141b284614173565b614158565b905080838252602082019050602084028301858111156141da576141d961419f565b5b835b8181101561420357806141ef8882613e80565b8452602084019350506020810190506141dc565b5050509392505050565b600082601f830112614222576142216140f3565b5b81356142328482602086016141a4565b91505092915050565b60006020828403121561425157614250613e2d565b5b600082013567ffffffffffffffff81111561426f5761426e613e32565b5b61427b8482850161420d565b91505092915050565b61428d81613f0b565b811461429857600080fd5b50565b6000813590506142aa81614284565b92915050565b6000602082840312156142c6576142c5613e2d565b5b60006142d48482850161429b565b91505092915050565b600080604083850312156142f4576142f3613e2d565b5b600061430285828601613e80565b92505060206143138582860161429b565b9150509250929050565b60008060006060848603121561433657614335613e2d565b5b600061434486828701613eb6565b935050602061435586828701613eb6565b925050604061436686828701613eb6565b9150509250925092565b6000806040838503121561438757614386613e2d565b5b600061439585828601613e80565b92505060206143a685828601613e80565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143f757607f821691505b6020821081141561440b5761440a6143b0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614447602083613d73565b915061445282614411565b602082019050919050565b600060208201905081810360008301526144768161443a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144b782613e95565b91506144c283613e95565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144fb576144fa61447d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061454082613e95565b915061454b83613e95565b92508261455b5761455a614506565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006145c2602f83613d73565b91506145cd82614566565b604082019050919050565b600060208201905081810360008301526145f1816145b5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614654602883613d73565b915061465f826145f8565b604082019050919050565b6000602082019050818103600083015261468381614647565b9050919050565b600061469582613e95565b91506146a083613e95565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146d5576146d461447d565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061471a82613e95565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561474d5761474c61447d565b5b600182019050919050565b600081905092915050565b50565b6000614773600083614758565b915061477e82614763565b600082019050919050565b600061479482614766565b9150819050919050565b7f52455343554520455854524120455448204641494c4544210000000000000000600082015250565b60006147d4601883613d73565b91506147df8261479e565b602082019050919050565b60006020820190508181036000830152614803816147c7565b9050919050565b7f4d757374206b656570206665657320617420343025206f72206c657373000000600082015250565b6000614840601d83613d73565b915061484b8261480a565b602082019050919050565b6000602082019050818103600083015261486f81614833565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006148d2603983613d73565b91506148dd82614876565b604082019050919050565b60006020820190508181036000830152614901816148c5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614964602583613d73565b915061496f82614908565b604082019050919050565b6000602082019050818103600083015261499381614957565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006149f6602483613d73565b9150614a018261499a565b604082019050919050565b60006020820190508181036000830152614a25816149e9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614a88603583613d73565b9150614a9382614a2c565b604082019050919050565b60006020820190508181036000830152614ab781614a7b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614b1a603483613d73565b9150614b2582614abe565b604082019050919050565b60006020820190508181036000830152614b4981614b0d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bac602683613d73565b9150614bb782614b50565b604082019050919050565b60006020820190508181036000830152614bdb81614b9f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c3e602483613d73565b9150614c4982614be2565b604082019050919050565b60006020820190508181036000830152614c6d81614c31565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cd0602283613d73565b9150614cdb82614c74565b604082019050919050565b60006020820190508181036000830152614cff81614cc3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d62602583613d73565b9150614d6d82614d06565b604082019050919050565b60006020820190508181036000830152614d9181614d55565b9050919050565b7f45524332303a207472616e7366657220746f2074686520626c61636b4c69737460008201527f6564206164647265737300000000000000000000000000000000000000000000602082015250565b6000614df4602a83613d73565b9150614dff82614d98565b604082019050919050565b60006020820190508181036000830152614e2381614de7565b9050919050565b7f45524332303a207472616e736665722066726f6d2074686520626c61636b4c6960008201527f7374656420616464726573730000000000000000000000000000000000000000602082015250565b6000614e86602c83613d73565b9150614e9182614e2a565b604082019050919050565b60006020820190508181036000830152614eb581614e79565b9050919050565b7f5f7472616e736665723a3a205472616e736665722050726f7465637420656e6160008201527f626c65642e20204f6e6c79206f6e652070757263686173652070657220626c6f60208201527f636b20616c6c6f7765642e000000000000000000000000000000000000000000604082015250565b6000614f3e604b83613d73565b9150614f4982614ebc565b606082019050919050565b60006020820190508181036000830152614f6d81614f31565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614fd0603583613d73565b9150614fdb82614f74565b604082019050919050565b60006020820190508181036000830152614fff81614fc3565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061503c601383613d73565b915061504782615006565b602082019050919050565b6000602082019050818103600083015261506b8161502f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006150ce603683613d73565b91506150d982615072565b604082019050919050565b600060208201905081810360008301526150fd816150c1565b9050919050565b600061510f82613e95565b915061511a83613e95565b92508282101561512d5761512c61447d565b5b828203905092915050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615194602383613d73565b915061519f82615138565b604082019050919050565b600060208201905081810360008301526151c381615187565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615226602683613d73565b9150615231826151ca565b604082019050919050565b6000602082019050818103600083015261525581615219565b9050919050565b60006060820190506152716000830186613fe8565b61527e6020830185613fe8565b61528b6040830184613fe8565b949350505050565b6000815190506152a281613e69565b92915050565b6000602082840312156152be576152bd613e2d565b5b60006152cc84828501615293565b91505092915050565b6000819050919050565b60006152fa6152f56152f0846152d5565b613f6e565b613e95565b9050919050565b61530a816152df565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61534581613e57565b82525050565b6000615357838361533c565b60208301905092915050565b6000602082019050919050565b600061537b82615310565b615385818561531b565b93506153908361532c565b8060005b838110156153c15781516153a8888261534b565b97506153b383615363565b925050600181019050615394565b5085935050505092915050565b600060a0820190506153e36000830188613fe8565b6153f06020830187615301565b81810360408301526154028186615370565b905061541160608301856140c9565b61541e6080830184613fe8565b9695505050505050565b600060c08201905061543d60008301896140c9565b61544a6020830188613fe8565b6154576040830187615301565b6154646060830186615301565b61547160808301856140c9565b61547e60a0830184613fe8565b979650505050505050565b60008151905061549881613e9f565b92915050565b6000806000606084860312156154b7576154b6613e2d565b5b60006154c586828701615489565b93505060206154d686828701615489565b92505060406154e786828701615489565b915050925092509256fea2646970667358221220e8d47fff8b78c5648a076ae0f0db5d2048a61177660843eb9fcfd74b700cc3ce64736f6c634300080a0033

Deployed Bytecode Sourcemap

14866:15379:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2847:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3769:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16022:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14951:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3174:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15752:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15834;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15794;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19362:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3946:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15445:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3071:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4434:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15009:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15285:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15325:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22514:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21407:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20067:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15641:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30053:187;;;;;;;;;;;;;:::i;:::-;;3290:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;953:103;;;;;;;;;;;;;:::i;:::-;;18666:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19913:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15526:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22093:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20195:435;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;728:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15676:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2957:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21608:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15874:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4657:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3425:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18772:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15600:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16094:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21090:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20638:444;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19647:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15166:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18889:465;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15492:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3610:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15208:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21280:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15563:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1064:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15714:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15248:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2847:100;2901:13;2934:5;2927:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2847:100;:::o;3769:169::-;3852:4;3869:39;3878:12;:10;:12::i;:::-;3892:7;3901:6;3869:8;:39::i;:::-;3926:4;3919:11;;3769:169;;;;:::o;16022:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;14951:51::-;;;:::o;3174:108::-;3235:7;3262:12;;3255:19;;3174:108;:::o;15752:33::-;;;;:::o;15834:::-;;;;:::o;15794:::-;;;;:::o;19362:277::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19499:4:::1;19491;19486:1;19470:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19469:26;;;;:::i;:::-;19468:35;;;;:::i;:::-;19458:6;:45;;19436:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;19622:8;19612:6;:19;;;;:::i;:::-;19589:20;:42;;;;19362:277:::0;:::o;3946:480::-;4086:4;4103:36;4113:6;4121:9;4132:6;4103:9;:36::i;:::-;4152:24;4179:11;:19;4191:6;4179:19;;;;;;;;;;;;;;;:33;4199:12;:10;:12::i;:::-;4179:33;;;;;;;;;;;;;;;;4152:60;;4251:6;4231:16;:26;;4223:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4330:57;4339:6;4347:12;:10;:12::i;:::-;4380:6;4361:16;:25;4330:8;:57::i;:::-;4414:4;4407:11;;;3946:480;;;;;:::o;15445:38::-;;;;;;;;;;;;;:::o;3071:93::-;3129:5;3154:2;3147:9;;3071:93;:::o;4434:215::-;4522:4;4539:80;4548:12;:10;:12::i;:::-;4562:7;4608:10;4571:11;:25;4583:12;:10;:12::i;:::-;4571:25;;;;;;;;;;;;;;;:34;4597:7;4571:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4539:8;:80::i;:::-;4637:4;4630:11;;4434:215;;;;:::o;15009:38::-;;;:::o;15285:33::-;;;;;;;;;;;;;:::o;15325:40::-;;;;;;;;;;;;;:::o;22514:126::-;22580:4;22604:19;:28;22624:7;22604:28;;;;;;;;;;;;;;;;;;;;;;;;;22597:35;;22514:126;;;:::o;21407:193::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21499:6:::1;21494:99;21515:8;:15;21511:1;:19;21494:99;;;21577:4;21552:9;:22;21562:8;21571:1;21562:11;;;;;;;;:::i;:::-;;;;;;;;21552:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;21532:3;;;;;:::i;:::-;;;;21494:99;;;;21407:193:::0;:::o;22313:::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22440:17:::1;;;;;;;;;;;22404:54;;22429:9;22404:54;;;;;;;;;;;;22489:9;22469:17;;:29;;;;;;;;;;;;;;;;;;22313:193:::0;:::o;20067:120::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20172:7:::1;20148:21;;:31;;;;;;;;;;;;;;;;;;20067:120:::0;:::o;15641:28::-;;;;:::o;30053:187::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30110:12:::1;30127:10;:15;;30151:21;30127:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30109:68;;;30196:7;30188:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;30098:142;30053:187::o:0;3290:127::-;3364:7;3391:9;:18;3401:7;3391:18;;;;;;;;;;;;;;;;3384:25;;3290:127;;;:::o;953:103::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1018:30:::1;1045:1;1018:18;:30::i;:::-;953:103::o:0;18666:98::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18749:7:::1;18732:14;;:24;;;;;;;;;;;;;;;;;;18666:98:::0;:::o;19913:146::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20047:4:::1;20004:31;:40;20036:7;20004:40;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;19913:146:::0;;:::o;15526:30::-;;;;:::o;22093:212::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22234:15:::1;;;;;;;;;;;22191:59;;22214:18;22191:59;;;;;;;;;;;;22279:18;22261:15;;:36;;;;;;;;;;;;;;;;;;22093:212:::0;:::o;20195:435::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20371:13:::1;20353:15;:31;;;;20413:13;20395:15;:31;;;;20457:15;20437:17;:35;;;;20534:17;;20516:15;;20498;;:33;;;;:::i;:::-;:53;;;;:::i;:::-;20483:12;:68;;;;20586:2;20570:12;;:18;;20562:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20195:435:::0;;;:::o;728:87::-;774:7;801:6;;;;;;;;;;;794:13;;728:87;:::o;15676:31::-;;;;:::o;2957:104::-;3013:13;3046:7;3039:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2957:104;:::o;21608:281::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21729:13:::1;21721:21;;:4;:21;;;;21699:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;21840:41;21869:4;21875:5;21840:28;:41::i;:::-;21608:281:::0;;:::o;15874:27::-;;;;:::o;4657:401::-;4750:4;4767:24;4794:11;:25;4806:12;:10;:12::i;:::-;4794:25;;;;;;;;;;;;;;;:34;4820:7;4794:34;;;;;;;;;;;;;;;;4767:61;;4867:15;4847:16;:35;;4839:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4952:67;4961:12;:10;:12::i;:::-;4975:7;5003:15;4984:16;:34;4952:8;:67::i;:::-;5046:4;5039:11;;;4657:401;;;;:::o;3425:175::-;3511:4;3528:42;3538:12;:10;:12::i;:::-;3552:9;3563:6;3528:9;:42::i;:::-;3588:4;3581:11;;3425:175;;;;:::o;18772:109::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18866:7:::1;18844:19;;:29;;;;;;;;;;;;;;;;;;18772:109:::0;:::o;15600:32::-;;;;:::o;16094:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;21090:182::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21206:8:::1;21175:19;:28;21195:7;21175:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21246:7;21230:34;;;21255:8;21230:34;;;;;;:::i;:::-;;;;;;;;21090:182:::0;;:::o;20638:444::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20816:13:::1;20797:16;:32;;;;20859:13;20840:16;:32;;;;20904:15;20883:18;:36;;;;20984:18;;20965:16;;20946;;:35;;;;:::i;:::-;:56;;;;:::i;:::-;20930:13;:72;;;;21038:2;21021:13;;:19;;21013:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20638:444:::0;;;:::o;19647:258::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19787:4:::1;19779;19774:1;19758:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19757:26;;;;:::i;:::-;19756:35;;;;:::i;:::-;19746:6;:45;;19724:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;19888:8;19878:6;:19;;;;:::i;:::-;19866:9;:31;;;;19647:258:::0;:::o;15166:35::-;;;;:::o;18889:465::-;18970:4;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19044:6:::1;19039:1;19023:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19022:28;;;;:::i;:::-;19009:9;:41;;18987:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;19199:4;19194:1;19178:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19177:26;;;;:::i;:::-;19164:9;:39;;19142:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;19315:9;19294:18;:30;;;;19342:4;19335:11;;18889:465:::0;;;:::o;15492:27::-;;;;:::o;3610:151::-;3699:7;3726:11;:18;3738:5;3726:18;;;;;;;;;;;;;;;:27;3745:7;3726:27;;;;;;;;;;;;;;;;3719:34;;3610:151;;;;:::o;15208:33::-;;;;:::o;21280:119::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21384:7:::1;21363:9;:18;21373:7;21363:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;21280:119:::0;;:::o;15563:30::-;;;;:::o;1064:201::-;874:12;:10;:12::i;:::-;863:23;;:7;:5;:7::i;:::-;:23;;;855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1173:1:::1;1153:22;;:8;:22;;;;1145:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1229:28;1248:8;1229:18;:28::i;:::-;1064:201:::0;:::o;15714:31::-;;;;:::o;15248:24::-;;;;:::o;274:98::-;327:7;354:10;347:17;;274:98;:::o;6789:380::-;6942:1;6925:19;;:5;:19;;;;6917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7023:1;7004:21;;:7;:21;;;;6996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7107:6;7077:11;:18;7089:5;7077:18;;;;;;;;;;;;;;;:27;7096:7;7077:27;;;;;;;;;;;;;;;:36;;;;7145:7;7129:32;;7138:5;7129:32;;;7154:6;7129:32;;;;;;:::i;:::-;;;;;;;;6789:380;;;:::o;22650:4554::-;22798:1;22782:18;;:4;:18;;;;22774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22875:1;22861:16;;:2;:16;;;;22853:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;22941:9;:13;22951:2;22941:13;;;;;;;;;;;;;;;;;;;;;;;;;22940:14;22932:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23021:9;:15;23031:4;23021:15;;;;;;;;;;;;;;;;;;;;;;;;;23020:16;23012:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23112:1;23102:6;:11;23098:93;;;23130:28;23146:4;23152:2;23156:1;23130:15;:28::i;:::-;23173:7;;23098:93;23207:14;;;;;;;;;;;23203:2240;;;23268:7;:5;:7::i;:::-;23260:15;;:4;:15;;;;:49;;;;;23302:7;:5;:7::i;:::-;23296:13;;:2;:13;;;;23260:49;:86;;;;;23344:1;23330:16;;:2;:16;;;;23260:86;:128;;;;;23381:6;23367:21;;:2;:21;;;;23260:128;:158;;;;;23410:8;;;;;;;;;;;23409:9;23260:158;23238:2194;;;23588:19;;;;;;;;;;;23584:638;;;23668:7;:5;:7::i;:::-;23662:13;;:2;:13;;;;:72;;;;;23718:15;23704:30;;:2;:30;;;;23662:72;:129;;;;;23777:13;23763:28;;:2;:28;;;;23662:129;23632:571;;;23951:12;23880:28;:39;23909:9;23880:39;;;;;;;;;;;;;;;;:83;23842:256;;;;;;;;;;;;:::i;:::-;;;;;;;;;24167:12;24125:28;:39;24154:9;24125:39;;;;;;;;;;;;;;;:54;;;;23632:571;23584:638;24296:25;:31;24322:4;24296:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;24353:31;:35;24385:2;24353:35;;;;;;;;;;;;;;;;;;;;;;;;;24352:36;24296:92;24270:1147;;;24475:20;;24465:6;:30;;24431:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;24683:9;;24666:13;24676:2;24666:9;:13::i;:::-;24657:6;:22;;;;:::i;:::-;:35;;24623:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24270:1147;;;24861:25;:29;24887:2;24861:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;24916:31;:37;24948:4;24916:37;;;;;;;;;;;;;;;;;;;;;;;;;24915:38;24861:92;24835:582;;;25040:20;;25030:6;:30;;24996:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;24835:582;;;25197:31;:35;25229:2;25197:35;;;;;;;;;;;;;;;;;;;;;;;;;25192:225;;25317:9;;25300:13;25310:2;25300:9;:13::i;:::-;25291:6;:22;;;;:::i;:::-;:35;;25257:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25192:225;24835:582;24270:1147;23238:2194;23203:2240;25455:28;25486:24;25504:4;25486:9;:24::i;:::-;25455:55;;25523:13;25563:18;;25539:20;:42;;:75;;;;;25585:25;:29;25611:2;25585:29;;;;;;;;;;;;;;;;;;;;;;;;;25539:75;:105;;;;;25619:19;:25;25639:4;25619:25;;;;;;;;;;;;;;;;;;;;;;;;;25618:26;25539:105;:133;;;;;25649:19;:23;25669:2;25649:23;;;;;;;;;;;;;;;;;;;;;;;;;25648:24;25539:133;25523:149;;25685:12;25701:25;:31;25727:4;25701:31;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;25736:25;:29;25762:2;25736:29;;;;;;;;;;;;;;;;;;;;;;;;;25701:64;25700:96;;;;;25771:19;:25;25791:4;25771:25;;;;;;;;;;;;;;;;;;;;;;;;;25770:26;25700:96;:124;;;;;25801:19;:23;25821:2;25801:23;;;;;;;;;;;;;;;;;;;;;;;;;25800:24;25700:124;25685:139;;25837:12;25942:7;25938:1213;;;25994:25;:29;26020:2;25994:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26043:1;26027:13;;:17;25994:50;25990:784;;;26072:34;26102:3;26072:25;26083:13;;26072:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26065:41;;26175:13;;26155:16;;26148:4;:23;;;;:::i;:::-;26147:41;;;;:::i;:::-;26125:18;;:63;;;;;;;:::i;:::-;;;;;;;;26253:13;;26231:18;;26224:4;:25;;;;:::i;:::-;26223:43;;;;:::i;:::-;26207:12;;:59;;;;;;;:::i;:::-;;;;;;;;26335:13;;26315:16;;26308:4;:23;;;;:::i;:::-;26307:41;;;;:::i;:::-;26285:18;;:63;;;;;;;:::i;:::-;;;;;;;;25990:784;;;26410:25;:31;26436:4;26410:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26460:1;26445:12;;:16;26410:51;26406:368;;;26489:33;26518:3;26489:24;26500:12;;26489:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26482:40;;26590:12;;26571:15;;26564:4;:22;;;;:::i;:::-;26563:39;;;;:::i;:::-;26541:18;;:61;;;;;;;:::i;:::-;;;;;;;;26666:12;;26645:17;;26638:4;:24;;;;:::i;:::-;26637:41;;;;:::i;:::-;26621:12;;:57;;;;;;;:::i;:::-;;;;;;;;26746:12;;26727:15;;26720:4;:22;;;;:::i;:::-;26719:39;;;;:::i;:::-;26697:18;;:61;;;;;;;:::i;:::-;;;;;;;;26406:368;25990:784;26801:1;26794:4;:8;26790:91;;;26823:42;26839:4;26853;26860;26823:15;:42::i;:::-;26790:91;26907:4;26897:14;;;;;:::i;:::-;;;26972:8;:33;;;;;26984:21;;;;;;;;;;;26972:33;:46;;;;;27010:8;;;;;;;;;;;27009:9;26972:46;26968:172;;;27050:4;27039:8;;:15;;;;;;;;;;;;;;;;;;27073:16;:14;:16::i;:::-;27119:5;27108:8;;:16;;;;;;;;;;;;;;;;;;26968:172;25938:1213;27163:33;27179:4;27185:2;27189:6;27163:15;:33::i;:::-;22763:4441;;;;22650:4554;;;;:::o;1275:191::-;1349:16;1368:6;;;;;;;;;;;1349:25;;1394:8;1385:6;;:17;;;;;;;;;;;;;;;;;;1449:8;1418:40;;1439:8;1418:40;;;;;;;;;;;;1338:128;1275:191;:::o;21897:188::-;22014:5;21980:25;:31;22006:4;21980:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22071:5;22037:40;;22065:4;22037:40;;;;;;;;;;;;21897:188;;:::o;5066:721::-;5224:1;5206:20;;:6;:20;;;;5198:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5308:1;5287:23;;:9;:23;;;;5279:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5363:47;5384:6;5392:9;5403:6;5363:20;:47::i;:::-;5423:21;5447:9;:17;5457:6;5447:17;;;;;;;;;;;;;;;;5423:41;;5500:6;5483:13;:23;;5475:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5613:6;5597:13;:22;5577:9;:17;5587:6;5577:17;;;;;;;;;;;;;;;:42;;;;5661:6;5637:9;:20;5647:9;5637:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5702:9;5685:35;;5694:6;5685:35;;;5713:6;5685:35;;;;;;:::i;:::-;;;;;;;;5733:46;5753:6;5761:9;5772:6;5733:19;:46::i;:::-;5187:600;5066:721;;;:::o;8709:98::-;8767:7;8798:1;8794;:5;;;;:::i;:::-;8787:12;;8709:98;;;;:::o;8815:::-;8873:7;8904:1;8900;:5;;;;:::i;:::-;8893:12;;8815:98;;;;:::o;28333:1712::-;28378:23;28404:24;28422:4;28404:9;:24::i;:::-;28378:50;;28439:25;28527:12;;28497:18;;28467;;:48;;;;:::i;:::-;:72;;;;:::i;:::-;28439:100;;28550:12;28598:1;28579:15;:20;:46;;;;28624:1;28603:17;:22;28579:46;28575:85;;;28642:7;;;;;28575:85;28715:2;28694:18;;:23;;;;:::i;:::-;28676:15;:41;28672:115;;;28773:2;28752:18;;:23;;;;:::i;:::-;28734:41;;28672:115;28848:23;28935:1;28915:17;28893:18;;28875:15;:36;;;;:::i;:::-;28874:58;;;;:::i;:::-;:62;;;;:::i;:::-;28848:88;;28947:26;28976:36;28996:15;28976;:19;;:36;;;;:::i;:::-;28947:65;;29025:25;29053:21;29025:49;;29087:36;29104:18;29087:16;:36::i;:::-;29136:18;29157:44;29183:17;29157:21;:25;;:44;;;;:::i;:::-;29136:65;;29214:23;29240:81;29293:17;29240:34;29255:18;;29240:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;29214:107;;29332:17;29352:51;29385:17;29352:28;29367:12;;29352:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29332:71;;29416:23;29473:9;29455:15;29442:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;29416:66;;29516:1;29495:18;:22;;;;29549:1;29528:18;:22;;;;29576:1;29561:12;:16;;;;29611:17;;;;;;;;;;;29603:31;;29643:9;29603:54;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29590:67;;;;;29692:1;29674:15;:19;:42;;;;;29715:1;29697:15;:19;29674:42;29670:278;;;29733:46;29746:15;29763;29733:12;:46::i;:::-;29799:137;29832:18;29869:15;29903:18;;29799:137;;;;;;;;:::i;:::-;;;;;;;;29670:278;29981:15;;;;;;;;;;;29973:29;;30011:21;29973:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29960:77;;;;;28367:1678;;;;;;;;;;28333:1712;:::o;7177:125::-;;;;:::o;7310:124::-;;;;:::o;8603:98::-;8661:7;8692:1;8688;:5;;;;:::i;:::-;8681:12;;8603:98;;;;:::o;27212:589::-;27338:21;27376:1;27362:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27338:40;;27407:4;27389;27394:1;27389:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27433:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27423:4;27428:1;27423:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27468:62;27485:4;27500:15;27518:11;27468:8;:62::i;:::-;27569:15;:66;;;27650:11;27676:1;27720:4;27747;27767:15;27569:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27267:534;27212:589;:::o;27809:514::-;27957:62;27974:4;27989:15;28007:11;27957:8;:62::i;:::-;28062:15;:31;;;28102:9;28135:4;28155:11;28181:1;28224;28267:7;:5;:7::i;:::-;28289:15;28062:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27809:514;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:117::-;7010:1;7007;7000:12;7024:180;7072:77;7069:1;7062:88;7169:4;7166:1;7159:15;7193:4;7190:1;7183:15;7210:281;7293:27;7315:4;7293:27;:::i;:::-;7285:6;7281:40;7423:6;7411:10;7408:22;7387:18;7375:10;7372:34;7369:62;7366:88;;;7434:18;;:::i;:::-;7366:88;7474:10;7470:2;7463:22;7253:238;7210:281;;:::o;7497:129::-;7531:6;7558:20;;:::i;:::-;7548:30;;7587:33;7615:4;7607:6;7587:33;:::i;:::-;7497:129;;;:::o;7632:311::-;7709:4;7799:18;7791:6;7788:30;7785:56;;;7821:18;;:::i;:::-;7785:56;7871:4;7863:6;7859:17;7851:25;;7931:4;7925;7921:15;7913:23;;7632:311;;;:::o;7949:117::-;8058:1;8055;8048:12;8089:710;8185:5;8210:81;8226:64;8283:6;8226:64;:::i;:::-;8210:81;:::i;:::-;8201:90;;8311:5;8340:6;8333:5;8326:21;8374:4;8367:5;8363:16;8356:23;;8427:4;8419:6;8415:17;8407:6;8403:30;8456:3;8448:6;8445:15;8442:122;;;8475:79;;:::i;:::-;8442:122;8590:6;8573:220;8607:6;8602:3;8599:15;8573:220;;;8682:3;8711:37;8744:3;8732:10;8711:37;:::i;:::-;8706:3;8699:50;8778:4;8773:3;8769:14;8762:21;;8649:144;8633:4;8628:3;8624:14;8617:21;;8573:220;;;8577:21;8191:608;;8089:710;;;;;:::o;8822:370::-;8893:5;8942:3;8935:4;8927:6;8923:17;8919:27;8909:122;;8950:79;;:::i;:::-;8909:122;9067:6;9054:20;9092:94;9182:3;9174:6;9167:4;9159:6;9155:17;9092:94;:::i;:::-;9083:103;;8899:293;8822:370;;;;:::o;9198:539::-;9282:6;9331:2;9319:9;9310:7;9306:23;9302:32;9299:119;;;9337:79;;:::i;:::-;9299:119;9485:1;9474:9;9470:17;9457:31;9515:18;9507:6;9504:30;9501:117;;;9537:79;;:::i;:::-;9501:117;9642:78;9712:7;9703:6;9692:9;9688:22;9642:78;:::i;:::-;9632:88;;9428:302;9198:539;;;;:::o;9743:116::-;9813:21;9828:5;9813:21;:::i;:::-;9806:5;9803:32;9793:60;;9849:1;9846;9839:12;9793:60;9743:116;:::o;9865:133::-;9908:5;9946:6;9933:20;9924:29;;9962:30;9986:5;9962:30;:::i;:::-;9865:133;;;;:::o;10004:323::-;10060:6;10109:2;10097:9;10088:7;10084:23;10080:32;10077:119;;;10115:79;;:::i;:::-;10077:119;10235:1;10260:50;10302:7;10293:6;10282:9;10278:22;10260:50;:::i;:::-;10250:60;;10206:114;10004:323;;;;:::o;10333:468::-;10398:6;10406;10455:2;10443:9;10434:7;10430:23;10426:32;10423:119;;;10461:79;;:::i;:::-;10423:119;10581:1;10606:53;10651:7;10642:6;10631:9;10627:22;10606:53;:::i;:::-;10596:63;;10552:117;10708:2;10734:50;10776:7;10767:6;10756:9;10752:22;10734:50;:::i;:::-;10724:60;;10679:115;10333:468;;;;;:::o;10807:619::-;10884:6;10892;10900;10949:2;10937:9;10928:7;10924:23;10920:32;10917:119;;;10955:79;;:::i;:::-;10917:119;11075:1;11100:53;11145:7;11136:6;11125:9;11121:22;11100:53;:::i;:::-;11090:63;;11046:117;11202:2;11228:53;11273:7;11264:6;11253:9;11249:22;11228:53;:::i;:::-;11218:63;;11173:118;11330:2;11356:53;11401:7;11392:6;11381:9;11377:22;11356:53;:::i;:::-;11346:63;;11301:118;10807:619;;;;;:::o;11432:474::-;11500:6;11508;11557:2;11545:9;11536:7;11532:23;11528:32;11525:119;;;11563:79;;:::i;:::-;11525:119;11683:1;11708:53;11753:7;11744:6;11733:9;11729:22;11708:53;:::i;:::-;11698:63;;11654:117;11810:2;11836:53;11881:7;11872:6;11861:9;11857:22;11836:53;:::i;:::-;11826:63;;11781:118;11432:474;;;;;:::o;11912:180::-;11960:77;11957:1;11950:88;12057:4;12054:1;12047:15;12081:4;12078:1;12071:15;12098:320;12142:6;12179:1;12173:4;12169:12;12159:22;;12226:1;12220:4;12216:12;12247:18;12237:81;;12303:4;12295:6;12291:17;12281:27;;12237:81;12365:2;12357:6;12354:14;12334:18;12331:38;12328:84;;;12384:18;;:::i;:::-;12328:84;12149:269;12098:320;;;:::o;12424:182::-;12564:34;12560:1;12552:6;12548:14;12541:58;12424:182;:::o;12612:366::-;12754:3;12775:67;12839:2;12834:3;12775:67;:::i;:::-;12768:74;;12851:93;12940:3;12851:93;:::i;:::-;12969:2;12964:3;12960:12;12953:19;;12612:366;;;:::o;12984:419::-;13150:4;13188:2;13177:9;13173:18;13165:26;;13237:9;13231:4;13227:20;13223:1;13212:9;13208:17;13201:47;13265:131;13391:4;13265:131;:::i;:::-;13257:139;;12984:419;;;:::o;13409:180::-;13457:77;13454:1;13447:88;13554:4;13551:1;13544:15;13578:4;13575:1;13568:15;13595:348;13635:7;13658:20;13676:1;13658:20;:::i;:::-;13653:25;;13692:20;13710:1;13692:20;:::i;:::-;13687:25;;13880:1;13812:66;13808:74;13805:1;13802:81;13797:1;13790:9;13783:17;13779:105;13776:131;;;13887:18;;:::i;:::-;13776:131;13935:1;13932;13928:9;13917:20;;13595:348;;;;:::o;13949:180::-;13997:77;13994:1;13987:88;14094:4;14091:1;14084:15;14118:4;14115:1;14108:15;14135:185;14175:1;14192:20;14210:1;14192:20;:::i;:::-;14187:25;;14226:20;14244:1;14226:20;:::i;:::-;14221:25;;14265:1;14255:35;;14270:18;;:::i;:::-;14255:35;14312:1;14309;14305:9;14300:14;;14135:185;;;;:::o;14326:234::-;14466:34;14462:1;14454:6;14450:14;14443:58;14535:17;14530:2;14522:6;14518:15;14511:42;14326:234;:::o;14566:366::-;14708:3;14729:67;14793:2;14788:3;14729:67;:::i;:::-;14722:74;;14805:93;14894:3;14805:93;:::i;:::-;14923:2;14918:3;14914:12;14907:19;;14566:366;;;:::o;14938:419::-;15104:4;15142:2;15131:9;15127:18;15119:26;;15191:9;15185:4;15181:20;15177:1;15166:9;15162:17;15155:47;15219:131;15345:4;15219:131;:::i;:::-;15211:139;;14938:419;;;:::o;15363:227::-;15503:34;15499:1;15491:6;15487:14;15480:58;15572:10;15567:2;15559:6;15555:15;15548:35;15363:227;:::o;15596:366::-;15738:3;15759:67;15823:2;15818:3;15759:67;:::i;:::-;15752:74;;15835:93;15924:3;15835:93;:::i;:::-;15953:2;15948:3;15944:12;15937:19;;15596:366;;;:::o;15968:419::-;16134:4;16172:2;16161:9;16157:18;16149:26;;16221:9;16215:4;16211:20;16207:1;16196:9;16192:17;16185:47;16249:131;16375:4;16249:131;:::i;:::-;16241:139;;15968:419;;;:::o;16393:305::-;16433:3;16452:20;16470:1;16452:20;:::i;:::-;16447:25;;16486:20;16504:1;16486:20;:::i;:::-;16481:25;;16640:1;16572:66;16568:74;16565:1;16562:81;16559:107;;;16646:18;;:::i;:::-;16559:107;16690:1;16687;16683:9;16676:16;;16393:305;;;;:::o;16704:180::-;16752:77;16749:1;16742:88;16849:4;16846:1;16839:15;16873:4;16870:1;16863:15;16890:233;16929:3;16952:24;16970:5;16952:24;:::i;:::-;16943:33;;16998:66;16991:5;16988:77;16985:103;;;17068:18;;:::i;:::-;16985:103;17115:1;17108:5;17104:13;17097:20;;16890:233;;;:::o;17129:147::-;17230:11;17267:3;17252:18;;17129:147;;;;:::o;17282:114::-;;:::o;17402:398::-;17561:3;17582:83;17663:1;17658:3;17582:83;:::i;:::-;17575:90;;17674:93;17763:3;17674:93;:::i;:::-;17792:1;17787:3;17783:11;17776:18;;17402:398;;;:::o;17806:379::-;17990:3;18012:147;18155:3;18012:147;:::i;:::-;18005:154;;18176:3;18169:10;;17806:379;;;:::o;18191:174::-;18331:26;18327:1;18319:6;18315:14;18308:50;18191:174;:::o;18371:366::-;18513:3;18534:67;18598:2;18593:3;18534:67;:::i;:::-;18527:74;;18610:93;18699:3;18610:93;:::i;:::-;18728:2;18723:3;18719:12;18712:19;;18371:366;;;:::o;18743:419::-;18909:4;18947:2;18936:9;18932:18;18924:26;;18996:9;18990:4;18986:20;18982:1;18971:9;18967:17;18960:47;19024:131;19150:4;19024:131;:::i;:::-;19016:139;;18743:419;;;:::o;19168:179::-;19308:31;19304:1;19296:6;19292:14;19285:55;19168:179;:::o;19353:366::-;19495:3;19516:67;19580:2;19575:3;19516:67;:::i;:::-;19509:74;;19592:93;19681:3;19592:93;:::i;:::-;19710:2;19705:3;19701:12;19694:19;;19353:366;;;:::o;19725:419::-;19891:4;19929:2;19918:9;19914:18;19906:26;;19978:9;19972:4;19968:20;19964:1;19953:9;19949:17;19942:47;20006:131;20132:4;20006:131;:::i;:::-;19998:139;;19725:419;;;:::o;20150:244::-;20290:34;20286:1;20278:6;20274:14;20267:58;20359:27;20354:2;20346:6;20342:15;20335:52;20150:244;:::o;20400:366::-;20542:3;20563:67;20627:2;20622:3;20563:67;:::i;:::-;20556:74;;20639:93;20728:3;20639:93;:::i;:::-;20757:2;20752:3;20748:12;20741:19;;20400:366;;;:::o;20772:419::-;20938:4;20976:2;20965:9;20961:18;20953:26;;21025:9;21019:4;21015:20;21011:1;21000:9;20996:17;20989:47;21053:131;21179:4;21053:131;:::i;:::-;21045:139;;20772:419;;;:::o;21197:224::-;21337:34;21333:1;21325:6;21321:14;21314:58;21406:7;21401:2;21393:6;21389:15;21382:32;21197:224;:::o;21427:366::-;21569:3;21590:67;21654:2;21649:3;21590:67;:::i;:::-;21583:74;;21666:93;21755:3;21666:93;:::i;:::-;21784:2;21779:3;21775:12;21768:19;;21427:366;;;:::o;21799:419::-;21965:4;22003:2;21992:9;21988:18;21980:26;;22052:9;22046:4;22042:20;22038:1;22027:9;22023:17;22016:47;22080:131;22206:4;22080:131;:::i;:::-;22072:139;;21799:419;;;:::o;22224:223::-;22364:34;22360:1;22352:6;22348:14;22341:58;22433:6;22428:2;22420:6;22416:15;22409:31;22224:223;:::o;22453:366::-;22595:3;22616:67;22680:2;22675:3;22616:67;:::i;:::-;22609:74;;22692:93;22781:3;22692:93;:::i;:::-;22810:2;22805:3;22801:12;22794:19;;22453:366;;;:::o;22825:419::-;22991:4;23029:2;23018:9;23014:18;23006:26;;23078:9;23072:4;23068:20;23064:1;23053:9;23049:17;23042:47;23106:131;23232:4;23106:131;:::i;:::-;23098:139;;22825:419;;;:::o;23250:240::-;23390:34;23386:1;23378:6;23374:14;23367:58;23459:23;23454:2;23446:6;23442:15;23435:48;23250:240;:::o;23496:366::-;23638:3;23659:67;23723:2;23718:3;23659:67;:::i;:::-;23652:74;;23735:93;23824:3;23735:93;:::i;:::-;23853:2;23848:3;23844:12;23837:19;;23496:366;;;:::o;23868:419::-;24034:4;24072:2;24061:9;24057:18;24049:26;;24121:9;24115:4;24111:20;24107:1;24096:9;24092:17;24085:47;24149:131;24275:4;24149:131;:::i;:::-;24141:139;;23868:419;;;:::o;24293:239::-;24433:34;24429:1;24421:6;24417:14;24410:58;24502:22;24497:2;24489:6;24485:15;24478:47;24293:239;:::o;24538:366::-;24680:3;24701:67;24765:2;24760:3;24701:67;:::i;:::-;24694:74;;24777:93;24866:3;24777:93;:::i;:::-;24895:2;24890:3;24886:12;24879:19;;24538:366;;;:::o;24910:419::-;25076:4;25114:2;25103:9;25099:18;25091:26;;25163:9;25157:4;25153:20;25149:1;25138:9;25134:17;25127:47;25191:131;25317:4;25191:131;:::i;:::-;25183:139;;24910:419;;;:::o;25335:225::-;25475:34;25471:1;25463:6;25459:14;25452:58;25544:8;25539:2;25531:6;25527:15;25520:33;25335:225;:::o;25566:366::-;25708:3;25729:67;25793:2;25788:3;25729:67;:::i;:::-;25722:74;;25805:93;25894:3;25805:93;:::i;:::-;25923:2;25918:3;25914:12;25907:19;;25566:366;;;:::o;25938:419::-;26104:4;26142:2;26131:9;26127:18;26119:26;;26191:9;26185:4;26181:20;26177:1;26166:9;26162:17;26155:47;26219:131;26345:4;26219:131;:::i;:::-;26211:139;;25938:419;;;:::o;26363:223::-;26503:34;26499:1;26491:6;26487:14;26480:58;26572:6;26567:2;26559:6;26555:15;26548:31;26363:223;:::o;26592:366::-;26734:3;26755:67;26819:2;26814:3;26755:67;:::i;:::-;26748:74;;26831:93;26920:3;26831:93;:::i;:::-;26949:2;26944:3;26940:12;26933:19;;26592:366;;;:::o;26964:419::-;27130:4;27168:2;27157:9;27153:18;27145:26;;27217:9;27211:4;27207:20;27203:1;27192:9;27188:17;27181:47;27245:131;27371:4;27245:131;:::i;:::-;27237:139;;26964:419;;;:::o;27389:221::-;27529:34;27525:1;27517:6;27513:14;27506:58;27598:4;27593:2;27585:6;27581:15;27574:29;27389:221;:::o;27616:366::-;27758:3;27779:67;27843:2;27838:3;27779:67;:::i;:::-;27772:74;;27855:93;27944:3;27855:93;:::i;:::-;27973:2;27968:3;27964:12;27957:19;;27616:366;;;:::o;27988:419::-;28154:4;28192:2;28181:9;28177:18;28169:26;;28241:9;28235:4;28231:20;28227:1;28216:9;28212:17;28205:47;28269:131;28395:4;28269:131;:::i;:::-;28261:139;;27988:419;;;:::o;28413:224::-;28553:34;28549:1;28541:6;28537:14;28530:58;28622:7;28617:2;28609:6;28605:15;28598:32;28413:224;:::o;28643:366::-;28785:3;28806:67;28870:2;28865:3;28806:67;:::i;:::-;28799:74;;28882:93;28971:3;28882:93;:::i;:::-;29000:2;28995:3;28991:12;28984:19;;28643:366;;;:::o;29015:419::-;29181:4;29219:2;29208:9;29204:18;29196:26;;29268:9;29262:4;29258:20;29254:1;29243:9;29239:17;29232:47;29296:131;29422:4;29296:131;:::i;:::-;29288:139;;29015:419;;;:::o;29440:229::-;29580:34;29576:1;29568:6;29564:14;29557:58;29649:12;29644:2;29636:6;29632:15;29625:37;29440:229;:::o;29675:366::-;29817:3;29838:67;29902:2;29897:3;29838:67;:::i;:::-;29831:74;;29914:93;30003:3;29914:93;:::i;:::-;30032:2;30027:3;30023:12;30016:19;;29675:366;;;:::o;30047:419::-;30213:4;30251:2;30240:9;30236:18;30228:26;;30300:9;30294:4;30290:20;30286:1;30275:9;30271:17;30264:47;30328:131;30454:4;30328:131;:::i;:::-;30320:139;;30047:419;;;:::o;30472:231::-;30612:34;30608:1;30600:6;30596:14;30589:58;30681:14;30676:2;30668:6;30664:15;30657:39;30472:231;:::o;30709:366::-;30851:3;30872:67;30936:2;30931:3;30872:67;:::i;:::-;30865:74;;30948:93;31037:3;30948:93;:::i;:::-;31066:2;31061:3;31057:12;31050:19;;30709:366;;;:::o;31081:419::-;31247:4;31285:2;31274:9;31270:18;31262:26;;31334:9;31328:4;31324:20;31320:1;31309:9;31305:17;31298:47;31362:131;31488:4;31362:131;:::i;:::-;31354:139;;31081:419;;;:::o;31506:299::-;31646:34;31642:1;31634:6;31630:14;31623:58;31715:34;31710:2;31702:6;31698:15;31691:59;31784:13;31779:2;31771:6;31767:15;31760:38;31506:299;:::o;31811:366::-;31953:3;31974:67;32038:2;32033:3;31974:67;:::i;:::-;31967:74;;32050:93;32139:3;32050:93;:::i;:::-;32168:2;32163:3;32159:12;32152:19;;31811:366;;;:::o;32183:419::-;32349:4;32387:2;32376:9;32372:18;32364:26;;32436:9;32430:4;32426:20;32422:1;32411:9;32407:17;32400:47;32464:131;32590:4;32464:131;:::i;:::-;32456:139;;32183:419;;;:::o;32608:240::-;32748:34;32744:1;32736:6;32732:14;32725:58;32817:23;32812:2;32804:6;32800:15;32793:48;32608:240;:::o;32854:366::-;32996:3;33017:67;33081:2;33076:3;33017:67;:::i;:::-;33010:74;;33093:93;33182:3;33093:93;:::i;:::-;33211:2;33206:3;33202:12;33195:19;;32854:366;;;:::o;33226:419::-;33392:4;33430:2;33419:9;33415:18;33407:26;;33479:9;33473:4;33469:20;33465:1;33454:9;33450:17;33443:47;33507:131;33633:4;33507:131;:::i;:::-;33499:139;;33226:419;;;:::o;33651:169::-;33791:21;33787:1;33779:6;33775:14;33768:45;33651:169;:::o;33826:366::-;33968:3;33989:67;34053:2;34048:3;33989:67;:::i;:::-;33982:74;;34065:93;34154:3;34065:93;:::i;:::-;34183:2;34178:3;34174:12;34167:19;;33826:366;;;:::o;34198:419::-;34364:4;34402:2;34391:9;34387:18;34379:26;;34451:9;34445:4;34441:20;34437:1;34426:9;34422:17;34415:47;34479:131;34605:4;34479:131;:::i;:::-;34471:139;;34198:419;;;:::o;34623:241::-;34763:34;34759:1;34751:6;34747:14;34740:58;34832:24;34827:2;34819:6;34815:15;34808:49;34623:241;:::o;34870:366::-;35012:3;35033:67;35097:2;35092:3;35033:67;:::i;:::-;35026:74;;35109:93;35198:3;35109:93;:::i;:::-;35227:2;35222:3;35218:12;35211:19;;34870:366;;;:::o;35242:419::-;35408:4;35446:2;35435:9;35431:18;35423:26;;35495:9;35489:4;35485:20;35481:1;35470:9;35466:17;35459:47;35523:131;35649:4;35523:131;:::i;:::-;35515:139;;35242:419;;;:::o;35667:191::-;35707:4;35727:20;35745:1;35727:20;:::i;:::-;35722:25;;35761:20;35779:1;35761:20;:::i;:::-;35756:25;;35800:1;35797;35794:8;35791:34;;;35805:18;;:::i;:::-;35791:34;35850:1;35847;35843:9;35835:17;;35667:191;;;;:::o;35864:222::-;36004:34;36000:1;35992:6;35988:14;35981:58;36073:5;36068:2;36060:6;36056:15;36049:30;35864:222;:::o;36092:366::-;36234:3;36255:67;36319:2;36314:3;36255:67;:::i;:::-;36248:74;;36331:93;36420:3;36331:93;:::i;:::-;36449:2;36444:3;36440:12;36433:19;;36092:366;;;:::o;36464:419::-;36630:4;36668:2;36657:9;36653:18;36645:26;;36717:9;36711:4;36707:20;36703:1;36692:9;36688:17;36681:47;36745:131;36871:4;36745:131;:::i;:::-;36737:139;;36464:419;;;:::o;36889:225::-;37029:34;37025:1;37017:6;37013:14;37006:58;37098:8;37093:2;37085:6;37081:15;37074:33;36889:225;:::o;37120:366::-;37262:3;37283:67;37347:2;37342:3;37283:67;:::i;:::-;37276:74;;37359:93;37448:3;37359:93;:::i;:::-;37477:2;37472:3;37468:12;37461:19;;37120:366;;;:::o;37492:419::-;37658:4;37696:2;37685:9;37681:18;37673:26;;37745:9;37739:4;37735:20;37731:1;37720:9;37716:17;37709:47;37773:131;37899:4;37773:131;:::i;:::-;37765:139;;37492:419;;;:::o;37917:442::-;38066:4;38104:2;38093:9;38089:18;38081:26;;38117:71;38185:1;38174:9;38170:17;38161:6;38117:71;:::i;:::-;38198:72;38266:2;38255:9;38251:18;38242:6;38198:72;:::i;:::-;38280;38348:2;38337:9;38333:18;38324:6;38280:72;:::i;:::-;37917:442;;;;;;:::o;38365:143::-;38422:5;38453:6;38447:13;38438:22;;38469:33;38496:5;38469:33;:::i;:::-;38365:143;;;;:::o;38514:351::-;38584:6;38633:2;38621:9;38612:7;38608:23;38604:32;38601:119;;;38639:79;;:::i;:::-;38601:119;38759:1;38784:64;38840:7;38831:6;38820:9;38816:22;38784:64;:::i;:::-;38774:74;;38730:128;38514:351;;;;:::o;38871:85::-;38916:7;38945:5;38934:16;;38871:85;;;:::o;38962:158::-;39020:9;39053:61;39071:42;39080:32;39106:5;39080:32;:::i;:::-;39071:42;:::i;:::-;39053:61;:::i;:::-;39040:74;;38962:158;;;:::o;39126:147::-;39221:45;39260:5;39221:45;:::i;:::-;39216:3;39209:58;39126:147;;:::o;39279:114::-;39346:6;39380:5;39374:12;39364:22;;39279:114;;;:::o;39399:184::-;39498:11;39532:6;39527:3;39520:19;39572:4;39567:3;39563:14;39548:29;;39399:184;;;;:::o;39589:132::-;39656:4;39679:3;39671:11;;39709:4;39704:3;39700:14;39692:22;;39589:132;;;:::o;39727:108::-;39804:24;39822:5;39804:24;:::i;:::-;39799:3;39792:37;39727:108;;:::o;39841:179::-;39910:10;39931:46;39973:3;39965:6;39931:46;:::i;:::-;40009:4;40004:3;40000:14;39986:28;;39841:179;;;;:::o;40026:113::-;40096:4;40128;40123:3;40119:14;40111:22;;40026:113;;;:::o;40175:732::-;40294:3;40323:54;40371:5;40323:54;:::i;:::-;40393:86;40472:6;40467:3;40393:86;:::i;:::-;40386:93;;40503:56;40553:5;40503:56;:::i;:::-;40582:7;40613:1;40598:284;40623:6;40620:1;40617:13;40598:284;;;40699:6;40693:13;40726:63;40785:3;40770:13;40726:63;:::i;:::-;40719:70;;40812:60;40865:6;40812:60;:::i;:::-;40802:70;;40658:224;40645:1;40642;40638:9;40633:14;;40598:284;;;40602:14;40898:3;40891:10;;40299:608;;;40175:732;;;;:::o;40913:831::-;41176:4;41214:3;41203:9;41199:19;41191:27;;41228:71;41296:1;41285:9;41281:17;41272:6;41228:71;:::i;:::-;41309:80;41385:2;41374:9;41370:18;41361:6;41309:80;:::i;:::-;41436:9;41430:4;41426:20;41421:2;41410:9;41406:18;41399:48;41464:108;41567:4;41558:6;41464:108;:::i;:::-;41456:116;;41582:72;41650:2;41639:9;41635:18;41626:6;41582:72;:::i;:::-;41664:73;41732:3;41721:9;41717:19;41708:6;41664:73;:::i;:::-;40913:831;;;;;;;;:::o;41750:807::-;41999:4;42037:3;42026:9;42022:19;42014:27;;42051:71;42119:1;42108:9;42104:17;42095:6;42051:71;:::i;:::-;42132:72;42200:2;42189:9;42185:18;42176:6;42132:72;:::i;:::-;42214:80;42290:2;42279:9;42275:18;42266:6;42214:80;:::i;:::-;42304;42380:2;42369:9;42365:18;42356:6;42304:80;:::i;:::-;42394:73;42462:3;42451:9;42447:19;42438:6;42394:73;:::i;:::-;42477;42545:3;42534:9;42530:19;42521:6;42477:73;:::i;:::-;41750:807;;;;;;;;;:::o;42563:143::-;42620:5;42651:6;42645:13;42636:22;;42667:33;42694:5;42667:33;:::i;:::-;42563:143;;;;:::o;42712:663::-;42800:6;42808;42816;42865:2;42853:9;42844:7;42840:23;42836:32;42833:119;;;42871:79;;:::i;:::-;42833:119;42991:1;43016:64;43072:7;43063:6;43052:9;43048:22;43016:64;:::i;:::-;43006:74;;42962:128;43129:2;43155:64;43211:7;43202:6;43191:9;43187:22;43155:64;:::i;:::-;43145:74;;43100:129;43268:2;43294:64;43350:7;43341:6;43330:9;43326:22;43294:64;:::i;:::-;43284:74;;43239:129;42712:663;;;;;:::o

Swarm Source

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