ETH Price: $2,893.31 (-10.20%)
Gas: 14 Gwei

Token

Jarvis (JARVIS)
 

Overview

Max Total Supply

1,000,000 JARVIS

Holders

58

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
4,745.310346259 JARVIS

Value
$0.00
0x8c3108292daf647905ab6cea97da9ddae1763338
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:
JARVIS

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
Website - https://jarviserc.ai
Tg - https://t.me/jarvisERC
Twitter - https://twitter.com/jarviserc
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;
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;
    }
}

contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    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);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    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;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    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;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    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 {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    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 JARVIS is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public marketingWallet;

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

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

    uint256 public launchedAt;
    uint256 public launchedAtTimestamp;
    uint256 antiSnipingTime = 30 seconds;

    uint256 public buyTotalFees = 17;
    uint256 public buyMarketingFee = 15;
    uint256 public buyLiquidityFee = 2;

    uint256 public sellTotalFees = 50;
    uint256 public sellMarketingFee = 45;
    uint256 public sellLiquidityFee = 5;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;

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

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Jarvis", "JARVIS") {
        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 totalSupply = 1000000 * 10 ** 9;

        maxTransactionAmount = totalSupply / 50; // 1% from total supply maxTransactionAmountTxn
        maxWallet = totalSupply / 30; // 1% from total supply maxWallet
        swapTokensAtAmount = totalSupply.div(10000);

        marketingWallet = address(0xC39Ac25849de625ae794aF78199289Bd1Bd5b2a0); // set as marketing wallet

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

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(owner(), totalSupply);
    }

    receive() external payable {}

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function pause() public onlyOwner {
        tradingActive = false;
    }

    function launch() public onlyOwner {
        require(launchedAt == 0, "Already launched");
        launchedAt = block.number;
        launchedAtTimestamp = block.timestamp;
        tradingActive = true;
        swapEnabled = true;
    }

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

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        maxTransactionAmount = newNum * (10 ** 9);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        maxWallet = newNum * (10 ** 9);
    }

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

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

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

    function addSniperInList(address _account) external onlyOwner {
        require(
            _account != address(uniswapV2Router),
            "We can not blacklist router"
        );
        require(!isSniper[_account], "Sniper already exist");
        isSniper[_account] = true;
    }

    function removeSniperFromList(address _account) external onlyOwner {
        require(isSniper[_account], "Not a sniper");
        isSniper[_account] = false;
    }

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

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }
                // antibot
                if (
                    block.timestamp < launchedAtTimestamp + antiSnipingTime &&
                    from != address(uniswapV2Router)
                ) {
                    if (from == uniswapV2Pair) {
                        isSniper[to] = true;
                    } else if (to == uniswapV2Pair) {
                        isSniper[from] = true;
                    }
                }
                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

        // 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 ethForLiquidity = ethBalance - ethForMarketing;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;

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

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

    function airdrop(
        address[] calldata addresses,
        uint256[] calldata amounts
    ) external onlyOwner {
        require(
            addresses.length == amounts.length,
            "Array sizes must be equal"
        );
        uint256 i = 0;
        while (i < addresses.length) {
            uint256 _amount = amounts[i].mul(1e9);
            _transfer(msg.sender, addresses[i], _amount);
            i += 1;
        }
    }

    function withdrawETH(uint256 _amount) external onlyOwner {
        require(address(this).balance >= _amount, "Invalid Amount");
        payable(msg.sender).transfer(_amount);
    }

    function withdrawToken(IERC20 _token, uint256 _amount) external onlyOwner {
        require(_token.balanceOf(address(this)) >= _amount, "Invalid Amount");
        _token.transfer(msg.sender, _amount);
    }
}

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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"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":"_account","type":"address"}],"name":"addSniperInList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeSniperFromList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff021916908315150217905550601e600d556011600e55600f805560026010556032601155602d60125560056013553480156200008457600080fd5b506040518060400160405280600681526020017f4a617276697300000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4a4152564953000000000000000000000000000000000000000000000000000081525081600390805190602001906200010992919062000a29565b5080600490805190602001906200012292919062000a29565b5050506200014562000139620004d160201b60201c565b620004d960201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001718160016200059f60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000217919062000b43565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a5919062000b43565b6040518363ffffffff1660e01b8152600401620002c492919062000b86565b6020604051808303816000875af1158015620002e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030a919062000b43565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200035260a05160016200059f60201b60201c565b6200036760a05160016200068960201b60201c565b600066038d7ea4c68000905060328162000382919062000c1b565b600781905550601e8162000397919062000c1b565b600981905550620003b9612710826200072a60201b620027251790919060201c565b60088190555073c39ac25849de625ae794af78199289bd1bd5b2a0600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000436620004286200074260201b60201c565b60016200076c60201b60201c565b620004493060016200076c60201b60201c565b6200045e61dead60016200076c60201b60201c565b62000480620004726200074260201b60201c565b60016200059f60201b60201c565b620004933060016200059f60201b60201c565b620004a861dead60016200059f60201b60201c565b620004c9620004bc6200074260201b60201c565b82620008a660201b60201c565b505062000e72565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005af620004d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005d56200074260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200062e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006259062000cb4565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836200073a919062000c1b565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200077c620004d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007a26200074260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007f29062000cb4565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200089a919062000cf3565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000919576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009109062000d60565b60405180910390fd5b6200092d6000838362000a1f60201b60201c565b806002600082825462000941919062000d82565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000998919062000d82565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009ff919062000df0565b60405180910390a362000a1b6000838362000a2460201b60201c565b5050565b505050565b505050565b82805462000a379062000e3c565b90600052602060002090601f01602090048101928262000a5b576000855562000aa7565b82601f1062000a7657805160ff191683800117855562000aa7565b8280016001018555821562000aa7579182015b8281111562000aa657825182559160200191906001019062000a89565b5b50905062000ab6919062000aba565b5090565b5b8082111562000ad557600081600090555060010162000abb565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b0b8262000ade565b9050919050565b62000b1d8162000afe565b811462000b2957600080fd5b50565b60008151905062000b3d8162000b12565b92915050565b60006020828403121562000b5c5762000b5b62000ad9565b5b600062000b6c8482850162000b2c565b91505092915050565b62000b808162000afe565b82525050565b600060408201905062000b9d600083018562000b75565b62000bac602083018462000b75565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c288262000bb3565b915062000c358362000bb3565b92508262000c485762000c4762000bbd565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000c9c60208362000c53565b915062000ca98262000c64565b602082019050919050565b6000602082019050818103600083015262000ccf8162000c8d565b9050919050565b60008115159050919050565b62000ced8162000cd6565b82525050565b600060208201905062000d0a600083018462000ce2565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000d48601f8362000c53565b915062000d558262000d10565b602082019050919050565b6000602082019050818103600083015262000d7b8162000d39565b9050919050565b600062000d8f8262000bb3565b915062000d9c8362000bb3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dd45762000dd362000bec565b5b828201905092915050565b62000dea8162000bb3565b82525050565b600060208201905062000e07600083018462000ddf565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e5557607f821691505b6020821081141562000e6c5762000e6b62000e0d565b5b50919050565b60805160a05161563c62000ede6000396000818161147301528181611bf401528181612da40152612e55015260008181610ffe0152818161125001528181612d4e01528181613d1501528181613df601528181613e1d01528181613eb90152613ee0015261563c6000f3fe60806040526004361061036f5760003560e01c80637bce5a04116101c6578063c0246668116100f7578063dd7bd77511610095578063f14210a61161006f578063f14210a614610cb9578063f2fde38b14610ce2578063f637434214610d0b578063f8b45b0514610d3657610376565b8063dd7bd77514610c3a578063e2f4560514610c63578063f11a24d314610c8e57610376565b8063c8c8ebe4116100d1578063c8c8ebe414610b6a578063d257b34f14610b95578063d85ba06314610bd2578063dd62ed3e14610bfd57610376565b8063c024666814610aed578063c18bc19514610b16578063c6d2577d14610b3f57610376565b80639e281a9811610164578063aacebbe31161013e578063aacebbe314610a31578063b62496f514610a5a578063bbc0c74214610a97578063bf56b37114610ac257610376565b80639e281a981461098e578063a457c2d7146109b7578063a9059cbb146109f457610376565b806392136913116101a057806392136913146108e6578063924de9b71461091157806395d89b411461093a5780639a7a23d61461096557610376565b80637bce5a04146108795780638456cb59146108a45780638da5cb5b146108bb57610376565b806338d6f847116102a05780636a486a8e1161023e578063715018a611610218578063715018a6146107e3578063751039fc146107fa5780637571336a1461082557806375f0a8741461084e57610376565b80636a486a8e146107505780636ddd17131461077b57806370a08231146107a657610376565b80634a62bb651161027a5780634a62bb65146106965780634fbee193146106c157806366ca9b83146106fe578063672434821461072757610376565b806338d6f84714610605578063395093511461062e57806349bd5a5e1461066b57610376565b806318160ddd1161030d578063203e727e116102e7578063203e727e1461054957806323b872dd1461057257806327c8f835146105af578063313ce567146105da57610376565b806318160ddd146104c85780631a8145bb146104f35780631f3fed8f1461051e57610376565b8063095ea7b311610349578063095ea7b3146103e65780630f3a325f1461042357806310d5de53146104605780631694505e1461049d57610376565b806301339c211461037b57806302dbd8f81461039257806306fdde03146103bb57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d61565b005b34801561039e57600080fd5b506103b960048036038101906103b49190613fcf565b610e68565b005b3480156103c757600080fd5b506103d0610f0c565b6040516103dd91906140a8565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190614128565b610f9e565b60405161041a9190614183565b60405180910390f35b34801561042f57600080fd5b5061044a6004803603810190610445919061419e565b610fbc565b6040516104579190614183565b60405180910390f35b34801561046c57600080fd5b506104876004803603810190610482919061419e565b610fdc565b6040516104949190614183565b60405180910390f35b3480156104a957600080fd5b506104b2610ffc565b6040516104bf919061422a565b60405180910390f35b3480156104d457600080fd5b506104dd611020565b6040516104ea9190614254565b60405180910390f35b3480156104ff57600080fd5b5061050861102a565b6040516105159190614254565b60405180910390f35b34801561052a57600080fd5b50610533611030565b6040516105409190614254565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b919061426f565b611036565b005b34801561057e57600080fd5b506105996004803603810190610594919061429c565b6110cb565b6040516105a69190614183565b60405180910390f35b3480156105bb57600080fd5b506105c46111c3565b6040516105d191906142fe565b60405180910390f35b3480156105e657600080fd5b506105ef6111c9565b6040516105fc9190614335565b60405180910390f35b34801561061157600080fd5b5061062c6004803603810190610627919061419e565b6111d2565b005b34801561063a57600080fd5b5061065560048036038101906106509190614128565b6113c5565b6040516106629190614183565b60405180910390f35b34801561067757600080fd5b50610680611471565b60405161068d91906142fe565b60405180910390f35b3480156106a257600080fd5b506106ab611495565b6040516106b89190614183565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e3919061419e565b6114a8565b6040516106f59190614183565b60405180910390f35b34801561070a57600080fd5b5061072560048036038101906107209190613fcf565b6114fe565b005b34801561073357600080fd5b5061074e6004803603810190610749919061440b565b6115a2565b005b34801561075c57600080fd5b506107656116f6565b6040516107729190614254565b60405180910390f35b34801561078757600080fd5b506107906116fc565b60405161079d9190614183565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c8919061419e565b61170f565b6040516107da9190614254565b60405180910390f35b3480156107ef57600080fd5b506107f8611757565b005b34801561080657600080fd5b5061080f6117df565b60405161081c9190614183565b60405180910390f35b34801561083157600080fd5b5061084c600480360381019061084791906144b8565b61187f565b005b34801561085a57600080fd5b50610863611956565b60405161087091906142fe565b60405180910390f35b34801561088557600080fd5b5061088e61197c565b60405161089b9190614254565b60405180910390f35b3480156108b057600080fd5b506108b9611982565b005b3480156108c757600080fd5b506108d0611a1b565b6040516108dd91906142fe565b60405180910390f35b3480156108f257600080fd5b506108fb611a45565b6040516109089190614254565b60405180910390f35b34801561091d57600080fd5b50610938600480360381019061093391906144f8565b611a4b565b005b34801561094657600080fd5b5061094f611ae4565b60405161095c91906140a8565b60405180910390f35b34801561097157600080fd5b5061098c600480360381019061098791906144b8565b611b76565b005b34801561099a57600080fd5b506109b560048036038101906109b09190614563565b611c8f565b005b3480156109c357600080fd5b506109de60048036038101906109d99190614128565b611e4a565b6040516109eb9190614183565b60405180910390f35b348015610a0057600080fd5b50610a1b6004803603810190610a169190614128565b611f35565b604051610a289190614183565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a53919061419e565b611f53565b005b348015610a6657600080fd5b50610a816004803603810190610a7c919061419e565b61208f565b604051610a8e9190614183565b60405180910390f35b348015610aa357600080fd5b50610aac6120af565b604051610ab99190614183565b60405180910390f35b348015610ace57600080fd5b50610ad76120c2565b604051610ae49190614254565b60405180910390f35b348015610af957600080fd5b50610b146004803603810190610b0f91906144b8565b6120c8565b005b348015610b2257600080fd5b50610b3d6004803603810190610b38919061426f565b6121ed565b005b348015610b4b57600080fd5b50610b54612282565b604051610b619190614254565b60405180910390f35b348015610b7657600080fd5b50610b7f612288565b604051610b8c9190614254565b60405180910390f35b348015610ba157600080fd5b50610bbc6004803603810190610bb7919061426f565b61228e565b604051610bc99190614183565b60405180910390f35b348015610bde57600080fd5b50610be761231c565b604051610bf49190614254565b60405180910390f35b348015610c0957600080fd5b50610c246004803603810190610c1f91906145a3565b612322565b604051610c319190614254565b60405180910390f35b348015610c4657600080fd5b50610c616004803603810190610c5c919061419e565b6123a9565b005b348015610c6f57600080fd5b50610c7861250c565b604051610c859190614254565b60405180910390f35b348015610c9a57600080fd5b50610ca3612512565b604051610cb09190614254565b60405180910390f35b348015610cc557600080fd5b50610ce06004803603810190610cdb919061426f565b612518565b005b348015610cee57600080fd5b50610d096004803603810190610d04919061419e565b612621565b005b348015610d1757600080fd5b50610d20612719565b604051610d2d9190614254565b60405180910390f35b348015610d4257600080fd5b50610d4b61271f565b604051610d589190614254565b60405180910390f35b610d6961273b565b73ffffffffffffffffffffffffffffffffffffffff16610d87611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd49061462f565b60405180910390fd5b6000600b5414610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e199061469b565b60405180910390fd5b43600b8190555042600c819055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550565b610e7061273b565b73ffffffffffffffffffffffffffffffffffffffff16610e8e611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061462f565b60405180910390fd5b8160128190555080601381905550601354601254610f0291906146ea565b6011819055505050565b606060038054610f1b9061476f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f479061476f565b8015610f945780601f10610f6957610100808354040283529160200191610f94565b820191906000526020600020905b815481529060010190602001808311610f7757829003601f168201915b5050505050905090565b6000610fb2610fab61273b565b8484612743565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b60176020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60155481565b60145481565b61103e61273b565b73ffffffffffffffffffffffffffffffffffffffff1661105c611a1b565b73ffffffffffffffffffffffffffffffffffffffff16146110b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a99061462f565b60405180910390fd5b633b9aca00816110c291906147a1565b60078190555050565b60006110d884848461290e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061112361273b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a9061486d565b60405180910390fd5b6111b7856111af61273b565b858403612743565b60019150509392505050565b61dead81565b60006009905090565b6111da61273b565b73ffffffffffffffffffffffffffffffffffffffff166111f8611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461124e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112459061462f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d4906148d9565b60405180910390fd5b601860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561136a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136190614945565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006114676113d261273b565b8484600160006113e061273b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461146291906146ea565b612743565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61150661273b565b73ffffffffffffffffffffffffffffffffffffffff16611524611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461157a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115719061462f565b60405180910390fd5b81600f8190555080601081905550601054600f5461159891906146ea565b600e819055505050565b6115aa61273b565b73ffffffffffffffffffffffffffffffffffffffff166115c8611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461161e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116159061462f565b60405180910390fd5b818190508484905014611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d906149b1565b60405180910390fd5b60005b848490508110156116ef5760006116a6633b9aca00858585818110611691576116906149d1565b5b9050602002013561366390919063ffffffff16565b90506116da338787858181106116bf576116be6149d1565b5b90506020020160208101906116d4919061419e565b8361290e565b6001826116e791906146ea565b915050611669565b5050505050565b60115481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61175f61273b565b73ffffffffffffffffffffffffffffffffffffffff1661177d611a1b565b73ffffffffffffffffffffffffffffffffffffffff16146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca9061462f565b60405180910390fd5b6117dd6000613679565b565b60006117e961273b565b73ffffffffffffffffffffffffffffffffffffffff16611807611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461185d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118549061462f565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b61188761273b565b73ffffffffffffffffffffffffffffffffffffffff166118a5611a1b565b73ffffffffffffffffffffffffffffffffffffffff16146118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f29061462f565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b61198a61273b565b73ffffffffffffffffffffffffffffffffffffffff166119a8611a1b565b73ffffffffffffffffffffffffffffffffffffffff16146119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f59061462f565b60405180910390fd5b6000600a60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b611a5361273b565b73ffffffffffffffffffffffffffffffffffffffff16611a71611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe9061462f565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b606060048054611af39061476f565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1f9061476f565b8015611b6c5780601f10611b4157610100808354040283529160200191611b6c565b820191906000526020600020905b815481529060010190602001808311611b4f57829003601f168201915b5050505050905090565b611b7e61273b565b73ffffffffffffffffffffffffffffffffffffffff16611b9c611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be99061462f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7890614a72565b60405180910390fd5b611c8b828261373f565b5050565b611c9761273b565b73ffffffffffffffffffffffffffffffffffffffff16611cb5611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d029061462f565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d4591906142fe565b602060405180830381865afa158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d869190614aa7565b1015611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614b20565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611e02929190614b40565b6020604051808303816000875af1158015611e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e459190614b7e565b505050565b60008060016000611e5961273b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0d90614c1d565b60405180910390fd5b611f2a611f2161273b565b85858403612743565b600191505092915050565b6000611f49611f4261273b565b848461290e565b6001905092915050565b611f5b61273b565b73ffffffffffffffffffffffffffffffffffffffff16611f79611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc69061462f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b600b5481565b6120d061273b565b73ffffffffffffffffffffffffffffffffffffffff166120ee611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614612144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213b9061462f565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121e19190614183565b60405180910390a25050565b6121f561273b565b73ffffffffffffffffffffffffffffffffffffffff16612213611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614612269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122609061462f565b60405180910390fd5b633b9aca008161227991906147a1565b60098190555050565b600c5481565b60075481565b600061229861273b565b73ffffffffffffffffffffffffffffffffffffffff166122b6611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461230c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123039061462f565b60405180910390fd5b8160088190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123b161273b565b73ffffffffffffffffffffffffffffffffffffffff166123cf611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c9061462f565b60405180910390fd5b601860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a890614c89565b60405180910390fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60085481565b60105481565b61252061273b565b73ffffffffffffffffffffffffffffffffffffffff1661253e611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614612594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258b9061462f565b60405180910390fd5b804710156125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce90614b20565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561261d573d6000803e3d6000fd5b5050565b61262961273b565b73ffffffffffffffffffffffffffffffffffffffff16612647611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461269d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126949061462f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561270d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270490614d1b565b60405180910390fd5b61271681613679565b50565b60135481565b60095481565b600081836127339190614d6a565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa90614e0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281a90614e9f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129019190614254565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561297e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297590614f31565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e590614fc3565b60405180910390fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a729061502f565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff9061502f565b60405180910390fd5b6000811415612b2257612b1d838360006137e0565b61365e565b600a60009054906101000a900460ff16156131ec57612b3f611a1b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612bad5750612b7d611a1b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612be65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c20575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c395750600560149054906101000a900460ff16155b156131eb57600a60019054906101000a900460ff16612d3357601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cf35750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d299061509b565b60405180910390fd5b5b600d54600c54612d4391906146ea565b42108015612d9d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612f02577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e53576001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612f01565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f00576001601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fa55750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561304c57600754811115612fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe69061512d565b60405180910390fd5b600954612ffb8361170f565b8261300691906146ea565b1115613047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303e90615199565b60405180910390fd5b6131ea565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130ef5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561313e57600754811115613139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131309061522b565b60405180910390fd5b6131e9565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166131e85760095461319b8361170f565b826131a691906146ea565b11156131e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131de90615199565b60405180910390fd5b5b5b5b5b5b60006131f73061170f565b90506000600854821015905080801561321c5750600a60029054906101000a900460ff165b80156132355750600560149054906101000a900460ff16155b801561328b5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132e15750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133375750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561337b576001600560146101000a81548160ff02191690831515021790555061335f613a61565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134315750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561343b57600090505b6000811561364e57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561349e57506000601154115b15613538576134cb60646134bd6011548861366390919063ffffffff16565b61272590919063ffffffff16565b9050601154601354826134de91906147a1565b6134e89190614d6a565b601560008282546134f991906146ea565b925050819055506011546012548261351191906147a1565b61351b9190614d6a565b6014600082825461352c91906146ea565b9250508190555061362a565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561359357506000600e54115b15613629576135c060646135b2600e548861366390919063ffffffff16565b61272590919063ffffffff16565b9050600e54601054826135d391906147a1565b6135dd9190614d6a565b601560008282546135ee91906146ea565b92505081905550600e54600f548261360691906147a1565b6136109190614d6a565b6014600082825461362191906146ea565b925050819055505b5b600081111561363f5761363e8730836137e0565b5b808561364b919061524b565b94505b6136598787876137e0565b505050505b505050565b6000818361367191906147a1565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384790614f31565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b790614fc3565b60405180910390fd5b6138cb838383613c56565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613951576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613948906152f1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139e491906146ea565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a489190614254565b60405180910390a3613a5b848484613c5b565b50505050565b6000613a6c3061170f565b90506000601454601554613a8091906146ea565b9050600080831480613a925750600082145b15613a9f57505050613c54565b600854831115613aaf5760085492505b600060028360155486613ac291906147a1565b613acc9190614d6a565b613ad69190614d6a565b90506000613aed8286613c6090919063ffffffff16565b90506000479050613afd82613c76565b6000613b128247613c6090919063ffffffff16565b90506000613b3d87613b2f6014548561366390919063ffffffff16565b61272590919063ffffffff16565b905060008183613b4d919061524b565b905060006015819055506000601481905550600086118015613b6f5750600081115b15613bbc57613b7e8682613eb3565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051613bb393929190615311565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c0290615379565b60006040518083038185875af1925050503d8060008114613c3f576040519150601f19603f3d011682016040523d82523d6000602084013e613c44565b606091505b5050809750505050505050505050505b565b505050565b505050565b60008183613c6e919061524b565b905092915050565b6000600267ffffffffffffffff811115613c9357613c9261538e565b5b604051908082528060200260200182016040528015613cc15781602001602082028036833780820191505090505b5090503081600081518110613cd957613cd86149d1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613da291906153d2565b81600181518110613db657613db56149d1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e1b307f000000000000000000000000000000000000000000000000000000000000000084612743565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e7d9594939291906154f8565b600060405180830381600087803b158015613e9757600080fd5b505af1158015613eab573d6000803e3d6000fd5b505050505050565b613ede307f000000000000000000000000000000000000000000000000000000000000000084612743565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613f4596959493929190615552565b60606040518083038185885af1158015613f63573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f8891906155b3565b5050505050565b600080fd5b600080fd5b6000819050919050565b613fac81613f99565b8114613fb757600080fd5b50565b600081359050613fc981613fa3565b92915050565b60008060408385031215613fe657613fe5613f8f565b5b6000613ff485828601613fba565b925050602061400585828601613fba565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561404957808201518184015260208101905061402e565b83811115614058576000848401525b50505050565b6000601f19601f8301169050919050565b600061407a8261400f565b614084818561401a565b935061409481856020860161402b565b61409d8161405e565b840191505092915050565b600060208201905081810360008301526140c2818461406f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140f5826140ca565b9050919050565b614105816140ea565b811461411057600080fd5b50565b600081359050614122816140fc565b92915050565b6000806040838503121561413f5761413e613f8f565b5b600061414d85828601614113565b925050602061415e85828601613fba565b9150509250929050565b60008115159050919050565b61417d81614168565b82525050565b60006020820190506141986000830184614174565b92915050565b6000602082840312156141b4576141b3613f8f565b5b60006141c284828501614113565b91505092915050565b6000819050919050565b60006141f06141eb6141e6846140ca565b6141cb565b6140ca565b9050919050565b6000614202826141d5565b9050919050565b6000614214826141f7565b9050919050565b61422481614209565b82525050565b600060208201905061423f600083018461421b565b92915050565b61424e81613f99565b82525050565b60006020820190506142696000830184614245565b92915050565b60006020828403121561428557614284613f8f565b5b600061429384828501613fba565b91505092915050565b6000806000606084860312156142b5576142b4613f8f565b5b60006142c386828701614113565b93505060206142d486828701614113565b92505060406142e586828701613fba565b9150509250925092565b6142f8816140ea565b82525050565b600060208201905061431360008301846142ef565b92915050565b600060ff82169050919050565b61432f81614319565b82525050565b600060208201905061434a6000830184614326565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261437557614374614350565b5b8235905067ffffffffffffffff81111561439257614391614355565b5b6020830191508360208202830111156143ae576143ad61435a565b5b9250929050565b60008083601f8401126143cb576143ca614350565b5b8235905067ffffffffffffffff8111156143e8576143e7614355565b5b6020830191508360208202830111156144045761440361435a565b5b9250929050565b6000806000806040858703121561442557614424613f8f565b5b600085013567ffffffffffffffff81111561444357614442613f94565b5b61444f8782880161435f565b9450945050602085013567ffffffffffffffff81111561447257614471613f94565b5b61447e878288016143b5565b925092505092959194509250565b61449581614168565b81146144a057600080fd5b50565b6000813590506144b28161448c565b92915050565b600080604083850312156144cf576144ce613f8f565b5b60006144dd85828601614113565b92505060206144ee858286016144a3565b9150509250929050565b60006020828403121561450e5761450d613f8f565b5b600061451c848285016144a3565b91505092915050565b6000614530826140ea565b9050919050565b61454081614525565b811461454b57600080fd5b50565b60008135905061455d81614537565b92915050565b6000806040838503121561457a57614579613f8f565b5b60006145888582860161454e565b925050602061459985828601613fba565b9150509250929050565b600080604083850312156145ba576145b9613f8f565b5b60006145c885828601614113565b92505060206145d985828601614113565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061461960208361401a565b9150614624826145e3565b602082019050919050565b600060208201905081810360008301526146488161460c565b9050919050565b7f416c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b600061468560108361401a565b91506146908261464f565b602082019050919050565b600060208201905081810360008301526146b481614678565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146f582613f99565b915061470083613f99565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614735576147346146bb565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061478757607f821691505b6020821081141561479b5761479a614740565b5b50919050565b60006147ac82613f99565b91506147b783613f99565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147f0576147ef6146bb565b5b828202905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061485760288361401a565b9150614862826147fb565b604082019050919050565b600060208201905081810360008301526148868161484a565b9050919050565b7f57652063616e206e6f7420626c61636b6c69737420726f757465720000000000600082015250565b60006148c3601b8361401a565b91506148ce8261488d565b602082019050919050565b600060208201905081810360008301526148f2816148b6565b9050919050565b7f536e6970657220616c7265616479206578697374000000000000000000000000600082015250565b600061492f60148361401a565b915061493a826148f9565b602082019050919050565b6000602082019050818103600083015261495e81614922565b9050919050565b7f41727261792073697a6573206d75737420626520657175616c00000000000000600082015250565b600061499b60198361401a565b91506149a682614965565b602082019050919050565b600060208201905081810360008301526149ca8161498e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614a5c60398361401a565b9150614a6782614a00565b604082019050919050565b60006020820190508181036000830152614a8b81614a4f565b9050919050565b600081519050614aa181613fa3565b92915050565b600060208284031215614abd57614abc613f8f565b5b6000614acb84828501614a92565b91505092915050565b7f496e76616c696420416d6f756e74000000000000000000000000000000000000600082015250565b6000614b0a600e8361401a565b9150614b1582614ad4565b602082019050919050565b60006020820190508181036000830152614b3981614afd565b9050919050565b6000604082019050614b5560008301856142ef565b614b626020830184614245565b9392505050565b600081519050614b788161448c565b92915050565b600060208284031215614b9457614b93613f8f565b5b6000614ba284828501614b69565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614c0760258361401a565b9150614c1282614bab565b604082019050919050565b60006020820190508181036000830152614c3681614bfa565b9050919050565b7f4e6f74206120736e697065720000000000000000000000000000000000000000600082015250565b6000614c73600c8361401a565b9150614c7e82614c3d565b602082019050919050565b60006020820190508181036000830152614ca281614c66565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d0560268361401a565b9150614d1082614ca9565b604082019050919050565b60006020820190508181036000830152614d3481614cf8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d7582613f99565b9150614d8083613f99565b925082614d9057614d8f614d3b565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614df760248361401a565b9150614e0282614d9b565b604082019050919050565b60006020820190508181036000830152614e2681614dea565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e8960228361401a565b9150614e9482614e2d565b604082019050919050565b60006020820190508181036000830152614eb881614e7c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f1b60258361401a565b9150614f2682614ebf565b604082019050919050565b60006020820190508181036000830152614f4a81614f0e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fad60238361401a565b9150614fb882614f51565b604082019050919050565b60006020820190508181036000830152614fdc81614fa0565b9050919050565b7f536e697065722064657465637465640000000000000000000000000000000000600082015250565b6000615019600f8361401a565b915061502482614fe3565b602082019050919050565b600060208201905081810360008301526150488161500c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061508560168361401a565b91506150908261504f565b602082019050919050565b600060208201905081810360008301526150b481615078565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061511760358361401a565b9150615122826150bb565b604082019050919050565b600060208201905081810360008301526151468161510a565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061518360138361401a565b915061518e8261514d565b602082019050919050565b600060208201905081810360008301526151b281615176565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061521560368361401a565b9150615220826151b9565b604082019050919050565b6000602082019050818103600083015261524481615208565b9050919050565b600061525682613f99565b915061526183613f99565b925082821015615274576152736146bb565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006152db60268361401a565b91506152e68261527f565b604082019050919050565b6000602082019050818103600083015261530a816152ce565b9050919050565b60006060820190506153266000830186614245565b6153336020830185614245565b6153406040830184614245565b949350505050565b600081905092915050565b50565b6000615363600083615348565b915061536e82615353565b600082019050919050565b600061538482615356565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506153cc816140fc565b92915050565b6000602082840312156153e8576153e7613f8f565b5b60006153f6848285016153bd565b91505092915050565b6000819050919050565b600061542461541f61541a846153ff565b6141cb565b613f99565b9050919050565b61543481615409565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61546f816140ea565b82525050565b60006154818383615466565b60208301905092915050565b6000602082019050919050565b60006154a58261543a565b6154af8185615445565b93506154ba83615456565b8060005b838110156154eb5781516154d28882615475565b97506154dd8361548d565b9250506001810190506154be565b5085935050505092915050565b600060a08201905061550d6000830188614245565b61551a602083018761542b565b818103604083015261552c818661549a565b905061553b60608301856142ef565b6155486080830184614245565b9695505050505050565b600060c08201905061556760008301896142ef565b6155746020830188614245565b615581604083018761542b565b61558e606083018661542b565b61559b60808301856142ef565b6155a860a0830184614245565b979650505050505050565b6000806000606084860312156155cc576155cb613f8f565b5b60006155da86828701614a92565b93505060206155eb86828701614a92565b92505060406155fc86828701614a92565b915050925092509256fea2646970667358221220be54b3b50fb407f36c6bf1ef6afdb6c02b4680c5b475984418166083b647a2ea64736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80637bce5a04116101c6578063c0246668116100f7578063dd7bd77511610095578063f14210a61161006f578063f14210a614610cb9578063f2fde38b14610ce2578063f637434214610d0b578063f8b45b0514610d3657610376565b8063dd7bd77514610c3a578063e2f4560514610c63578063f11a24d314610c8e57610376565b8063c8c8ebe4116100d1578063c8c8ebe414610b6a578063d257b34f14610b95578063d85ba06314610bd2578063dd62ed3e14610bfd57610376565b8063c024666814610aed578063c18bc19514610b16578063c6d2577d14610b3f57610376565b80639e281a9811610164578063aacebbe31161013e578063aacebbe314610a31578063b62496f514610a5a578063bbc0c74214610a97578063bf56b37114610ac257610376565b80639e281a981461098e578063a457c2d7146109b7578063a9059cbb146109f457610376565b806392136913116101a057806392136913146108e6578063924de9b71461091157806395d89b411461093a5780639a7a23d61461096557610376565b80637bce5a04146108795780638456cb59146108a45780638da5cb5b146108bb57610376565b806338d6f847116102a05780636a486a8e1161023e578063715018a611610218578063715018a6146107e3578063751039fc146107fa5780637571336a1461082557806375f0a8741461084e57610376565b80636a486a8e146107505780636ddd17131461077b57806370a08231146107a657610376565b80634a62bb651161027a5780634a62bb65146106965780634fbee193146106c157806366ca9b83146106fe578063672434821461072757610376565b806338d6f84714610605578063395093511461062e57806349bd5a5e1461066b57610376565b806318160ddd1161030d578063203e727e116102e7578063203e727e1461054957806323b872dd1461057257806327c8f835146105af578063313ce567146105da57610376565b806318160ddd146104c85780631a8145bb146104f35780631f3fed8f1461051e57610376565b8063095ea7b311610349578063095ea7b3146103e65780630f3a325f1461042357806310d5de53146104605780631694505e1461049d57610376565b806301339c211461037b57806302dbd8f81461039257806306fdde03146103bb57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d61565b005b34801561039e57600080fd5b506103b960048036038101906103b49190613fcf565b610e68565b005b3480156103c757600080fd5b506103d0610f0c565b6040516103dd91906140a8565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190614128565b610f9e565b60405161041a9190614183565b60405180910390f35b34801561042f57600080fd5b5061044a6004803603810190610445919061419e565b610fbc565b6040516104579190614183565b60405180910390f35b34801561046c57600080fd5b506104876004803603810190610482919061419e565b610fdc565b6040516104949190614183565b60405180910390f35b3480156104a957600080fd5b506104b2610ffc565b6040516104bf919061422a565b60405180910390f35b3480156104d457600080fd5b506104dd611020565b6040516104ea9190614254565b60405180910390f35b3480156104ff57600080fd5b5061050861102a565b6040516105159190614254565b60405180910390f35b34801561052a57600080fd5b50610533611030565b6040516105409190614254565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b919061426f565b611036565b005b34801561057e57600080fd5b506105996004803603810190610594919061429c565b6110cb565b6040516105a69190614183565b60405180910390f35b3480156105bb57600080fd5b506105c46111c3565b6040516105d191906142fe565b60405180910390f35b3480156105e657600080fd5b506105ef6111c9565b6040516105fc9190614335565b60405180910390f35b34801561061157600080fd5b5061062c6004803603810190610627919061419e565b6111d2565b005b34801561063a57600080fd5b5061065560048036038101906106509190614128565b6113c5565b6040516106629190614183565b60405180910390f35b34801561067757600080fd5b50610680611471565b60405161068d91906142fe565b60405180910390f35b3480156106a257600080fd5b506106ab611495565b6040516106b89190614183565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e3919061419e565b6114a8565b6040516106f59190614183565b60405180910390f35b34801561070a57600080fd5b5061072560048036038101906107209190613fcf565b6114fe565b005b34801561073357600080fd5b5061074e6004803603810190610749919061440b565b6115a2565b005b34801561075c57600080fd5b506107656116f6565b6040516107729190614254565b60405180910390f35b34801561078757600080fd5b506107906116fc565b60405161079d9190614183565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c8919061419e565b61170f565b6040516107da9190614254565b60405180910390f35b3480156107ef57600080fd5b506107f8611757565b005b34801561080657600080fd5b5061080f6117df565b60405161081c9190614183565b60405180910390f35b34801561083157600080fd5b5061084c600480360381019061084791906144b8565b61187f565b005b34801561085a57600080fd5b50610863611956565b60405161087091906142fe565b60405180910390f35b34801561088557600080fd5b5061088e61197c565b60405161089b9190614254565b60405180910390f35b3480156108b057600080fd5b506108b9611982565b005b3480156108c757600080fd5b506108d0611a1b565b6040516108dd91906142fe565b60405180910390f35b3480156108f257600080fd5b506108fb611a45565b6040516109089190614254565b60405180910390f35b34801561091d57600080fd5b50610938600480360381019061093391906144f8565b611a4b565b005b34801561094657600080fd5b5061094f611ae4565b60405161095c91906140a8565b60405180910390f35b34801561097157600080fd5b5061098c600480360381019061098791906144b8565b611b76565b005b34801561099a57600080fd5b506109b560048036038101906109b09190614563565b611c8f565b005b3480156109c357600080fd5b506109de60048036038101906109d99190614128565b611e4a565b6040516109eb9190614183565b60405180910390f35b348015610a0057600080fd5b50610a1b6004803603810190610a169190614128565b611f35565b604051610a289190614183565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a53919061419e565b611f53565b005b348015610a6657600080fd5b50610a816004803603810190610a7c919061419e565b61208f565b604051610a8e9190614183565b60405180910390f35b348015610aa357600080fd5b50610aac6120af565b604051610ab99190614183565b60405180910390f35b348015610ace57600080fd5b50610ad76120c2565b604051610ae49190614254565b60405180910390f35b348015610af957600080fd5b50610b146004803603810190610b0f91906144b8565b6120c8565b005b348015610b2257600080fd5b50610b3d6004803603810190610b38919061426f565b6121ed565b005b348015610b4b57600080fd5b50610b54612282565b604051610b619190614254565b60405180910390f35b348015610b7657600080fd5b50610b7f612288565b604051610b8c9190614254565b60405180910390f35b348015610ba157600080fd5b50610bbc6004803603810190610bb7919061426f565b61228e565b604051610bc99190614183565b60405180910390f35b348015610bde57600080fd5b50610be761231c565b604051610bf49190614254565b60405180910390f35b348015610c0957600080fd5b50610c246004803603810190610c1f91906145a3565b612322565b604051610c319190614254565b60405180910390f35b348015610c4657600080fd5b50610c616004803603810190610c5c919061419e565b6123a9565b005b348015610c6f57600080fd5b50610c7861250c565b604051610c859190614254565b60405180910390f35b348015610c9a57600080fd5b50610ca3612512565b604051610cb09190614254565b60405180910390f35b348015610cc557600080fd5b50610ce06004803603810190610cdb919061426f565b612518565b005b348015610cee57600080fd5b50610d096004803603810190610d04919061419e565b612621565b005b348015610d1757600080fd5b50610d20612719565b604051610d2d9190614254565b60405180910390f35b348015610d4257600080fd5b50610d4b61271f565b604051610d589190614254565b60405180910390f35b610d6961273b565b73ffffffffffffffffffffffffffffffffffffffff16610d87611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd49061462f565b60405180910390fd5b6000600b5414610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e199061469b565b60405180910390fd5b43600b8190555042600c819055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550565b610e7061273b565b73ffffffffffffffffffffffffffffffffffffffff16610e8e611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061462f565b60405180910390fd5b8160128190555080601381905550601354601254610f0291906146ea565b6011819055505050565b606060038054610f1b9061476f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f479061476f565b8015610f945780601f10610f6957610100808354040283529160200191610f94565b820191906000526020600020905b815481529060010190602001808311610f7757829003601f168201915b5050505050905090565b6000610fb2610fab61273b565b8484612743565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b60176020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60155481565b60145481565b61103e61273b565b73ffffffffffffffffffffffffffffffffffffffff1661105c611a1b565b73ffffffffffffffffffffffffffffffffffffffff16146110b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a99061462f565b60405180910390fd5b633b9aca00816110c291906147a1565b60078190555050565b60006110d884848461290e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061112361273b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a9061486d565b60405180910390fd5b6111b7856111af61273b565b858403612743565b60019150509392505050565b61dead81565b60006009905090565b6111da61273b565b73ffffffffffffffffffffffffffffffffffffffff166111f8611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461124e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112459061462f565b60405180910390fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d4906148d9565b60405180910390fd5b601860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561136a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136190614945565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006114676113d261273b565b8484600160006113e061273b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461146291906146ea565b612743565b6001905092915050565b7f000000000000000000000000438acd33595a6d37ebfced7719d9127740b6b20581565b600a60009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61150661273b565b73ffffffffffffffffffffffffffffffffffffffff16611524611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461157a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115719061462f565b60405180910390fd5b81600f8190555080601081905550601054600f5461159891906146ea565b600e819055505050565b6115aa61273b565b73ffffffffffffffffffffffffffffffffffffffff166115c8611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461161e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116159061462f565b60405180910390fd5b818190508484905014611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d906149b1565b60405180910390fd5b60005b848490508110156116ef5760006116a6633b9aca00858585818110611691576116906149d1565b5b9050602002013561366390919063ffffffff16565b90506116da338787858181106116bf576116be6149d1565b5b90506020020160208101906116d4919061419e565b8361290e565b6001826116e791906146ea565b915050611669565b5050505050565b60115481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61175f61273b565b73ffffffffffffffffffffffffffffffffffffffff1661177d611a1b565b73ffffffffffffffffffffffffffffffffffffffff16146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca9061462f565b60405180910390fd5b6117dd6000613679565b565b60006117e961273b565b73ffffffffffffffffffffffffffffffffffffffff16611807611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461185d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118549061462f565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b61188761273b565b73ffffffffffffffffffffffffffffffffffffffff166118a5611a1b565b73ffffffffffffffffffffffffffffffffffffffff16146118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f29061462f565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b61198a61273b565b73ffffffffffffffffffffffffffffffffffffffff166119a8611a1b565b73ffffffffffffffffffffffffffffffffffffffff16146119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f59061462f565b60405180910390fd5b6000600a60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b611a5361273b565b73ffffffffffffffffffffffffffffffffffffffff16611a71611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe9061462f565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b606060048054611af39061476f565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1f9061476f565b8015611b6c5780601f10611b4157610100808354040283529160200191611b6c565b820191906000526020600020905b815481529060010190602001808311611b4f57829003601f168201915b5050505050905090565b611b7e61273b565b73ffffffffffffffffffffffffffffffffffffffff16611b9c611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be99061462f565b60405180910390fd5b7f000000000000000000000000438acd33595a6d37ebfced7719d9127740b6b20573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7890614a72565b60405180910390fd5b611c8b828261373f565b5050565b611c9761273b565b73ffffffffffffffffffffffffffffffffffffffff16611cb5611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d029061462f565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d4591906142fe565b602060405180830381865afa158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d869190614aa7565b1015611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614b20565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611e02929190614b40565b6020604051808303816000875af1158015611e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e459190614b7e565b505050565b60008060016000611e5961273b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0d90614c1d565b60405180910390fd5b611f2a611f2161273b565b85858403612743565b600191505092915050565b6000611f49611f4261273b565b848461290e565b6001905092915050565b611f5b61273b565b73ffffffffffffffffffffffffffffffffffffffff16611f79611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc69061462f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b600b5481565b6120d061273b565b73ffffffffffffffffffffffffffffffffffffffff166120ee611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614612144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213b9061462f565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121e19190614183565b60405180910390a25050565b6121f561273b565b73ffffffffffffffffffffffffffffffffffffffff16612213611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614612269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122609061462f565b60405180910390fd5b633b9aca008161227991906147a1565b60098190555050565b600c5481565b60075481565b600061229861273b565b73ffffffffffffffffffffffffffffffffffffffff166122b6611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461230c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123039061462f565b60405180910390fd5b8160088190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123b161273b565b73ffffffffffffffffffffffffffffffffffffffff166123cf611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c9061462f565b60405180910390fd5b601860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a890614c89565b60405180910390fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60085481565b60105481565b61252061273b565b73ffffffffffffffffffffffffffffffffffffffff1661253e611a1b565b73ffffffffffffffffffffffffffffffffffffffff1614612594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258b9061462f565b60405180910390fd5b804710156125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce90614b20565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561261d573d6000803e3d6000fd5b5050565b61262961273b565b73ffffffffffffffffffffffffffffffffffffffff16612647611a1b565b73ffffffffffffffffffffffffffffffffffffffff161461269d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126949061462f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561270d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270490614d1b565b60405180910390fd5b61271681613679565b50565b60135481565b60095481565b600081836127339190614d6a565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa90614e0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281a90614e9f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129019190614254565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561297e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297590614f31565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e590614fc3565b60405180910390fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a729061502f565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff9061502f565b60405180910390fd5b6000811415612b2257612b1d838360006137e0565b61365e565b600a60009054906101000a900460ff16156131ec57612b3f611a1b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612bad5750612b7d611a1b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612be65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c20575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c395750600560149054906101000a900460ff16155b156131eb57600a60019054906101000a900460ff16612d3357601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cf35750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d299061509b565b60405180910390fd5b5b600d54600c54612d4391906146ea565b42108015612d9d57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612f02577f000000000000000000000000438acd33595a6d37ebfced7719d9127740b6b20573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e53576001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612f01565b7f000000000000000000000000438acd33595a6d37ebfced7719d9127740b6b20573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f00576001601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fa55750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561304c57600754811115612fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe69061512d565b60405180910390fd5b600954612ffb8361170f565b8261300691906146ea565b1115613047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303e90615199565b60405180910390fd5b6131ea565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130ef5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561313e57600754811115613139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131309061522b565b60405180910390fd5b6131e9565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166131e85760095461319b8361170f565b826131a691906146ea565b11156131e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131de90615199565b60405180910390fd5b5b5b5b5b5b60006131f73061170f565b90506000600854821015905080801561321c5750600a60029054906101000a900460ff165b80156132355750600560149054906101000a900460ff16155b801561328b5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132e15750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133375750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561337b576001600560146101000a81548160ff02191690831515021790555061335f613a61565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134315750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561343b57600090505b6000811561364e57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561349e57506000601154115b15613538576134cb60646134bd6011548861366390919063ffffffff16565b61272590919063ffffffff16565b9050601154601354826134de91906147a1565b6134e89190614d6a565b601560008282546134f991906146ea565b925050819055506011546012548261351191906147a1565b61351b9190614d6a565b6014600082825461352c91906146ea565b9250508190555061362a565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561359357506000600e54115b15613629576135c060646135b2600e548861366390919063ffffffff16565b61272590919063ffffffff16565b9050600e54601054826135d391906147a1565b6135dd9190614d6a565b601560008282546135ee91906146ea565b92505081905550600e54600f548261360691906147a1565b6136109190614d6a565b6014600082825461362191906146ea565b925050819055505b5b600081111561363f5761363e8730836137e0565b5b808561364b919061524b565b94505b6136598787876137e0565b505050505b505050565b6000818361367191906147a1565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384790614f31565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b790614fc3565b60405180910390fd5b6138cb838383613c56565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613951576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613948906152f1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139e491906146ea565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a489190614254565b60405180910390a3613a5b848484613c5b565b50505050565b6000613a6c3061170f565b90506000601454601554613a8091906146ea565b9050600080831480613a925750600082145b15613a9f57505050613c54565b600854831115613aaf5760085492505b600060028360155486613ac291906147a1565b613acc9190614d6a565b613ad69190614d6a565b90506000613aed8286613c6090919063ffffffff16565b90506000479050613afd82613c76565b6000613b128247613c6090919063ffffffff16565b90506000613b3d87613b2f6014548561366390919063ffffffff16565b61272590919063ffffffff16565b905060008183613b4d919061524b565b905060006015819055506000601481905550600086118015613b6f5750600081115b15613bbc57613b7e8682613eb3565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051613bb393929190615311565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c0290615379565b60006040518083038185875af1925050503d8060008114613c3f576040519150601f19603f3d011682016040523d82523d6000602084013e613c44565b606091505b5050809750505050505050505050505b565b505050565b505050565b60008183613c6e919061524b565b905092915050565b6000600267ffffffffffffffff811115613c9357613c9261538e565b5b604051908082528060200260200182016040528015613cc15781602001602082028036833780820191505090505b5090503081600081518110613cd957613cd86149d1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613da291906153d2565b81600181518110613db657613db56149d1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e1b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612743565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e7d9594939291906154f8565b600060405180830381600087803b158015613e9757600080fd5b505af1158015613eab573d6000803e3d6000fd5b505050505050565b613ede307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612743565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613f4596959493929190615552565b60606040518083038185885af1158015613f63573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f8891906155b3565b5050505050565b600080fd5b600080fd5b6000819050919050565b613fac81613f99565b8114613fb757600080fd5b50565b600081359050613fc981613fa3565b92915050565b60008060408385031215613fe657613fe5613f8f565b5b6000613ff485828601613fba565b925050602061400585828601613fba565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561404957808201518184015260208101905061402e565b83811115614058576000848401525b50505050565b6000601f19601f8301169050919050565b600061407a8261400f565b614084818561401a565b935061409481856020860161402b565b61409d8161405e565b840191505092915050565b600060208201905081810360008301526140c2818461406f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140f5826140ca565b9050919050565b614105816140ea565b811461411057600080fd5b50565b600081359050614122816140fc565b92915050565b6000806040838503121561413f5761413e613f8f565b5b600061414d85828601614113565b925050602061415e85828601613fba565b9150509250929050565b60008115159050919050565b61417d81614168565b82525050565b60006020820190506141986000830184614174565b92915050565b6000602082840312156141b4576141b3613f8f565b5b60006141c284828501614113565b91505092915050565b6000819050919050565b60006141f06141eb6141e6846140ca565b6141cb565b6140ca565b9050919050565b6000614202826141d5565b9050919050565b6000614214826141f7565b9050919050565b61422481614209565b82525050565b600060208201905061423f600083018461421b565b92915050565b61424e81613f99565b82525050565b60006020820190506142696000830184614245565b92915050565b60006020828403121561428557614284613f8f565b5b600061429384828501613fba565b91505092915050565b6000806000606084860312156142b5576142b4613f8f565b5b60006142c386828701614113565b93505060206142d486828701614113565b92505060406142e586828701613fba565b9150509250925092565b6142f8816140ea565b82525050565b600060208201905061431360008301846142ef565b92915050565b600060ff82169050919050565b61432f81614319565b82525050565b600060208201905061434a6000830184614326565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261437557614374614350565b5b8235905067ffffffffffffffff81111561439257614391614355565b5b6020830191508360208202830111156143ae576143ad61435a565b5b9250929050565b60008083601f8401126143cb576143ca614350565b5b8235905067ffffffffffffffff8111156143e8576143e7614355565b5b6020830191508360208202830111156144045761440361435a565b5b9250929050565b6000806000806040858703121561442557614424613f8f565b5b600085013567ffffffffffffffff81111561444357614442613f94565b5b61444f8782880161435f565b9450945050602085013567ffffffffffffffff81111561447257614471613f94565b5b61447e878288016143b5565b925092505092959194509250565b61449581614168565b81146144a057600080fd5b50565b6000813590506144b28161448c565b92915050565b600080604083850312156144cf576144ce613f8f565b5b60006144dd85828601614113565b92505060206144ee858286016144a3565b9150509250929050565b60006020828403121561450e5761450d613f8f565b5b600061451c848285016144a3565b91505092915050565b6000614530826140ea565b9050919050565b61454081614525565b811461454b57600080fd5b50565b60008135905061455d81614537565b92915050565b6000806040838503121561457a57614579613f8f565b5b60006145888582860161454e565b925050602061459985828601613fba565b9150509250929050565b600080604083850312156145ba576145b9613f8f565b5b60006145c885828601614113565b92505060206145d985828601614113565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061461960208361401a565b9150614624826145e3565b602082019050919050565b600060208201905081810360008301526146488161460c565b9050919050565b7f416c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b600061468560108361401a565b91506146908261464f565b602082019050919050565b600060208201905081810360008301526146b481614678565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146f582613f99565b915061470083613f99565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614735576147346146bb565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061478757607f821691505b6020821081141561479b5761479a614740565b5b50919050565b60006147ac82613f99565b91506147b783613f99565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147f0576147ef6146bb565b5b828202905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061485760288361401a565b9150614862826147fb565b604082019050919050565b600060208201905081810360008301526148868161484a565b9050919050565b7f57652063616e206e6f7420626c61636b6c69737420726f757465720000000000600082015250565b60006148c3601b8361401a565b91506148ce8261488d565b602082019050919050565b600060208201905081810360008301526148f2816148b6565b9050919050565b7f536e6970657220616c7265616479206578697374000000000000000000000000600082015250565b600061492f60148361401a565b915061493a826148f9565b602082019050919050565b6000602082019050818103600083015261495e81614922565b9050919050565b7f41727261792073697a6573206d75737420626520657175616c00000000000000600082015250565b600061499b60198361401a565b91506149a682614965565b602082019050919050565b600060208201905081810360008301526149ca8161498e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614a5c60398361401a565b9150614a6782614a00565b604082019050919050565b60006020820190508181036000830152614a8b81614a4f565b9050919050565b600081519050614aa181613fa3565b92915050565b600060208284031215614abd57614abc613f8f565b5b6000614acb84828501614a92565b91505092915050565b7f496e76616c696420416d6f756e74000000000000000000000000000000000000600082015250565b6000614b0a600e8361401a565b9150614b1582614ad4565b602082019050919050565b60006020820190508181036000830152614b3981614afd565b9050919050565b6000604082019050614b5560008301856142ef565b614b626020830184614245565b9392505050565b600081519050614b788161448c565b92915050565b600060208284031215614b9457614b93613f8f565b5b6000614ba284828501614b69565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614c0760258361401a565b9150614c1282614bab565b604082019050919050565b60006020820190508181036000830152614c3681614bfa565b9050919050565b7f4e6f74206120736e697065720000000000000000000000000000000000000000600082015250565b6000614c73600c8361401a565b9150614c7e82614c3d565b602082019050919050565b60006020820190508181036000830152614ca281614c66565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d0560268361401a565b9150614d1082614ca9565b604082019050919050565b60006020820190508181036000830152614d3481614cf8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d7582613f99565b9150614d8083613f99565b925082614d9057614d8f614d3b565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614df760248361401a565b9150614e0282614d9b565b604082019050919050565b60006020820190508181036000830152614e2681614dea565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e8960228361401a565b9150614e9482614e2d565b604082019050919050565b60006020820190508181036000830152614eb881614e7c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f1b60258361401a565b9150614f2682614ebf565b604082019050919050565b60006020820190508181036000830152614f4a81614f0e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fad60238361401a565b9150614fb882614f51565b604082019050919050565b60006020820190508181036000830152614fdc81614fa0565b9050919050565b7f536e697065722064657465637465640000000000000000000000000000000000600082015250565b6000615019600f8361401a565b915061502482614fe3565b602082019050919050565b600060208201905081810360008301526150488161500c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061508560168361401a565b91506150908261504f565b602082019050919050565b600060208201905081810360008301526150b481615078565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061511760358361401a565b9150615122826150bb565b604082019050919050565b600060208201905081810360008301526151468161510a565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061518360138361401a565b915061518e8261514d565b602082019050919050565b600060208201905081810360008301526151b281615176565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061521560368361401a565b9150615220826151b9565b604082019050919050565b6000602082019050818103600083015261524481615208565b9050919050565b600061525682613f99565b915061526183613f99565b925082821015615274576152736146bb565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006152db60268361401a565b91506152e68261527f565b604082019050919050565b6000602082019050818103600083015261530a816152ce565b9050919050565b60006060820190506153266000830186614245565b6153336020830185614245565b6153406040830184614245565b949350505050565b600081905092915050565b50565b6000615363600083615348565b915061536e82615353565b600082019050919050565b600061538482615356565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506153cc816140fc565b92915050565b6000602082840312156153e8576153e7613f8f565b5b60006153f6848285016153bd565b91505092915050565b6000819050919050565b600061542461541f61541a846153ff565b6141cb565b613f99565b9050919050565b61543481615409565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61546f816140ea565b82525050565b60006154818383615466565b60208301905092915050565b6000602082019050919050565b60006154a58261543a565b6154af8185615445565b93506154ba83615456565b8060005b838110156154eb5781516154d28882615475565b97506154dd8361548d565b9250506001810190506154be565b5085935050505092915050565b600060a08201905061550d6000830188614245565b61551a602083018761542b565b818103604083015261552c818661549a565b905061553b60608301856142ef565b6155486080830184614245565b9695505050505050565b600060c08201905061556760008301896142ef565b6155746020830188614245565b615581604083018761542b565b61558e606083018661542b565b61559b60808301856142ef565b6155a860a0830184614245565b979650505050505050565b6000806000606084860312156155cc576155cb613f8f565b5b60006155da86828701614a92565b93505060206155eb86828701614a92565b92505060406155fc86828701614a92565b915050925092509256fea2646970667358221220be54b3b50fb407f36c6bf1ef6afdb6c02b4680c5b475984418166083b647a2ea64736f6c634300080a0033

Deployed Bytecode Sourcemap

18708:14982:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22454:242;;;;;;;;;;;;;:::i;:::-;;24020:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4759:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6155:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19914:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19844:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18784:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5247:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19662:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19622;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23121:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6357:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18887:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5090:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25364:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6894:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18842:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19133:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25230:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23748:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32825:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19495:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19213:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5418:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1191:103;;;;;;;;;;;;;:::i;:::-;;22748:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23375:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18979:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19410:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22372:74;;;;;;;;;;;;;:::i;:::-;;883:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19535:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23640:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4978:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24488:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33478:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7192:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5569:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24998:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20112:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19173:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19253:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24298:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23252:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19285:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19018:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22939:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19371:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5832:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25665:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19060:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19452:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33287:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1449:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19578:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19100:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22454:242;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22522:1:::1;22508:10;;:15;22500:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;22568:12;22555:10;:25;;;;22613:15;22591:19;:37;;;;22655:4;22639:13;;:20;;;;;;;;;;;;;;;;;;22684:4;22670:11;;:18;;;;;;;;;;;;;;;;;;22454:242::o:0;24020:270::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24164:13:::1;24145:16;:32;;;;24207:13;24188:16;:32;;;;24266:16;;24247;;:35;;;;:::i;:::-;24231:13;:51;;;;24020:270:::0;;:::o;4759:100::-;4813:13;4846:5;4839:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4759:100;:::o;6155:194::-;6263:4;6280:39;6289:12;:10;:12::i;:::-;6303:7;6312:6;6280:8;:39::i;:::-;6337:4;6330:11;;6155:194;;;;:::o;19914:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;19844:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;18784:51::-;;;:::o;5247:108::-;5308:7;5335:12;;5328:19;;5247:108;:::o;19662:33::-;;;;:::o;19622:::-;;;;:::o;23121:123::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23228:7:::1;23218:6;:18;;;;:::i;:::-;23195:20;:41;;;;23121:123:::0;:::o;6357:529::-;6497:4;6514:36;6524:6;6532:9;6543:6;6514:9;:36::i;:::-;6563:24;6590:11;:19;6602:6;6590:19;;;;;;;;;;;;;;;:33;6610:12;:10;:12::i;:::-;6590:33;;;;;;;;;;;;;;;;6563:60;;6676:6;6656:16;:26;;6634:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;6786:57;6795:6;6803:12;:10;:12::i;:::-;6836:6;6817:16;:25;6786:8;:57::i;:::-;6874:4;6867:11;;;6357:529;;;;;:::o;18887:53::-;18933:6;18887:53;:::o;5090:92::-;5148:5;5173:1;5166:8;;5090:92;:::o;25364:293::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25479:15:::1;25459:36;;:8;:36;;;;25437:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;25570:8;:18;25579:8;25570:18;;;;;;;;;;;;;;;;;;;;;;;;;25569:19;25561:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;25645:4;25624:8;:18;25633:8;25624:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;25364:293:::0;:::o;6894:290::-;7007:4;7024:130;7047:12;:10;:12::i;:::-;7074:7;7133:10;7096:11;:25;7108:12;:10;:12::i;:::-;7096:25;;;;;;;;;;;;;;;:34;7122:7;7096:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;7024:8;:130::i;:::-;7172:4;7165:11;;6894:290;;;;:::o;18842:38::-;;;:::o;19133:33::-;;;;;;;;;;;;;:::o;25230:126::-;25296:4;25320:19;:28;25340:7;25320:28;;;;;;;;;;;;;;;;;;;;;;;;;25313:35;;25230:126;;;:::o;23748:264::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23890:13:::1;23872:15;:31;;;;23932:13;23914:15;:31;;;;23989:15;;23971;;:33;;;;:::i;:::-;23956:12;:48;;;;23748:264:::0;;:::o;32825:454::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32997:7:::1;;:14;;32977:9;;:16;;:34;32955:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;33075:9;33099:173;33110:9;;:16;;33106:1;:20;33099:173;;;33143:15;33161:19;33176:3;33161:7;;33169:1;33161:10;;;;;;;:::i;:::-;;;;;;;;:14;;:19;;;;:::i;:::-;33143:37;;33195:44;33205:10;33217:9;;33227:1;33217:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;33231:7;33195:9;:44::i;:::-;33259:1;33254:6;;;;;:::i;:::-;;;33128:144;33099:173;;;32944:335;32825:454:::0;;;;:::o;19495:33::-;;;;:::o;19213:31::-;;;;;;;;;;;;;:::o;5418:143::-;5508:7;5535:9;:18;5545:7;5535:18;;;;;;;;;;;;;;;;5528:25;;5418:143;;;:::o;1191:103::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1256:30:::1;1283:1;1256:18;:30::i;:::-;1191:103::o:0;22748:121::-;22800:4;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22834:5:::1;22817:14;;:22;;;;;;;;;;;;;;;;;;22857:4;22850:11;;22748:121:::0;:::o;23375:169::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23532:4:::1;23490:31;:39;23522:6;23490:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23375:169:::0;;:::o;18979:30::-;;;;;;;;;;;;;:::o;19410:35::-;;;;:::o;22372:74::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22433:5:::1;22417:13;;:21;;;;;;;;;;;;;;;;;;22372:74::o:0;883:87::-;929:7;956:6;;;;;;;;;;;949:13;;883:87;:::o;19535:36::-;;;;:::o;23640:100::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23725:7:::1;23711:11;;:21;;;;;;;;;;;;;;;;;;23640:100:::0;:::o;4978:104::-;5034:13;5067:7;5060:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4978:104;:::o;24488:306::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24634:13:::1;24626:21;;:4;:21;;;;24604:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;24745:41;24774:4;24780:5;24745:28;:41::i;:::-;24488:306:::0;;:::o;33478:209::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33606:7:::1;33571:6;:16;;;33596:4;33571:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;33563:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;33643:6;:15;;;33659:10;33671:7;33643:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33478:209:::0;;:::o;7192:475::-;7310:4;7327:24;7354:11;:25;7366:12;:10;:12::i;:::-;7354:25;;;;;;;;;;;;;;;:34;7380:7;7354:34;;;;;;;;;;;;;;;;7327:61;;7441:15;7421:16;:35;;7399:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;7557:67;7566:12;:10;:12::i;:::-;7580:7;7608:15;7589:16;:34;7557:8;:67::i;:::-;7655:4;7648:11;;;7192:475;;;;:::o;5569:200::-;5680:4;5697:42;5707:12;:10;:12::i;:::-;5721:9;5732:6;5697:9;:42::i;:::-;5757:4;5750:11;;5569:200;;;;:::o;24998:224::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25151:15:::1;;;;;;;;;;;25108:59;;25131:18;25108:59;;;;;;;;;;;;25196:18;25178:15;;:36;;;;;;;;;;;;;;;;;;24998:224:::0;:::o;20112:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;19173:33::-;;;;;;;;;;;;;:::o;19253:25::-;;;;:::o;24298:182::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24414:8:::1;24383:19;:28;24403:7;24383:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24454:7;24438:34;;;24463:8;24438:34;;;;;;:::i;:::-;;;;;;;;24298:182:::0;;:::o;23252:115::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23351:7:::1;23341:6;:18;;;;:::i;:::-;23329:9;:30;;;;23252:115:::0;:::o;19285:34::-;;;;:::o;19018:35::-;;;;:::o;22939:174::-;23036:4;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23074:9:::1;23053:18;:30;;;;23101:4;23094:11;;22939:174:::0;;;:::o;19371:32::-;;;;:::o;5832:176::-;5946:7;5973:11;:18;5985:5;5973:18;;;;;;;;;;;;;;;:27;5992:7;5973:27;;;;;;;;;;;;;;;;5966:34;;5832:176;;;;:::o;25665:166::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25751:8:::1;:18;25760:8;25751:18;;;;;;;;;;;;;;;;;;;;;;;;;25743:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;25818:5;25797:8;:18;25806:8;25797:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;25665:166:::0;:::o;19060:33::-;;;;:::o;19452:34::-;;;;:::o;33287:183::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33388:7:::1;33363:21;:32;;33355:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;33433:10;33425:28;;:37;33454:7;33425:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33287:183:::0;:::o;1449:238::-;1114:12;:10;:12::i;:::-;1103:23;;:7;:5;:7::i;:::-;:23;;;1095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1572:1:::1;1552:22;;:8;:22;;;;1530:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;1651:28;1670:8;1651:18;:28::i;:::-;1449:238:::0;:::o;19578:35::-;;;;:::o;19100:24::-;;;;:::o;12666:98::-;12724:7;12755:1;12751;:5;;;;:::i;:::-;12744:12;;12666:98;;;;:::o;241:::-;294:7;321:10;314:17;;241:98;:::o;9459:380::-;9612:1;9595:19;;:5;:19;;;;9587:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9693:1;9674:21;;:7;:21;;;;9666:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9777:6;9747:11;:18;9759:5;9747:18;;;;;;;;;;;;;;;:27;9766:7;9747:27;;;;;;;;;;;;;;;:36;;;;9815:7;9799:32;;9808:5;9799:32;;;9824:6;9799:32;;;;;;:::i;:::-;;;;;;;;9459:380;;;:::o;25839:4336::-;25987:1;25971:18;;:4;:18;;;;25963:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26064:1;26050:16;;:2;:16;;;;26042:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26126:8;:12;26135:2;26126:12;;;;;;;;;;;;;;;;;;;;;;;;;26125:13;26117:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;26178:8;:14;26187:4;26178:14;;;;;;;;;;;;;;;;;;;;;;;;;26177:15;26169:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;26239:1;26229:6;:11;26225:93;;;26257:28;26273:4;26279:2;26283:1;26257:15;:28::i;:::-;26300:7;;26225:93;26334:14;;;;;;;;;;;26330:2138;;;26395:7;:5;:7::i;:::-;26387:15;;:4;:15;;;;:49;;;;;26429:7;:5;:7::i;:::-;26423:13;;:2;:13;;;;26387:49;:86;;;;;26471:1;26457:16;;:2;:16;;;;26387:86;:128;;;;;26508:6;26494:21;;:2;:21;;;;26387:128;:158;;;;;26537:8;;;;;;;;;;;26536:9;26387:158;26365:2092;;;26585:13;;;;;;;;;;;26580:223;;26657:19;:25;26677:4;26657:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26686:19;:23;26706:2;26686:23;;;;;;;;;;;;;;;;;;;;;;;;;26657:52;26623:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;26580:223;26915:15;;26893:19;;:37;;;;:::i;:::-;26875:15;:55;:112;;;;;26971:15;26955:32;;:4;:32;;;;26875:112;26849:400;;;27042:13;27034:21;;:4;:21;;;27030:200;;;27099:4;27084:8;:12;27093:2;27084:12;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;27030:200;;;27143:13;27137:19;;:2;:19;;;27133:97;;;27202:4;27185:8;:14;27194:4;27185:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27133:97;27030:200;26849:400;27321:25;:31;27347:4;27321:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;27378:31;:35;27410:2;27378:35;;;;;;;;;;;;;;;;;;;;;;;;;27377:36;27321:92;27295:1147;;;27500:20;;27490:6;:30;;27456:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;27708:9;;27691:13;27701:2;27691:9;:13::i;:::-;27682:6;:22;;;;:::i;:::-;:35;;27648:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27295:1147;;;27886:25;:29;27912:2;27886:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;27941:31;:37;27973:4;27941:37;;;;;;;;;;;;;;;;;;;;;;;;;27940:38;27886:92;27860:582;;;28065:20;;28055:6;:30;;28021:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;27860:582;;;28222:31;:35;28254:2;28222:35;;;;;;;;;;;;;;;;;;;;;;;;;28217:225;;28342:9;;28325:13;28335:2;28325:9;:13::i;:::-;28316:6;:22;;;;:::i;:::-;:35;;28282:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28217:225;27860:582;27295:1147;26365:2092;26330:2138;28480:28;28511:24;28529:4;28511:9;:24::i;:::-;28480:55;;28548:12;28587:18;;28563:20;:42;;28548:57;;28636:7;:35;;;;;28660:11;;;;;;;;;;;28636:35;:61;;;;;28689:8;;;;;;;;;;;28688:9;28636:61;:110;;;;;28715:25;:31;28741:4;28715:31;;;;;;;;;;;;;;;;;;;;;;;;;28714:32;28636:110;:153;;;;;28764:19;:25;28784:4;28764:25;;;;;;;;;;;;;;;;;;;;;;;;;28763:26;28636:153;:194;;;;;28807:19;:23;28827:2;28807:23;;;;;;;;;;;;;;;;;;;;;;;;;28806:24;28636:194;28618:326;;;28868:4;28857:8;;:15;;;;;;;;;;;;;;;;;;28889:10;:8;:10::i;:::-;28927:5;28916:8;;:16;;;;;;;;;;;;;;;;;;28618:326;28956:12;28972:8;;;;;;;;;;;28971:9;28956:24;;29082:19;:25;29102:4;29082:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29111:19;:23;29131:2;29111:23;;;;;;;;;;;;;;;;;;;;;;;;;29082:52;29078:100;;;29161:5;29151:15;;29078:100;29190:12;29295:7;29291:831;;;29347:25;:29;29373:2;29347:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;29396:1;29380:13;;:17;29347:50;29343:630;;;29425:34;29455:3;29425:25;29436:13;;29425:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;29418:41;;29528:13;;29508:16;;29501:4;:23;;;;:::i;:::-;29500:41;;;;:::i;:::-;29478:18;;:63;;;;;;;:::i;:::-;;;;;;;;29610:13;;29590:16;;29583:4;:23;;;;:::i;:::-;29582:41;;;;:::i;:::-;29560:18;;:63;;;;;;;:::i;:::-;;;;;;;;29343:630;;;29685:25;:31;29711:4;29685:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29735:1;29720:12;;:16;29685:51;29681:292;;;29764:33;29793:3;29764:24;29775:12;;29764:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;29757:40;;29865:12;;29846:15;;29839:4;:22;;;;:::i;:::-;29838:39;;;;:::i;:::-;29816:18;;:61;;;;;;;:::i;:::-;;;;;;;;29945:12;;29926:15;;29919:4;:22;;;;:::i;:::-;29918:39;;;;:::i;:::-;29896:18;;:61;;;;;;;:::i;:::-;;;;;;;;29681:292;29343:630;30000:1;29993:4;:8;29989:91;;;30022:42;30038:4;30052;30059;30022:15;:42::i;:::-;29989:91;30106:4;30096:14;;;;;:::i;:::-;;;29291:831;30134:33;30150:4;30156:2;30160:6;30134:15;:33::i;:::-;25952:4223;;;;25839:4336;;;;:::o;12560:98::-;12618:7;12649:1;12645;:5;;;;:::i;:::-;12638:12;;12560:98;;;;:::o;1847:191::-;1921:16;1940:6;;;;;;;;;;;1921:25;;1966:8;1957:6;;:17;;;;;;;;;;;;;;;;;;2021:8;1990:40;;2011:8;1990:40;;;;;;;;;;;;1910:128;1847:191;:::o;24802:188::-;24919:5;24885:25;:31;24911:4;24885:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24976:5;24942:40;;24970:4;24942:40;;;;;;;;;;;;24802:188;;:::o;7675:770::-;7833:1;7815:20;;:6;:20;;;;7807:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7917:1;7896:23;;:9;:23;;;;7888:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7972:47;7993:6;8001:9;8012:6;7972:20;:47::i;:::-;8032:21;8056:9;:17;8066:6;8056:17;;;;;;;;;;;;;;;;8032:41;;8123:6;8106:13;:23;;8084:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;8267:6;8251:13;:22;8231:9;:17;8241:6;8231:17;;;;;;;;;;;;;;;:42;;;;8319:6;8295:9;:20;8305:9;8295:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8360:9;8343:35;;8352:6;8343:35;;;8371:6;8343:35;;;;;;:::i;:::-;;;;;;;;8391:46;8411:6;8419:9;8430:6;8391:19;:46::i;:::-;7796:649;7675:770;;;:::o;31305:1512::-;31344:23;31370:24;31388:4;31370:9;:24::i;:::-;31344:50;;31405:25;31454:18;;31433;;:39;;;;:::i;:::-;31405:67;;31483:12;31531:1;31512:15;:20;:46;;;;31557:1;31536:17;:22;31512:46;31508:85;;;31575:7;;;;;31508:85;31627:18;;31609:15;:36;31605:105;;;31680:18;;31662:36;;31605:105;31771:23;31884:1;31851:17;31816:18;;31798:15;:36;;;;:::i;:::-;31797:71;;;;:::i;:::-;:88;;;;:::i;:::-;31771:114;;31896:26;31925:36;31945:15;31925;:19;;:36;;;;:::i;:::-;31896:65;;31974:25;32002:21;31974:49;;32036:36;32053:18;32036:16;:36::i;:::-;32085:18;32106:44;32132:17;32106:21;:25;;:44;;;;:::i;:::-;32085:65;;32163:23;32189:81;32242:17;32189:34;32204:18;;32189:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;32163:107;;32283:23;32322:15;32309:10;:28;;;;:::i;:::-;32283:54;;32371:1;32350:18;:22;;;;32404:1;32383:18;:22;;;;32440:1;32422:15;:19;:42;;;;;32463:1;32445:15;:19;32422:42;32418:278;;;32481:46;32494:15;32511;32481:12;:46::i;:::-;32547:137;32580:18;32617:15;32651:18;;32547:137;;;;;;;;:::i;:::-;;;;;;;;32418:278;32730:15;;;;;;;;;;;32722:29;;32773:21;32722:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32708:101;;;;;31333:1484;;;;;;;;;31305:1512;:::o;9847:125::-;;;;:::o;9980:124::-;;;;:::o;12454:98::-;12512:7;12543:1;12539;:5;;;;:::i;:::-;12532:12;;12454:98;;;;:::o;30183:589::-;30309:21;30347:1;30333:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30309:40;;30378:4;30360;30365:1;30360:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30404:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30394:4;30399:1;30394:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30439:62;30456:4;30471:15;30489:11;30439:8;:62::i;:::-;30540:15;:66;;;30621:11;30647:1;30691:4;30718;30738:15;30540:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30238:534;30183:589;:::o;30780:517::-;30928:62;30945:4;30960:15;30978:11;30928:8;:62::i;:::-;31033:15;:31;;;31072:9;31105:4;31125:11;31151:1;31194;18933:6;31263:15;31033:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30780:517;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:153::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4655:153;;;:::o;4814:185::-;4928:64;4986:5;4928:64;:::i;:::-;4923:3;4916:77;4814:185;;:::o;5005:276::-;5125:4;5163:2;5152:9;5148:18;5140:26;;5176:98;5271:1;5260:9;5256:17;5247:6;5176:98;:::i;:::-;5005:276;;;;:::o;5287:118::-;5374:24;5392:5;5374:24;:::i;:::-;5369:3;5362:37;5287:118;;:::o;5411:222::-;5504:4;5542:2;5531:9;5527:18;5519:26;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5411:222;;;;:::o;5639:329::-;5698:6;5747:2;5735:9;5726:7;5722:23;5718:32;5715:119;;;5753:79;;:::i;:::-;5715:119;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;5639:329;;;;:::o;5974:619::-;6051:6;6059;6067;6116:2;6104:9;6095:7;6091:23;6087:32;6084:119;;;6122:79;;:::i;:::-;6084:119;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6497:2;6523:53;6568:7;6559:6;6548:9;6544:22;6523:53;:::i;:::-;6513:63;;6468:118;5974:619;;;;;:::o;6599:118::-;6686:24;6704:5;6686:24;:::i;:::-;6681:3;6674:37;6599:118;;:::o;6723:222::-;6816:4;6854:2;6843:9;6839:18;6831:26;;6867:71;6935:1;6924:9;6920:17;6911:6;6867:71;:::i;:::-;6723:222;;;;:::o;6951:86::-;6986:7;7026:4;7019:5;7015:16;7004:27;;6951:86;;;:::o;7043:112::-;7126:22;7142:5;7126:22;:::i;:::-;7121:3;7114:35;7043:112;;:::o;7161:214::-;7250:4;7288:2;7277:9;7273:18;7265:26;;7301:67;7365:1;7354:9;7350:17;7341:6;7301:67;:::i;:::-;7161:214;;;;:::o;7381:117::-;7490:1;7487;7480:12;7504:117;7613:1;7610;7603:12;7627:117;7736:1;7733;7726:12;7767:568;7840:8;7850:6;7900:3;7893:4;7885:6;7881:17;7877:27;7867:122;;7908:79;;:::i;:::-;7867:122;8021:6;8008:20;7998:30;;8051:18;8043:6;8040:30;8037:117;;;8073:79;;:::i;:::-;8037:117;8187:4;8179:6;8175:17;8163:29;;8241:3;8233:4;8225:6;8221:17;8211:8;8207:32;8204:41;8201:128;;;8248:79;;:::i;:::-;8201:128;7767:568;;;;;:::o;8358:::-;8431:8;8441:6;8491:3;8484:4;8476:6;8472:17;8468:27;8458:122;;8499:79;;:::i;:::-;8458:122;8612:6;8599:20;8589:30;;8642:18;8634:6;8631:30;8628:117;;;8664:79;;:::i;:::-;8628:117;8778:4;8770:6;8766:17;8754:29;;8832:3;8824:4;8816:6;8812:17;8802:8;8798:32;8795:41;8792:128;;;8839:79;;:::i;:::-;8792:128;8358:568;;;;;:::o;8932:934::-;9054:6;9062;9070;9078;9127:2;9115:9;9106:7;9102:23;9098:32;9095:119;;;9133:79;;:::i;:::-;9095:119;9281:1;9270:9;9266:17;9253:31;9311:18;9303:6;9300:30;9297:117;;;9333:79;;:::i;:::-;9297:117;9446:80;9518:7;9509:6;9498:9;9494:22;9446:80;:::i;:::-;9428:98;;;;9224:312;9603:2;9592:9;9588:18;9575:32;9634:18;9626:6;9623:30;9620:117;;;9656:79;;:::i;:::-;9620:117;9769:80;9841:7;9832:6;9821:9;9817:22;9769:80;:::i;:::-;9751:98;;;;9546:313;8932:934;;;;;;;:::o;9872:116::-;9942:21;9957:5;9942:21;:::i;:::-;9935:5;9932:32;9922:60;;9978:1;9975;9968:12;9922:60;9872:116;:::o;9994:133::-;10037:5;10075:6;10062:20;10053:29;;10091:30;10115:5;10091:30;:::i;:::-;9994:133;;;;:::o;10133:468::-;10198:6;10206;10255:2;10243:9;10234:7;10230:23;10226:32;10223:119;;;10261:79;;:::i;:::-;10223:119;10381:1;10406:53;10451:7;10442:6;10431:9;10427:22;10406:53;:::i;:::-;10396:63;;10352:117;10508:2;10534:50;10576:7;10567:6;10556:9;10552:22;10534:50;:::i;:::-;10524:60;;10479:115;10133:468;;;;;:::o;10607:323::-;10663:6;10712:2;10700:9;10691:7;10687:23;10683:32;10680:119;;;10718:79;;:::i;:::-;10680:119;10838:1;10863:50;10905:7;10896:6;10885:9;10881:22;10863:50;:::i;:::-;10853:60;;10809:114;10607:323;;;;:::o;10936:110::-;10987:7;11016:24;11034:5;11016:24;:::i;:::-;11005:35;;10936:110;;;:::o;11052:150::-;11139:38;11171:5;11139:38;:::i;:::-;11132:5;11129:49;11119:77;;11192:1;11189;11182:12;11119:77;11052:150;:::o;11208:167::-;11268:5;11306:6;11293:20;11284:29;;11322:47;11363:5;11322:47;:::i;:::-;11208:167;;;;:::o;11381:502::-;11463:6;11471;11520:2;11508:9;11499:7;11495:23;11491:32;11488:119;;;11526:79;;:::i;:::-;11488:119;11646:1;11671:67;11730:7;11721:6;11710:9;11706:22;11671:67;:::i;:::-;11661:77;;11617:131;11787:2;11813:53;11858:7;11849:6;11838:9;11834:22;11813:53;:::i;:::-;11803:63;;11758:118;11381:502;;;;;:::o;11889:474::-;11957:6;11965;12014:2;12002:9;11993:7;11989:23;11985:32;11982:119;;;12020:79;;:::i;:::-;11982:119;12140:1;12165:53;12210:7;12201:6;12190:9;12186:22;12165:53;:::i;:::-;12155:63;;12111:117;12267:2;12293:53;12338:7;12329:6;12318:9;12314:22;12293:53;:::i;:::-;12283:63;;12238:118;11889:474;;;;;:::o;12369:182::-;12509:34;12505:1;12497:6;12493:14;12486:58;12369:182;:::o;12557:366::-;12699:3;12720:67;12784:2;12779:3;12720:67;:::i;:::-;12713:74;;12796:93;12885:3;12796:93;:::i;:::-;12914:2;12909:3;12905:12;12898:19;;12557:366;;;:::o;12929:419::-;13095:4;13133:2;13122:9;13118:18;13110:26;;13182:9;13176:4;13172:20;13168:1;13157:9;13153:17;13146:47;13210:131;13336:4;13210:131;:::i;:::-;13202:139;;12929:419;;;:::o;13354:166::-;13494:18;13490:1;13482:6;13478:14;13471:42;13354:166;:::o;13526:366::-;13668:3;13689:67;13753:2;13748:3;13689:67;:::i;:::-;13682:74;;13765:93;13854:3;13765:93;:::i;:::-;13883:2;13878:3;13874:12;13867:19;;13526:366;;;:::o;13898:419::-;14064:4;14102:2;14091:9;14087:18;14079:26;;14151:9;14145:4;14141:20;14137:1;14126:9;14122:17;14115:47;14179:131;14305:4;14179:131;:::i;:::-;14171:139;;13898:419;;;:::o;14323:180::-;14371:77;14368:1;14361:88;14468:4;14465:1;14458:15;14492:4;14489:1;14482:15;14509:305;14549:3;14568:20;14586:1;14568:20;:::i;:::-;14563:25;;14602:20;14620:1;14602:20;:::i;:::-;14597:25;;14756:1;14688:66;14684:74;14681:1;14678:81;14675:107;;;14762:18;;:::i;:::-;14675:107;14806:1;14803;14799:9;14792:16;;14509:305;;;;:::o;14820:180::-;14868:77;14865:1;14858:88;14965:4;14962:1;14955:15;14989:4;14986:1;14979:15;15006:320;15050:6;15087:1;15081:4;15077:12;15067:22;;15134:1;15128:4;15124:12;15155:18;15145:81;;15211:4;15203:6;15199:17;15189:27;;15145:81;15273:2;15265:6;15262:14;15242:18;15239:38;15236:84;;;15292:18;;:::i;:::-;15236:84;15057:269;15006:320;;;:::o;15332:348::-;15372:7;15395:20;15413:1;15395:20;:::i;:::-;15390:25;;15429:20;15447:1;15429:20;:::i;:::-;15424:25;;15617:1;15549:66;15545:74;15542:1;15539:81;15534:1;15527:9;15520:17;15516:105;15513:131;;;15624:18;;:::i;:::-;15513:131;15672:1;15669;15665:9;15654:20;;15332:348;;;;:::o;15686:227::-;15826:34;15822:1;15814:6;15810:14;15803:58;15895:10;15890:2;15882:6;15878:15;15871:35;15686:227;:::o;15919:366::-;16061:3;16082:67;16146:2;16141:3;16082:67;:::i;:::-;16075:74;;16158:93;16247:3;16158:93;:::i;:::-;16276:2;16271:3;16267:12;16260:19;;15919:366;;;:::o;16291:419::-;16457:4;16495:2;16484:9;16480:18;16472:26;;16544:9;16538:4;16534:20;16530:1;16519:9;16515:17;16508:47;16572:131;16698:4;16572:131;:::i;:::-;16564:139;;16291:419;;;:::o;16716:177::-;16856:29;16852:1;16844:6;16840:14;16833:53;16716:177;:::o;16899:366::-;17041:3;17062:67;17126:2;17121:3;17062:67;:::i;:::-;17055:74;;17138:93;17227:3;17138:93;:::i;:::-;17256:2;17251:3;17247:12;17240:19;;16899:366;;;:::o;17271:419::-;17437:4;17475:2;17464:9;17460:18;17452:26;;17524:9;17518:4;17514:20;17510:1;17499:9;17495:17;17488:47;17552:131;17678:4;17552:131;:::i;:::-;17544:139;;17271:419;;;:::o;17696:170::-;17836:22;17832:1;17824:6;17820:14;17813:46;17696:170;:::o;17872:366::-;18014:3;18035:67;18099:2;18094:3;18035:67;:::i;:::-;18028:74;;18111:93;18200:3;18111:93;:::i;:::-;18229:2;18224:3;18220:12;18213:19;;17872:366;;;:::o;18244:419::-;18410:4;18448:2;18437:9;18433:18;18425:26;;18497:9;18491:4;18487:20;18483:1;18472:9;18468:17;18461:47;18525:131;18651:4;18525:131;:::i;:::-;18517:139;;18244:419;;;:::o;18669:175::-;18809:27;18805:1;18797:6;18793:14;18786:51;18669:175;:::o;18850:366::-;18992:3;19013:67;19077:2;19072:3;19013:67;:::i;:::-;19006:74;;19089:93;19178:3;19089:93;:::i;:::-;19207:2;19202:3;19198:12;19191:19;;18850:366;;;:::o;19222:419::-;19388:4;19426:2;19415:9;19411:18;19403:26;;19475:9;19469:4;19465:20;19461:1;19450:9;19446:17;19439:47;19503:131;19629:4;19503:131;:::i;:::-;19495:139;;19222:419;;;:::o;19647:180::-;19695:77;19692:1;19685:88;19792:4;19789:1;19782:15;19816:4;19813:1;19806:15;19833:244;19973:34;19969:1;19961:6;19957:14;19950:58;20042:27;20037:2;20029:6;20025:15;20018:52;19833:244;:::o;20083:366::-;20225:3;20246:67;20310:2;20305:3;20246:67;:::i;:::-;20239:74;;20322:93;20411:3;20322:93;:::i;:::-;20440:2;20435:3;20431:12;20424:19;;20083:366;;;:::o;20455:419::-;20621:4;20659:2;20648:9;20644:18;20636:26;;20708:9;20702:4;20698:20;20694:1;20683:9;20679:17;20672:47;20736:131;20862:4;20736:131;:::i;:::-;20728:139;;20455:419;;;:::o;20880:143::-;20937:5;20968:6;20962:13;20953:22;;20984:33;21011:5;20984:33;:::i;:::-;20880:143;;;;:::o;21029:351::-;21099:6;21148:2;21136:9;21127:7;21123:23;21119:32;21116:119;;;21154:79;;:::i;:::-;21116:119;21274:1;21299:64;21355:7;21346:6;21335:9;21331:22;21299:64;:::i;:::-;21289:74;;21245:128;21029:351;;;;:::o;21386:164::-;21526:16;21522:1;21514:6;21510:14;21503:40;21386:164;:::o;21556:366::-;21698:3;21719:67;21783:2;21778:3;21719:67;:::i;:::-;21712:74;;21795:93;21884:3;21795:93;:::i;:::-;21913:2;21908:3;21904:12;21897:19;;21556:366;;;:::o;21928:419::-;22094:4;22132:2;22121:9;22117:18;22109:26;;22181:9;22175:4;22171:20;22167:1;22156:9;22152:17;22145:47;22209:131;22335:4;22209:131;:::i;:::-;22201:139;;21928:419;;;:::o;22353:332::-;22474:4;22512:2;22501:9;22497:18;22489:26;;22525:71;22593:1;22582:9;22578:17;22569:6;22525:71;:::i;:::-;22606:72;22674:2;22663:9;22659:18;22650:6;22606:72;:::i;:::-;22353:332;;;;;:::o;22691:137::-;22745:5;22776:6;22770:13;22761:22;;22792:30;22816:5;22792:30;:::i;:::-;22691:137;;;;:::o;22834:345::-;22901:6;22950:2;22938:9;22929:7;22925:23;22921:32;22918:119;;;22956:79;;:::i;:::-;22918:119;23076:1;23101:61;23154:7;23145:6;23134:9;23130:22;23101:61;:::i;:::-;23091:71;;23047:125;22834:345;;;;:::o;23185:224::-;23325:34;23321:1;23313:6;23309:14;23302:58;23394:7;23389:2;23381:6;23377:15;23370:32;23185:224;:::o;23415:366::-;23557:3;23578:67;23642:2;23637:3;23578:67;:::i;:::-;23571:74;;23654:93;23743:3;23654:93;:::i;:::-;23772:2;23767:3;23763:12;23756:19;;23415:366;;;:::o;23787:419::-;23953:4;23991:2;23980:9;23976:18;23968:26;;24040:9;24034:4;24030:20;24026:1;24015:9;24011:17;24004:47;24068:131;24194:4;24068:131;:::i;:::-;24060:139;;23787:419;;;:::o;24212:162::-;24352:14;24348:1;24340:6;24336:14;24329:38;24212:162;:::o;24380:366::-;24522:3;24543:67;24607:2;24602:3;24543:67;:::i;:::-;24536:74;;24619:93;24708:3;24619:93;:::i;:::-;24737:2;24732:3;24728:12;24721:19;;24380:366;;;:::o;24752:419::-;24918:4;24956:2;24945:9;24941:18;24933:26;;25005:9;24999:4;24995:20;24991:1;24980:9;24976:17;24969:47;25033:131;25159:4;25033:131;:::i;:::-;25025:139;;24752:419;;;:::o;25177:225::-;25317:34;25313:1;25305:6;25301:14;25294:58;25386:8;25381:2;25373:6;25369:15;25362:33;25177:225;:::o;25408:366::-;25550:3;25571:67;25635:2;25630:3;25571:67;:::i;:::-;25564:74;;25647:93;25736:3;25647:93;:::i;:::-;25765:2;25760:3;25756:12;25749:19;;25408:366;;;:::o;25780:419::-;25946:4;25984:2;25973:9;25969:18;25961:26;;26033:9;26027:4;26023:20;26019:1;26008:9;26004:17;25997:47;26061:131;26187:4;26061:131;:::i;:::-;26053:139;;25780:419;;;:::o;26205:180::-;26253:77;26250:1;26243:88;26350:4;26347:1;26340:15;26374:4;26371:1;26364:15;26391:185;26431:1;26448:20;26466:1;26448:20;:::i;:::-;26443:25;;26482:20;26500:1;26482:20;:::i;:::-;26477:25;;26521:1;26511:35;;26526:18;;:::i;:::-;26511:35;26568:1;26565;26561:9;26556:14;;26391:185;;;;:::o;26582:223::-;26722:34;26718:1;26710:6;26706:14;26699:58;26791:6;26786:2;26778:6;26774:15;26767:31;26582:223;:::o;26811:366::-;26953:3;26974:67;27038:2;27033:3;26974:67;:::i;:::-;26967:74;;27050:93;27139:3;27050:93;:::i;:::-;27168:2;27163:3;27159:12;27152:19;;26811:366;;;:::o;27183:419::-;27349:4;27387:2;27376:9;27372:18;27364:26;;27436:9;27430:4;27426:20;27422:1;27411:9;27407:17;27400:47;27464:131;27590:4;27464:131;:::i;:::-;27456:139;;27183:419;;;:::o;27608:221::-;27748:34;27744:1;27736:6;27732:14;27725:58;27817:4;27812:2;27804:6;27800:15;27793:29;27608:221;:::o;27835:366::-;27977:3;27998:67;28062:2;28057:3;27998:67;:::i;:::-;27991:74;;28074:93;28163:3;28074:93;:::i;:::-;28192:2;28187:3;28183:12;28176:19;;27835:366;;;:::o;28207:419::-;28373:4;28411:2;28400:9;28396:18;28388:26;;28460:9;28454:4;28450:20;28446:1;28435:9;28431:17;28424:47;28488:131;28614:4;28488:131;:::i;:::-;28480:139;;28207:419;;;:::o;28632:224::-;28772:34;28768:1;28760:6;28756:14;28749:58;28841:7;28836:2;28828:6;28824:15;28817:32;28632:224;:::o;28862:366::-;29004:3;29025:67;29089:2;29084:3;29025:67;:::i;:::-;29018:74;;29101:93;29190:3;29101:93;:::i;:::-;29219:2;29214:3;29210:12;29203:19;;28862:366;;;:::o;29234:419::-;29400:4;29438:2;29427:9;29423:18;29415:26;;29487:9;29481:4;29477:20;29473:1;29462:9;29458:17;29451:47;29515:131;29641:4;29515:131;:::i;:::-;29507:139;;29234:419;;;:::o;29659:222::-;29799:34;29795:1;29787:6;29783:14;29776:58;29868:5;29863:2;29855:6;29851:15;29844:30;29659:222;:::o;29887:366::-;30029:3;30050:67;30114:2;30109:3;30050:67;:::i;:::-;30043:74;;30126:93;30215:3;30126:93;:::i;:::-;30244:2;30239:3;30235:12;30228:19;;29887:366;;;:::o;30259:419::-;30425:4;30463:2;30452:9;30448:18;30440:26;;30512:9;30506:4;30502:20;30498:1;30487:9;30483:17;30476:47;30540:131;30666:4;30540:131;:::i;:::-;30532:139;;30259:419;;;:::o;30684:165::-;30824:17;30820:1;30812:6;30808:14;30801:41;30684:165;:::o;30855:366::-;30997:3;31018:67;31082:2;31077:3;31018:67;:::i;:::-;31011:74;;31094:93;31183:3;31094:93;:::i;:::-;31212:2;31207:3;31203:12;31196:19;;30855:366;;;:::o;31227:419::-;31393:4;31431:2;31420:9;31416:18;31408:26;;31480:9;31474:4;31470:20;31466:1;31455:9;31451:17;31444:47;31508:131;31634:4;31508:131;:::i;:::-;31500:139;;31227:419;;;:::o;31652:172::-;31792:24;31788:1;31780:6;31776:14;31769:48;31652:172;:::o;31830:366::-;31972:3;31993:67;32057:2;32052:3;31993:67;:::i;:::-;31986:74;;32069:93;32158:3;32069:93;:::i;:::-;32187:2;32182:3;32178:12;32171:19;;31830:366;;;:::o;32202:419::-;32368:4;32406:2;32395:9;32391:18;32383:26;;32455:9;32449:4;32445:20;32441:1;32430:9;32426:17;32419:47;32483:131;32609:4;32483:131;:::i;:::-;32475:139;;32202:419;;;:::o;32627:240::-;32767:34;32763:1;32755:6;32751:14;32744:58;32836:23;32831:2;32823:6;32819:15;32812:48;32627:240;:::o;32873:366::-;33015:3;33036:67;33100:2;33095:3;33036:67;:::i;:::-;33029:74;;33112:93;33201:3;33112:93;:::i;:::-;33230:2;33225:3;33221:12;33214:19;;32873:366;;;:::o;33245:419::-;33411:4;33449:2;33438:9;33434:18;33426:26;;33498:9;33492:4;33488:20;33484:1;33473:9;33469:17;33462:47;33526:131;33652:4;33526:131;:::i;:::-;33518:139;;33245:419;;;:::o;33670:169::-;33810:21;33806:1;33798:6;33794:14;33787:45;33670:169;:::o;33845:366::-;33987:3;34008:67;34072:2;34067:3;34008:67;:::i;:::-;34001:74;;34084:93;34173:3;34084:93;:::i;:::-;34202:2;34197:3;34193:12;34186:19;;33845:366;;;:::o;34217:419::-;34383:4;34421:2;34410:9;34406:18;34398:26;;34470:9;34464:4;34460:20;34456:1;34445:9;34441:17;34434:47;34498:131;34624:4;34498:131;:::i;:::-;34490:139;;34217:419;;;:::o;34642:241::-;34782:34;34778:1;34770:6;34766:14;34759:58;34851:24;34846:2;34838:6;34834:15;34827:49;34642:241;:::o;34889:366::-;35031:3;35052:67;35116:2;35111:3;35052:67;:::i;:::-;35045:74;;35128:93;35217:3;35128:93;:::i;:::-;35246:2;35241:3;35237:12;35230:19;;34889:366;;;:::o;35261:419::-;35427:4;35465:2;35454:9;35450:18;35442:26;;35514:9;35508:4;35504:20;35500:1;35489:9;35485:17;35478:47;35542:131;35668:4;35542:131;:::i;:::-;35534:139;;35261:419;;;:::o;35686:191::-;35726:4;35746:20;35764:1;35746:20;:::i;:::-;35741:25;;35780:20;35798:1;35780:20;:::i;:::-;35775:25;;35819:1;35816;35813:8;35810:34;;;35824:18;;:::i;:::-;35810:34;35869:1;35866;35862:9;35854:17;;35686:191;;;;:::o;35883:225::-;36023:34;36019:1;36011:6;36007:14;36000:58;36092:8;36087:2;36079:6;36075:15;36068:33;35883:225;:::o;36114:366::-;36256:3;36277:67;36341:2;36336:3;36277:67;:::i;:::-;36270:74;;36353:93;36442:3;36353:93;:::i;:::-;36471:2;36466:3;36462:12;36455:19;;36114:366;;;:::o;36486:419::-;36652:4;36690:2;36679:9;36675:18;36667:26;;36739:9;36733:4;36729:20;36725:1;36714:9;36710:17;36703:47;36767:131;36893:4;36767:131;:::i;:::-;36759:139;;36486:419;;;:::o;36911:442::-;37060:4;37098:2;37087:9;37083:18;37075:26;;37111:71;37179:1;37168:9;37164:17;37155:6;37111:71;:::i;:::-;37192:72;37260:2;37249:9;37245:18;37236:6;37192:72;:::i;:::-;37274;37342:2;37331:9;37327:18;37318:6;37274:72;:::i;:::-;36911:442;;;;;;:::o;37359:147::-;37460:11;37497:3;37482:18;;37359:147;;;;:::o;37512:114::-;;:::o;37632:398::-;37791:3;37812:83;37893:1;37888:3;37812:83;:::i;:::-;37805:90;;37904:93;37993:3;37904:93;:::i;:::-;38022:1;38017:3;38013:11;38006:18;;37632:398;;;:::o;38036:379::-;38220:3;38242:147;38385:3;38242:147;:::i;:::-;38235:154;;38406:3;38399:10;;38036:379;;;:::o;38421:180::-;38469:77;38466:1;38459:88;38566:4;38563:1;38556:15;38590:4;38587:1;38580:15;38607:143;38664:5;38695:6;38689:13;38680:22;;38711:33;38738:5;38711:33;:::i;:::-;38607:143;;;;:::o;38756:351::-;38826:6;38875:2;38863:9;38854:7;38850:23;38846:32;38843:119;;;38881:79;;:::i;:::-;38843:119;39001:1;39026:64;39082:7;39073:6;39062:9;39058:22;39026:64;:::i;:::-;39016:74;;38972:128;38756:351;;;;:::o;39113:85::-;39158:7;39187:5;39176:16;;39113:85;;;:::o;39204:158::-;39262:9;39295:61;39313:42;39322:32;39348:5;39322:32;:::i;:::-;39313:42;:::i;:::-;39295:61;:::i;:::-;39282:74;;39204:158;;;:::o;39368:147::-;39463:45;39502:5;39463:45;:::i;:::-;39458:3;39451:58;39368:147;;:::o;39521:114::-;39588:6;39622:5;39616:12;39606:22;;39521:114;;;:::o;39641:184::-;39740:11;39774:6;39769:3;39762:19;39814:4;39809:3;39805:14;39790:29;;39641:184;;;;:::o;39831:132::-;39898:4;39921:3;39913:11;;39951:4;39946:3;39942:14;39934:22;;39831:132;;;:::o;39969:108::-;40046:24;40064:5;40046:24;:::i;:::-;40041:3;40034:37;39969:108;;:::o;40083:179::-;40152:10;40173:46;40215:3;40207:6;40173:46;:::i;:::-;40251:4;40246:3;40242:14;40228:28;;40083:179;;;;:::o;40268:113::-;40338:4;40370;40365:3;40361:14;40353:22;;40268:113;;;:::o;40417:732::-;40536:3;40565:54;40613:5;40565:54;:::i;:::-;40635:86;40714:6;40709:3;40635:86;:::i;:::-;40628:93;;40745:56;40795:5;40745:56;:::i;:::-;40824:7;40855:1;40840:284;40865:6;40862:1;40859:13;40840:284;;;40941:6;40935:13;40968:63;41027:3;41012:13;40968:63;:::i;:::-;40961:70;;41054:60;41107:6;41054:60;:::i;:::-;41044:70;;40900:224;40887:1;40884;40880:9;40875:14;;40840:284;;;40844:14;41140:3;41133:10;;40541:608;;;40417:732;;;;:::o;41155:831::-;41418:4;41456:3;41445:9;41441:19;41433:27;;41470:71;41538:1;41527:9;41523:17;41514:6;41470:71;:::i;:::-;41551:80;41627:2;41616:9;41612:18;41603:6;41551:80;:::i;:::-;41678:9;41672:4;41668:20;41663:2;41652:9;41648:18;41641:48;41706:108;41809:4;41800:6;41706:108;:::i;:::-;41698:116;;41824:72;41892:2;41881:9;41877:18;41868:6;41824:72;:::i;:::-;41906:73;41974:3;41963:9;41959:19;41950:6;41906:73;:::i;:::-;41155:831;;;;;;;;:::o;41992:807::-;42241:4;42279:3;42268:9;42264:19;42256:27;;42293:71;42361:1;42350:9;42346:17;42337:6;42293:71;:::i;:::-;42374:72;42442:2;42431:9;42427:18;42418:6;42374:72;:::i;:::-;42456:80;42532:2;42521:9;42517:18;42508:6;42456:80;:::i;:::-;42546;42622:2;42611:9;42607:18;42598:6;42546:80;:::i;:::-;42636:73;42704:3;42693:9;42689:19;42680:6;42636:73;:::i;:::-;42719;42787:3;42776:9;42772:19;42763:6;42719:73;:::i;:::-;41992:807;;;;;;;;;:::o;42805:663::-;42893:6;42901;42909;42958:2;42946:9;42937:7;42933:23;42929:32;42926:119;;;42964:79;;:::i;:::-;42926:119;43084:1;43109:64;43165:7;43156:6;43145:9;43141:22;43109:64;:::i;:::-;43099:74;;43055:128;43222:2;43248:64;43304:7;43295:6;43284:9;43280:22;43248:64;:::i;:::-;43238:74;;43193:129;43361:2;43387:64;43443:7;43434:6;43423:9;43419:22;43387:64;:::i;:::-;43377:74;;43332:129;42805:663;;;;;:::o

Swarm Source

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