ETH Price: $3,382.25 (+0.21%)

Token

Bitcoin Dog (Ivan)
 

Overview

Max Total Supply

1,000,000,000 Ivan

Holders

27

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
47,247,041.272391318311554778 Ivan

Value
$0.00
0xea8423634c3df6c3d94fd1f0df49bcd6de2dfc86
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:
Contract

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
https://t.me/btcdogivan
*/

// SPDX-License-Identifier: MIT

/*

*/

pragma solidity ^0.8.17;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);

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

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

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

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

    function transferFrom(
        address from,
        address to,
        uint 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 (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    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 (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    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(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    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 {
    using SafeMath for uint256;

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @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;
    }


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


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


    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }


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


    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        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);

        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 {}
}

library SafeMath {


    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }



    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }


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

        return c;
    }


    function mul(uint256 a, uint256 b) internal pure returns (uint256) {

        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }


    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }


    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }


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

contract Ownable is Context {
    address private _owner;

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


    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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


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


    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }


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

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

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

    function WETH() external pure returns (address);

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

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountETH);

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

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

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

    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    // Seller Map
    mapping(address => uint256) private _holderFirstBuyTimestamp;

    // Blacklist Map
    mapping(address => bool) private _blacklist;
    bool public transferDelayEnabled = true;

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

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

    uint256 public earlySellLiquidityFee;
    uint256 public earlySellMarketingFee;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    // block number of opened trading
    uint256 launchedAt;

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

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

    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 devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20(unicode"Bitcoin Dog", unicode"Ivan") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        marketingWallet = address(0x15c8A22bC16f084af574C1F1E61a82adc8Fb3BcC); // set as marketing wallet
        devWallet = address(0x15c8A22bC16f084af574C1F1E61a82adc8Fb3BcC); // set as dev wallet

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

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

        uint256 _buyMarketingFee = 5;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 30;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 _earlySellLiquidityFee = 0;
        uint256 _earlySellMarketingFee = 0;

        uint256 totalSupply = 1 * 1e9 * 1e18;

        maxTransactionAmount = (totalSupply * 2) / 100; // maxTransactionAmountTxn
        maxWallet = (totalSupply * 2) / 100; // maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swapwallet

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

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

        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;

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

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


        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }

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

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

    function setEarlySellTax(bool onoff) external onlyOwner {
        enableEarlySellTax = onoff;
    }

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

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

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

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

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

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

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee,
        uint256 _earlySellLiquidityFee,
        uint256 _earlySellMarketingFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

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

    function isBlacklisted(address account) public view returns (bool) {
        return _blacklist[account];
    }

    function blacklistAccounts(
        address[] memory accounts,
        bool isBlacklistedAccount
    ) public onlyOwner {
        require(accounts.length > 0, "Accounts list cannot be empty.");
        for (uint256 i = 0; i < accounts.length; i++) {
            _blacklist[accounts[i]] = isBlacklistedAccount;
        }
    }

    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 updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(
            !_blacklist[to] && !_blacklist[from],
            "You have been blacklisted from transfering tokens"
        );
        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."
                    );
                }

                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_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"
                    );
                }
            }
        }

        // anti bot logic
        if (
            block.number <= (launchedAt + 0) &&
            to != uniswapV2Pair &&
            to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
        ) {
            _blacklist[to] = false;
        }

        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 (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

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

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

            amount -= fees;
        }

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

    function removeStuckEth() external onlyOwner {
        require(address(this).balance > 0, "Token: no ETH in the contract");
        payable(msg.sender).transfer(address(this).balance);
    }

    function tokenWithdraw() external onlyOwner {
        uint256 amount = balanceOf(address(this));
        _transfer(address(this), msg.sender, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

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

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

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

        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 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isBlacklistedAccount","type":"bool"}],"name":"blacklistAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","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":"tokenWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600b60036101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600b81526020017f426974636f696e20446f670000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4976616e00000000000000000000000000000000000000000000000000000000815250816003908162000116919062000e21565b50806004908162000128919062000e21565b50505060006200013d6200067460201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90507315c8a22bc16f084af574c1f1e61a82adc8fb3bcc600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507315c8a22bc16f084af574c1f1e61a82adc8fb3bcc600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002b28160016200067c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000332573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000358919062000f72565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e6919062000f72565b6040518363ffffffff1660e01b81526004016200040592919062000fb5565b6020604051808303816000875af115801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000f72565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200049360a05160016200067c60201b60201c565b620004a860a05160016200077960201b60201c565b6000600590506000806000601e905060008060008060006b033b2e3c9fd0803ce800000090506064600282620004df919062001011565b620004eb91906200108b565b600881905550606460028262000502919062001011565b6200050e91906200108b565b600a8190555061271060058262000526919062001011565b6200053291906200108b565b600981905550886011819055508760128190555086601381905550601354601254601154620005629190620010c3565b6200056e9190620010c3565b6010819055508560158190555084601681905550836017819055506017546016546015546200059e9190620010c3565b620005aa9190620010c3565b6014819055508260188190555081601981905550620005e0620005d26200081a60201b60201c565b60016200084460201b60201c565b620005f33060016200084460201b60201c565b6200060861dead60016200084460201b60201c565b6200062a6200061c6200081a60201b60201c565b60016200067c60201b60201c565b6200063d3060016200067c60201b60201c565b6200065261dead60016200067c60201b60201c565b6200066433826200099160201b60201c565b50505050505050505050620012cd565b600033905090565b6200068c6200067460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200071e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000715906200115f565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008546200067460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008dd906200115f565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200098591906200119e565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009fa906200120b565b60405180910390fd5b62000a176000838362000b3f60201b60201c565b62000a338160025462000b4460201b62002b941790919060201c565b60028190555062000a91816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b4460201b62002b941790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b3391906200123e565b60405180910390a35050565b505050565b600080828462000b559190620010c3565b90508381101562000b9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b9490620012ab565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c2957607f821691505b60208210810362000c3f5762000c3e62000be1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ca97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c6a565b62000cb5868362000c6a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d0262000cfc62000cf68462000ccd565b62000cd7565b62000ccd565b9050919050565b6000819050919050565b62000d1e8362000ce1565b62000d3662000d2d8262000d09565b84845462000c77565b825550505050565b600090565b62000d4d62000d3e565b62000d5a81848462000d13565b505050565b5b8181101562000d825762000d7660008262000d43565b60018101905062000d60565b5050565b601f82111562000dd15762000d9b8162000c45565b62000da68462000c5a565b8101602085101562000db6578190505b62000dce62000dc58562000c5a565b83018262000d5f565b50505b505050565b600082821c905092915050565b600062000df66000198460080262000dd6565b1980831691505092915050565b600062000e11838362000de3565b9150826002028217905092915050565b62000e2c8262000ba7565b67ffffffffffffffff81111562000e485762000e4762000bb2565b5b62000e54825462000c10565b62000e6182828562000d86565b600060209050601f83116001811462000e99576000841562000e84578287015190505b62000e90858262000e03565b86555062000f00565b601f19841662000ea98662000c45565b60005b8281101562000ed35784890151825560018201915060208501945060208101905062000eac565b8683101562000ef3578489015162000eef601f89168262000de3565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f3a8262000f0d565b9050919050565b62000f4c8162000f2d565b811462000f5857600080fd5b50565b60008151905062000f6c8162000f41565b92915050565b60006020828403121562000f8b5762000f8a62000f08565b5b600062000f9b8482850162000f5b565b91505092915050565b62000faf8162000f2d565b82525050565b600060408201905062000fcc600083018562000fa4565b62000fdb602083018462000fa4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200101e8262000ccd565b91506200102b8362000ccd565b92508282026200103b8162000ccd565b9150828204841483151762001055576200105462000fe2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010988262000ccd565b9150620010a58362000ccd565b925082620010b857620010b76200105c565b5b828204905092915050565b6000620010d08262000ccd565b9150620010dd8362000ccd565b9250828201905080821115620010f857620010f762000fe2565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001147602083620010fe565b915062001154826200110f565b602082019050919050565b600060208201905081810360008301526200117a8162001138565b9050919050565b60008115159050919050565b620011988162001181565b82525050565b6000602082019050620011b560008301846200118d565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011f3601f83620010fe565b91506200120082620011bb565b602082019050919050565b600060208201905081810360008301526200122681620011e4565b9050919050565b620012388162000ccd565b82525050565b60006020820190506200125560008301846200122d565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001293601b83620010fe565b9150620012a0826200125b565b602082019050919050565b60006020820190508181036000830152620012c68162001284565b9050919050565b60805160a051615d53620013246000396000818161143901528181611c810152818161325b015261367b015260008181610f3101528181613203015281816143dd015281816144be01526144e50152615d536000f3fe6080604052600436106103a65760003560e01c806392136913116101e7578063c02466681161010d578063e2f45605116100a0578063f63743421161006f578063f637434214610da3578063f8b45b0514610dce578063fe575a8714610df9578063ff935af614610e36576103ad565b8063e2f4560514610cf9578063e884f26014610d24578063f11a24d314610d4f578063f2fde38b14610d7a576103ad565b8063d257b34f116100dc578063d257b34f14610c3d578063d85ba06314610c7a578063dd62ed3e14610ca5578063de749dff14610ce2576103ad565b8063c024666814610b95578063c18bc19514610bbe578063c876d0b914610be7578063c8c8ebe414610c12576103ad565b8063a0d82dc511610185578063a9059cbb11610154578063a9059cbb14610ac7578063aacebbe314610b04578063b62496f514610b2d578063bbc0c74214610b6a576103ad565b8063a0d82dc514610a0b578063a265777814610a36578063a457c2d714610a5f578063a4d15b6414610a9c576103ad565b80639a7a23d6116101c15780639a7a23d6146109635780639c3b4fdc1461098c5780639ccf6e21146109b75780639fccce32146109e0576103ad565b806392136913146108e4578063924de9b71461090f57806395d89b4114610938576103ad565b80634a62bb65116102cc578063751039fc1161026a5780638095d564116102395780638095d5641461084e5780638a8c523c146108775780638da5cb5b1461088e5780638ea5220f146108b9576103ad565b8063751039fc146107a45780637571336a146107cf57806375f0a874146107f85780637bce5a0414610823576103ad565b80636a486a8e116102a65780636a486a8e146106fa5780636ddd17131461072557806370a0823114610750578063715018a61461078d576103ad565b80634a62bb65146106675780634fbee19314610692578063541a43cf146106cf576103ad565b80631f3fed8f1161034457806330c74e041161031357806330c74e04146105bd578063313ce567146105d457806339509351146105ff57806349bd5a5e1461063c576103ad565b80631f3fed8f14610501578063203e727e1461052c57806323b872dd146105555780632bf3d42d14610592576103ad565b80631694505e116103805780631694505e1461045757806318160ddd146104825780631816467f146104ad5780631a8145bb146104d6576103ad565b806306fdde03146103b2578063095ea7b3146103dd57806310d5de531461041a576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e5f565b6040516103d4919061466e565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190614738565b610ef1565b6040516104119190614793565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c91906147ae565b610f0f565b60405161044e9190614793565b60405180910390f35b34801561046357600080fd5b5061046c610f2f565b604051610479919061483a565b60405180910390f35b34801561048e57600080fd5b50610497610f53565b6040516104a49190614864565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf91906147ae565b610f5d565b005b3480156104e257600080fd5b506104eb6110b4565b6040516104f89190614864565b60405180910390f35b34801561050d57600080fd5b506105166110ba565b6040516105239190614864565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e919061487f565b6110c0565b005b34801561056157600080fd5b5061057c600480360381019061057791906148ac565b6111ea565b6040516105899190614793565b60405180910390f35b34801561059e57600080fd5b506105a76112c3565b6040516105b49190614864565b60405180910390f35b3480156105c957600080fd5b506105d26112c9565b005b3480156105e057600080fd5b506105e961137b565b6040516105f6919061491b565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190614738565b611384565b6040516106339190614793565b60405180910390f35b34801561064857600080fd5b50610651611437565b60405161065e9190614945565b60405180910390f35b34801561067357600080fd5b5061067c61145b565b6040516106899190614793565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b491906147ae565b61146e565b6040516106c69190614793565b60405180910390f35b3480156106db57600080fd5b506106e46114c4565b6040516106f19190614864565b60405180910390f35b34801561070657600080fd5b5061070f6114ca565b60405161071c9190614864565b60405180910390f35b34801561073157600080fd5b5061073a6114d0565b6040516107479190614793565b60405180910390f35b34801561075c57600080fd5b50610777600480360381019061077291906147ae565b6114e3565b6040516107849190614864565b60405180910390f35b34801561079957600080fd5b506107a261152b565b005b3480156107b057600080fd5b506107b9611683565b6040516107c69190614793565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f1919061498c565b61173e565b005b34801561080457600080fd5b5061080d611830565b60405161081a9190614945565b60405180910390f35b34801561082f57600080fd5b50610838611856565b6040516108459190614864565b60405180910390f35b34801561085a57600080fd5b50610875600480360381019061087091906149cc565b61185c565b005b34801561088357600080fd5b5061088c611976565b005b34801561089a57600080fd5b506108a3611a4c565b6040516108b09190614945565b60405180910390f35b3480156108c557600080fd5b506108ce611a76565b6040516108db9190614945565b60405180910390f35b3480156108f057600080fd5b506108f9611a9c565b6040516109069190614864565b60405180910390f35b34801561091b57600080fd5b5061093660048036038101906109319190614a1f565b611aa2565b005b34801561094457600080fd5b5061094d611b56565b60405161095a919061466e565b60405180910390f35b34801561096f57600080fd5b5061098a6004803603810190610985919061498c565b611be8565b005b34801561099857600080fd5b506109a1611d1b565b6040516109ae9190614864565b60405180910390f35b3480156109c357600080fd5b506109de60048036038101906109d99190614b94565b611d21565b005b3480156109ec57600080fd5b506109f5611e91565b604051610a029190614864565b60405180910390f35b348015610a1757600080fd5b50610a20611e97565b604051610a2d9190614864565b60405180910390f35b348015610a4257600080fd5b50610a5d6004803603810190610a589190614a1f565b611e9d565b005b348015610a6b57600080fd5b50610a866004803603810190610a819190614738565b611f51565b604051610a939190614793565b60405180910390f35b348015610aa857600080fd5b50610ab161201e565b604051610abe9190614793565b60405180910390f35b348015610ad357600080fd5b50610aee6004803603810190610ae99190614738565b612031565b604051610afb9190614793565b60405180910390f35b348015610b1057600080fd5b50610b2b6004803603810190610b2691906147ae565b61204f565b005b348015610b3957600080fd5b50610b546004803603810190610b4f91906147ae565b6121a6565b604051610b619190614793565b60405180910390f35b348015610b7657600080fd5b50610b7f6121c5565b604051610b8c9190614793565b60405180910390f35b348015610ba157600080fd5b50610bbc6004803603810190610bb7919061498c565b6121d8565b005b348015610bca57600080fd5b50610be56004803603810190610be0919061487f565b612318565b005b348015610bf357600080fd5b50610bfc612442565b604051610c099190614793565b60405180910390f35b348015610c1e57600080fd5b50610c27612455565b604051610c349190614864565b60405180910390f35b348015610c4957600080fd5b50610c646004803603810190610c5f919061487f565b61245b565b604051610c719190614793565b60405180910390f35b348015610c8657600080fd5b50610c8f6125cb565b604051610c9c9190614864565b60405180910390f35b348015610cb157600080fd5b50610ccc6004803603810190610cc79190614bf0565b6125d1565b604051610cd99190614864565b60405180910390f35b348015610cee57600080fd5b50610cf7612658565b005b348015610d0557600080fd5b50610d0e61277b565b604051610d1b9190614864565b60405180910390f35b348015610d3057600080fd5b50610d39612781565b604051610d469190614793565b60405180910390f35b348015610d5b57600080fd5b50610d6461283c565b604051610d719190614864565b60405180910390f35b348015610d8657600080fd5b50610da16004803603810190610d9c91906147ae565b612842565b005b348015610daf57600080fd5b50610db8612a08565b604051610dc59190614864565b60405180910390f35b348015610dda57600080fd5b50610de3612a0e565b604051610df09190614864565b60405180910390f35b348015610e0557600080fd5b50610e206004803603810190610e1b91906147ae565b612a14565b604051610e2d9190614793565b60405180910390f35b348015610e4257600080fd5b50610e5d6004803603810190610e589190614c30565b612a6a565b005b606060038054610e6e90614cda565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9a90614cda565b8015610ee75780601f10610ebc57610100808354040283529160200191610ee7565b820191906000526020600020905b815481529060010190602001808311610eca57829003601f168201915b5050505050905090565b6000610f05610efe612bf2565b8484612bfa565b6001905092915050565b601f6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f65612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90614d57565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b601a5481565b6110c8612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e90614d57565b60405180910390fd5b670de0b6b3a76400006103e8600561116d610f53565b6111779190614da6565b6111819190614e17565b61118b9190614e17565b8110156111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490614eba565b60405180910390fd5b670de0b6b3a7640000816111e19190614da6565b60088190555050565b60006111f7848484612dc3565b6112b884611203612bf2565b6112b385604051806060016040528060288152602001615cd160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611269612bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c519092919063ffffffff16565b612bfa565b600190509392505050565b60195481565b6112d1612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790614d57565b60405180910390fd5b600061136b306114e3565b9050611378303383612dc3565b50565b60006012905090565b600061142d611391612bf2565b8461142885600160006113a2612bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b9490919063ffffffff16565b612bfa565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b60145481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611533612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b990614d57565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061168d612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390614d57565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611746612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90614d57565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b611864612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614d57565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461191b9190614eda565b6119259190614eda565b60108190555060326010541115611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196890614f5a565b60405180910390fd5b505050565b61197e612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490614d57565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601d81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611aaa612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3090614d57565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b6590614cda565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9190614cda565b8015611bde5780601f10611bb357610100808354040283529160200191611bde565b820191906000526020600020905b815481529060010190602001808311611bc157829003601f168201915b5050505050905090565b611bf0612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690614d57565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490614fec565b60405180910390fd5b611d178282613cb5565b5050565b60135481565b611d29612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf90614d57565b60405180910390fd5b6000825111611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390615058565b60405180910390fd5b60005b8251811015611e8c5781600e6000858481518110611e2057611e1f615078565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611e84906150a7565b915050611dff565b505050565b601c5481565b60175481565b611ea5612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b90614d57565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000612014611f5e612bf2565b8461200f85604051806060016040528060258152602001615cf96025913960016000611f88612bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c519092919063ffffffff16565b612bfa565b6001905092915050565b600b60039054906101000a900460ff1681565b600061204561203e612bf2565b8484612dc3565b6001905092915050565b612057612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90614d57565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602080528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6121e0612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690614d57565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161230c9190614793565b60405180910390a25050565b612320612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a690614d57565b60405180910390fd5b670de0b6b3a76400006103e8600f6123c5610f53565b6123cf9190614da6565b6123d99190614e17565b6123e39190614e17565b811015612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c90615161565b60405180910390fd5b670de0b6b3a7640000816124399190614da6565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b6000612465612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90614d57565b60405180910390fd5b620186a06001612502610f53565b61250c9190614da6565b6125169190614e17565b821015612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f906151f3565b60405180910390fd5b6103e86005612565610f53565b61256f9190614da6565b6125799190614e17565b8211156125bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b290615285565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612660612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e690614d57565b60405180910390fd5b60004711612732576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612729906152f1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612778573d6000803e3d6000fd5b50565b60095481565b600061278b612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461281a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281190614d57565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b61284a612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d090614d57565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293f90615383565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612a72612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af890614d57565b60405180910390fd5b8460158190555083601681905550826017819055508160188190555080601981905550601754601654601554612b379190614eda565b612b419190614eda565b60148190555060636014541115612b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b84906153ef565b60405180910390fd5b5050505050565b6000808284612ba39190614eda565b905083811015612be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdf9061545b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c60906154ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccf9061557f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612db69190614864565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2990615611565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e98906156a3565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f455750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7b90615735565b60405180910390fd5b60008103612f9d57612f9883836000613d56565b613c4c565b600b60009054906101000a900460ff161561366057612fba611a4c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130285750612ff8611a4c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130615750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561309b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130b45750600560149054906101000a900460ff16155b1561365f57600b60019054906101000a900460ff166131ae57601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061316e5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6131ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a4906157a1565b60405180910390fd5b5b600f60009054906101000a900460ff1615613376576131cb611a4c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561325257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132aa57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133755743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332790615859565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134195750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134c057600854811115613463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345a906158eb565b60405180910390fd5b600a5461346f836114e3565b8261347a9190614eda565b11156134bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b290615957565b60405180910390fd5b61365e565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135635750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135b2576008548111156135ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a4906159e9565b60405180910390fd5b61365d565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661365c57600a5461360f836114e3565b8261361a9190614eda565b111561365b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365290615957565b60405180910390fd5b5b5b5b5b5b6000601d5461366f9190614eda565b43111580156136ca57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156137165750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613774576000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600061377f306114e3565b9050600060095482101590508080156137a45750600b60029054906101000a900460ff165b80156137bd5750600560149054906101000a900460ff16155b80156138135750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138695750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138bf5750601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613903576001600560146101000a81548160ff0219169083151502179055506138e7613fe9565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806139b95750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156139c357600090505b60008115613c3c57602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a2657506000601454115b15613af357613a536064613a456014548861422b90919063ffffffff16565b6142a590919063ffffffff16565b905060145460165482613a669190614da6565b613a709190614e17565b601b6000828254613a819190614eda565b9250508190555060145460175482613a999190614da6565b613aa39190614e17565b601c6000828254613ab49190614eda565b9250508190555060145460155482613acc9190614da6565b613ad69190614e17565b601a6000828254613ae79190614eda565b92505081905550613c18565b602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613b4e57506000601054115b15613c1757613b7b6064613b6d6010548861422b90919063ffffffff16565b6142a590919063ffffffff16565b905060105460125482613b8e9190614da6565b613b989190614e17565b601b6000828254613ba99190614eda565b9250508190555060105460135482613bc19190614da6565b613bcb9190614e17565b601c6000828254613bdc9190614eda565b9250508190555060105460115482613bf49190614da6565b613bfe9190614e17565b601a6000828254613c0f9190614eda565b925050819055505b5b6000811115613c2d57613c2c873083613d56565b5b8085613c399190615a09565b94505b613c47878787613d56565b505050505b505050565b6000838311158290613c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c90919061466e565b60405180910390fd5b5060008385613ca89190615a09565b9050809150509392505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dbc90615611565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e2b906156a3565b60405180910390fd5b613e3f8383836142ef565b613eaa81604051806060016040528060268152602001615cab602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c519092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f3d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b9490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613fdc9190614864565b60405180910390a3505050565b6000613ff4306114e3565b90506000601c54601a54601b5461400b9190614eda565b6140159190614eda565b90506000808314806140275750600082145b1561403457505050614229565b60146009546140439190614da6565b83111561405c5760146009546140599190614da6565b92505b6000600283601b548661406f9190614da6565b6140799190614e17565b6140839190614e17565b9050600061409a82866142f490919063ffffffff16565b905060004790506140aa8261433e565b60006140bf82476142f490919063ffffffff16565b905060006140ea876140dc601c548561422b90919063ffffffff16565b6142a590919063ffffffff16565b90506000601b819055506000601a819055506000601c81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161414a90615a6e565b60006040518083038185875af1925050503d8060008114614187576040519150601f19603f3d011682016040523d82523d6000602084013e61418c565b606091505b505080965050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516141d890615a6e565b60006040518083038185875af1925050503d8060008114614215576040519150601f19603f3d011682016040523d82523d6000602084013e61421a565b606091505b50508096505050505050505050505b565b600080830361423d576000905061429f565b6000828461424b9190614da6565b905082848261425a9190614e17565b1461429a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161429190615af5565b60405180910390fd5b809150505b92915050565b60006142e783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061457b565b905092915050565b505050565b600061433683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c51565b905092915050565b6000600267ffffffffffffffff81111561435b5761435a614a51565b5b6040519080825280602002602001820160405280156143895781602001602082028036833780820191505090505b50905030816000815181106143a1576143a0615078565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061446a9190615b2a565b8160018151811061447e5761447d615078565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506144e3307f000000000000000000000000000000000000000000000000000000000000000084612bfa565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614545959493929190615c50565b600060405180830381600087803b15801561455f57600080fd5b505af1158015614573573d6000803e3d6000fd5b505050505050565b600080831182906145c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145b9919061466e565b60405180910390fd5b50600083856145d19190614e17565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156146185780820151818401526020810190506145fd565b60008484015250505050565b6000601f19601f8301169050919050565b6000614640826145de565b61464a81856145e9565b935061465a8185602086016145fa565b61466381614624565b840191505092915050565b600060208201905081810360008301526146888184614635565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006146cf826146a4565b9050919050565b6146df816146c4565b81146146ea57600080fd5b50565b6000813590506146fc816146d6565b92915050565b6000819050919050565b61471581614702565b811461472057600080fd5b50565b6000813590506147328161470c565b92915050565b6000806040838503121561474f5761474e61469a565b5b600061475d858286016146ed565b925050602061476e85828601614723565b9150509250929050565b60008115159050919050565b61478d81614778565b82525050565b60006020820190506147a86000830184614784565b92915050565b6000602082840312156147c4576147c361469a565b5b60006147d2848285016146ed565b91505092915050565b6000819050919050565b60006148006147fb6147f6846146a4565b6147db565b6146a4565b9050919050565b6000614812826147e5565b9050919050565b600061482482614807565b9050919050565b61483481614819565b82525050565b600060208201905061484f600083018461482b565b92915050565b61485e81614702565b82525050565b60006020820190506148796000830184614855565b92915050565b6000602082840312156148955761489461469a565b5b60006148a384828501614723565b91505092915050565b6000806000606084860312156148c5576148c461469a565b5b60006148d3868287016146ed565b93505060206148e4868287016146ed565b92505060406148f586828701614723565b9150509250925092565b600060ff82169050919050565b614915816148ff565b82525050565b6000602082019050614930600083018461490c565b92915050565b61493f816146c4565b82525050565b600060208201905061495a6000830184614936565b92915050565b61496981614778565b811461497457600080fd5b50565b60008135905061498681614960565b92915050565b600080604083850312156149a3576149a261469a565b5b60006149b1858286016146ed565b92505060206149c285828601614977565b9150509250929050565b6000806000606084860312156149e5576149e461469a565b5b60006149f386828701614723565b9350506020614a0486828701614723565b9250506040614a1586828701614723565b9150509250925092565b600060208284031215614a3557614a3461469a565b5b6000614a4384828501614977565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614a8982614624565b810181811067ffffffffffffffff82111715614aa857614aa7614a51565b5b80604052505050565b6000614abb614690565b9050614ac78282614a80565b919050565b600067ffffffffffffffff821115614ae757614ae6614a51565b5b602082029050602081019050919050565b600080fd5b6000614b10614b0b84614acc565b614ab1565b90508083825260208201905060208402830185811115614b3357614b32614af8565b5b835b81811015614b5c5780614b4888826146ed565b845260208401935050602081019050614b35565b5050509392505050565b600082601f830112614b7b57614b7a614a4c565b5b8135614b8b848260208601614afd565b91505092915050565b60008060408385031215614bab57614baa61469a565b5b600083013567ffffffffffffffff811115614bc957614bc861469f565b5b614bd585828601614b66565b9250506020614be685828601614977565b9150509250929050565b60008060408385031215614c0757614c0661469a565b5b6000614c15858286016146ed565b9250506020614c26858286016146ed565b9150509250929050565b600080600080600060a08688031215614c4c57614c4b61469a565b5b6000614c5a88828901614723565b9550506020614c6b88828901614723565b9450506040614c7c88828901614723565b9350506060614c8d88828901614723565b9250506080614c9e88828901614723565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614cf257607f821691505b602082108103614d0557614d04614cab565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d416020836145e9565b9150614d4c82614d0b565b602082019050919050565b60006020820190508181036000830152614d7081614d34565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614db182614702565b9150614dbc83614702565b9250828202614dca81614702565b91508282048414831517614de157614de0614d77565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e2282614702565b9150614e2d83614702565b925082614e3d57614e3c614de8565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614ea4602f836145e9565b9150614eaf82614e48565b604082019050919050565b60006020820190508181036000830152614ed381614e97565b9050919050565b6000614ee582614702565b9150614ef083614702565b9250828201905080821115614f0857614f07614d77565b5b92915050565b7f4d757374206b656570206665657320617420353025206f72206c657373000000600082015250565b6000614f44601d836145e9565b9150614f4f82614f0e565b602082019050919050565b60006020820190508181036000830152614f7381614f37565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614fd66039836145e9565b9150614fe182614f7a565b604082019050919050565b6000602082019050818103600083015261500581614fc9565b9050919050565b7f4163636f756e7473206c6973742063616e6e6f7420626520656d7074792e0000600082015250565b6000615042601e836145e9565b915061504d8261500c565b602082019050919050565b6000602082019050818103600083015261507181615035565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006150b282614702565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150e4576150e3614d77565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f312e352500000000000000000000000000000000000000000000000000000000602082015250565b600061514b6024836145e9565b9150615156826150ef565b604082019050919050565b6000602082019050818103600083015261517a8161513e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006151dd6035836145e9565b91506151e882615181565b604082019050919050565b6000602082019050818103600083015261520c816151d0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061526f6034836145e9565b915061527a82615213565b604082019050919050565b6000602082019050818103600083015261529e81615262565b9050919050565b7f546f6b656e3a206e6f2045544820696e2074686520636f6e7472616374000000600082015250565b60006152db601d836145e9565b91506152e6826152a5565b602082019050919050565b6000602082019050818103600083015261530a816152ce565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061536d6026836145e9565b915061537882615311565b604082019050919050565b6000602082019050818103600083015261539c81615360565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b60006153d9601d836145e9565b91506153e4826153a3565b602082019050919050565b60006020820190508181036000830152615408816153cc565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615445601b836145e9565b91506154508261540f565b602082019050919050565b6000602082019050818103600083015261547481615438565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154d76024836145e9565b91506154e28261547b565b604082019050919050565b60006020820190508181036000830152615506816154ca565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006155696022836145e9565b91506155748261550d565b604082019050919050565b600060208201905081810360008301526155988161555c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155fb6025836145e9565b91506156068261559f565b604082019050919050565b6000602082019050818103600083015261562a816155ee565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061568d6023836145e9565b915061569882615631565b604082019050919050565b600060208201905081810360008301526156bc81615680565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061571f6031836145e9565b915061572a826156c3565b604082019050919050565b6000602082019050818103600083015261574e81615712565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061578b6016836145e9565b915061579682615755565b602082019050919050565b600060208201905081810360008301526157ba8161577e565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006158436049836145e9565b915061584e826157c1565b606082019050919050565b6000602082019050818103600083015261587281615836565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158d56035836145e9565b91506158e082615879565b604082019050919050565b60006020820190508181036000830152615904816158c8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006159416013836145e9565b915061594c8261590b565b602082019050919050565b6000602082019050818103600083015261597081615934565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159d36036836145e9565b91506159de82615977565b604082019050919050565b60006020820190508181036000830152615a02816159c6565b9050919050565b6000615a1482614702565b9150615a1f83614702565b9250828203905081811115615a3757615a36614d77565b5b92915050565b600081905092915050565b50565b6000615a58600083615a3d565b9150615a6382615a48565b600082019050919050565b6000615a7982615a4b565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615adf6021836145e9565b9150615aea82615a83565b604082019050919050565b60006020820190508181036000830152615b0e81615ad2565b9050919050565b600081519050615b24816146d6565b92915050565b600060208284031215615b4057615b3f61469a565b5b6000615b4e84828501615b15565b91505092915050565b6000819050919050565b6000615b7c615b77615b7284615b57565b6147db565b614702565b9050919050565b615b8c81615b61565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615bc7816146c4565b82525050565b6000615bd98383615bbe565b60208301905092915050565b6000602082019050919050565b6000615bfd82615b92565b615c078185615b9d565b9350615c1283615bae565b8060005b83811015615c43578151615c2a8882615bcd565b9750615c3583615be5565b925050600181019050615c16565b5085935050505092915050565b600060a082019050615c656000830188614855565b615c726020830187615b83565b8181036040830152615c848186615bf2565b9050615c936060830185614936565b615ca06080830184614855565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209450340fa38e0e597f2424b449a23a8e6dd0b5bc13c290f00dc47a5871f5739e64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c806392136913116101e7578063c02466681161010d578063e2f45605116100a0578063f63743421161006f578063f637434214610da3578063f8b45b0514610dce578063fe575a8714610df9578063ff935af614610e36576103ad565b8063e2f4560514610cf9578063e884f26014610d24578063f11a24d314610d4f578063f2fde38b14610d7a576103ad565b8063d257b34f116100dc578063d257b34f14610c3d578063d85ba06314610c7a578063dd62ed3e14610ca5578063de749dff14610ce2576103ad565b8063c024666814610b95578063c18bc19514610bbe578063c876d0b914610be7578063c8c8ebe414610c12576103ad565b8063a0d82dc511610185578063a9059cbb11610154578063a9059cbb14610ac7578063aacebbe314610b04578063b62496f514610b2d578063bbc0c74214610b6a576103ad565b8063a0d82dc514610a0b578063a265777814610a36578063a457c2d714610a5f578063a4d15b6414610a9c576103ad565b80639a7a23d6116101c15780639a7a23d6146109635780639c3b4fdc1461098c5780639ccf6e21146109b75780639fccce32146109e0576103ad565b806392136913146108e4578063924de9b71461090f57806395d89b4114610938576103ad565b80634a62bb65116102cc578063751039fc1161026a5780638095d564116102395780638095d5641461084e5780638a8c523c146108775780638da5cb5b1461088e5780638ea5220f146108b9576103ad565b8063751039fc146107a45780637571336a146107cf57806375f0a874146107f85780637bce5a0414610823576103ad565b80636a486a8e116102a65780636a486a8e146106fa5780636ddd17131461072557806370a0823114610750578063715018a61461078d576103ad565b80634a62bb65146106675780634fbee19314610692578063541a43cf146106cf576103ad565b80631f3fed8f1161034457806330c74e041161031357806330c74e04146105bd578063313ce567146105d457806339509351146105ff57806349bd5a5e1461063c576103ad565b80631f3fed8f14610501578063203e727e1461052c57806323b872dd146105555780632bf3d42d14610592576103ad565b80631694505e116103805780631694505e1461045757806318160ddd146104825780631816467f146104ad5780631a8145bb146104d6576103ad565b806306fdde03146103b2578063095ea7b3146103dd57806310d5de531461041a576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e5f565b6040516103d4919061466e565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190614738565b610ef1565b6040516104119190614793565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c91906147ae565b610f0f565b60405161044e9190614793565b60405180910390f35b34801561046357600080fd5b5061046c610f2f565b604051610479919061483a565b60405180910390f35b34801561048e57600080fd5b50610497610f53565b6040516104a49190614864565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf91906147ae565b610f5d565b005b3480156104e257600080fd5b506104eb6110b4565b6040516104f89190614864565b60405180910390f35b34801561050d57600080fd5b506105166110ba565b6040516105239190614864565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e919061487f565b6110c0565b005b34801561056157600080fd5b5061057c600480360381019061057791906148ac565b6111ea565b6040516105899190614793565b60405180910390f35b34801561059e57600080fd5b506105a76112c3565b6040516105b49190614864565b60405180910390f35b3480156105c957600080fd5b506105d26112c9565b005b3480156105e057600080fd5b506105e961137b565b6040516105f6919061491b565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190614738565b611384565b6040516106339190614793565b60405180910390f35b34801561064857600080fd5b50610651611437565b60405161065e9190614945565b60405180910390f35b34801561067357600080fd5b5061067c61145b565b6040516106899190614793565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b491906147ae565b61146e565b6040516106c69190614793565b60405180910390f35b3480156106db57600080fd5b506106e46114c4565b6040516106f19190614864565b60405180910390f35b34801561070657600080fd5b5061070f6114ca565b60405161071c9190614864565b60405180910390f35b34801561073157600080fd5b5061073a6114d0565b6040516107479190614793565b60405180910390f35b34801561075c57600080fd5b50610777600480360381019061077291906147ae565b6114e3565b6040516107849190614864565b60405180910390f35b34801561079957600080fd5b506107a261152b565b005b3480156107b057600080fd5b506107b9611683565b6040516107c69190614793565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f1919061498c565b61173e565b005b34801561080457600080fd5b5061080d611830565b60405161081a9190614945565b60405180910390f35b34801561082f57600080fd5b50610838611856565b6040516108459190614864565b60405180910390f35b34801561085a57600080fd5b50610875600480360381019061087091906149cc565b61185c565b005b34801561088357600080fd5b5061088c611976565b005b34801561089a57600080fd5b506108a3611a4c565b6040516108b09190614945565b60405180910390f35b3480156108c557600080fd5b506108ce611a76565b6040516108db9190614945565b60405180910390f35b3480156108f057600080fd5b506108f9611a9c565b6040516109069190614864565b60405180910390f35b34801561091b57600080fd5b5061093660048036038101906109319190614a1f565b611aa2565b005b34801561094457600080fd5b5061094d611b56565b60405161095a919061466e565b60405180910390f35b34801561096f57600080fd5b5061098a6004803603810190610985919061498c565b611be8565b005b34801561099857600080fd5b506109a1611d1b565b6040516109ae9190614864565b60405180910390f35b3480156109c357600080fd5b506109de60048036038101906109d99190614b94565b611d21565b005b3480156109ec57600080fd5b506109f5611e91565b604051610a029190614864565b60405180910390f35b348015610a1757600080fd5b50610a20611e97565b604051610a2d9190614864565b60405180910390f35b348015610a4257600080fd5b50610a5d6004803603810190610a589190614a1f565b611e9d565b005b348015610a6b57600080fd5b50610a866004803603810190610a819190614738565b611f51565b604051610a939190614793565b60405180910390f35b348015610aa857600080fd5b50610ab161201e565b604051610abe9190614793565b60405180910390f35b348015610ad357600080fd5b50610aee6004803603810190610ae99190614738565b612031565b604051610afb9190614793565b60405180910390f35b348015610b1057600080fd5b50610b2b6004803603810190610b2691906147ae565b61204f565b005b348015610b3957600080fd5b50610b546004803603810190610b4f91906147ae565b6121a6565b604051610b619190614793565b60405180910390f35b348015610b7657600080fd5b50610b7f6121c5565b604051610b8c9190614793565b60405180910390f35b348015610ba157600080fd5b50610bbc6004803603810190610bb7919061498c565b6121d8565b005b348015610bca57600080fd5b50610be56004803603810190610be0919061487f565b612318565b005b348015610bf357600080fd5b50610bfc612442565b604051610c099190614793565b60405180910390f35b348015610c1e57600080fd5b50610c27612455565b604051610c349190614864565b60405180910390f35b348015610c4957600080fd5b50610c646004803603810190610c5f919061487f565b61245b565b604051610c719190614793565b60405180910390f35b348015610c8657600080fd5b50610c8f6125cb565b604051610c9c9190614864565b60405180910390f35b348015610cb157600080fd5b50610ccc6004803603810190610cc79190614bf0565b6125d1565b604051610cd99190614864565b60405180910390f35b348015610cee57600080fd5b50610cf7612658565b005b348015610d0557600080fd5b50610d0e61277b565b604051610d1b9190614864565b60405180910390f35b348015610d3057600080fd5b50610d39612781565b604051610d469190614793565b60405180910390f35b348015610d5b57600080fd5b50610d6461283c565b604051610d719190614864565b60405180910390f35b348015610d8657600080fd5b50610da16004803603810190610d9c91906147ae565b612842565b005b348015610daf57600080fd5b50610db8612a08565b604051610dc59190614864565b60405180910390f35b348015610dda57600080fd5b50610de3612a0e565b604051610df09190614864565b60405180910390f35b348015610e0557600080fd5b50610e206004803603810190610e1b91906147ae565b612a14565b604051610e2d9190614793565b60405180910390f35b348015610e4257600080fd5b50610e5d6004803603810190610e589190614c30565b612a6a565b005b606060038054610e6e90614cda565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9a90614cda565b8015610ee75780601f10610ebc57610100808354040283529160200191610ee7565b820191906000526020600020905b815481529060010190602001808311610eca57829003601f168201915b5050505050905090565b6000610f05610efe612bf2565b8484612bfa565b6001905092915050565b601f6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f65612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90614d57565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b601a5481565b6110c8612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e90614d57565b60405180910390fd5b670de0b6b3a76400006103e8600561116d610f53565b6111779190614da6565b6111819190614e17565b61118b9190614e17565b8110156111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490614eba565b60405180910390fd5b670de0b6b3a7640000816111e19190614da6565b60088190555050565b60006111f7848484612dc3565b6112b884611203612bf2565b6112b385604051806060016040528060288152602001615cd160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611269612bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c519092919063ffffffff16565b612bfa565b600190509392505050565b60195481565b6112d1612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790614d57565b60405180910390fd5b600061136b306114e3565b9050611378303383612dc3565b50565b60006012905090565b600061142d611391612bf2565b8461142885600160006113a2612bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b9490919063ffffffff16565b612bfa565b6001905092915050565b7f000000000000000000000000c13c03352fb4e8ae16faef93c52eab91dccf2cf081565b600b60009054906101000a900460ff1681565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b60145481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611533612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b990614d57565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061168d612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390614d57565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611746612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90614d57565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b611864612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614d57565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461191b9190614eda565b6119259190614eda565b60108190555060326010541115611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196890614f5a565b60405180910390fd5b505050565b61197e612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490614d57565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601d81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611aaa612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3090614d57565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b6590614cda565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9190614cda565b8015611bde5780601f10611bb357610100808354040283529160200191611bde565b820191906000526020600020905b815481529060010190602001808311611bc157829003601f168201915b5050505050905090565b611bf0612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690614d57565b60405180910390fd5b7f000000000000000000000000c13c03352fb4e8ae16faef93c52eab91dccf2cf073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490614fec565b60405180910390fd5b611d178282613cb5565b5050565b60135481565b611d29612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf90614d57565b60405180910390fd5b6000825111611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390615058565b60405180910390fd5b60005b8251811015611e8c5781600e6000858481518110611e2057611e1f615078565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611e84906150a7565b915050611dff565b505050565b601c5481565b60175481565b611ea5612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b90614d57565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000612014611f5e612bf2565b8461200f85604051806060016040528060258152602001615cf96025913960016000611f88612bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c519092919063ffffffff16565b612bfa565b6001905092915050565b600b60039054906101000a900460ff1681565b600061204561203e612bf2565b8484612dc3565b6001905092915050565b612057612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90614d57565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602080528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6121e0612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690614d57565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161230c9190614793565b60405180910390a25050565b612320612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a690614d57565b60405180910390fd5b670de0b6b3a76400006103e8600f6123c5610f53565b6123cf9190614da6565b6123d99190614e17565b6123e39190614e17565b811015612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c90615161565b60405180910390fd5b670de0b6b3a7640000816124399190614da6565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b6000612465612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90614d57565b60405180910390fd5b620186a06001612502610f53565b61250c9190614da6565b6125169190614e17565b821015612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f906151f3565b60405180910390fd5b6103e86005612565610f53565b61256f9190614da6565b6125799190614e17565b8211156125bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b290615285565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612660612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e690614d57565b60405180910390fd5b60004711612732576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612729906152f1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612778573d6000803e3d6000fd5b50565b60095481565b600061278b612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461281a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281190614d57565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b61284a612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d090614d57565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293f90615383565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612a72612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af890614d57565b60405180910390fd5b8460158190555083601681905550826017819055508160188190555080601981905550601754601654601554612b379190614eda565b612b419190614eda565b60148190555060636014541115612b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b84906153ef565b60405180910390fd5b5050505050565b6000808284612ba39190614eda565b905083811015612be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdf9061545b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c60906154ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccf9061557f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612db69190614864565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2990615611565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e98906156a3565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f455750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7b90615735565b60405180910390fd5b60008103612f9d57612f9883836000613d56565b613c4c565b600b60009054906101000a900460ff161561366057612fba611a4c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130285750612ff8611a4c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130615750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561309b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130b45750600560149054906101000a900460ff16155b1561365f57600b60019054906101000a900460ff166131ae57601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061316e5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6131ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a4906157a1565b60405180910390fd5b5b600f60009054906101000a900460ff1615613376576131cb611a4c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561325257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132aa57507f000000000000000000000000c13c03352fb4e8ae16faef93c52eab91dccf2cf073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133755743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332790615859565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134195750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134c057600854811115613463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345a906158eb565b60405180910390fd5b600a5461346f836114e3565b8261347a9190614eda565b11156134bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b290615957565b60405180910390fd5b61365e565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135635750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135b2576008548111156135ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a4906159e9565b60405180910390fd5b61365d565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661365c57600a5461360f836114e3565b8261361a9190614eda565b111561365b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365290615957565b60405180910390fd5b5b5b5b5b5b6000601d5461366f9190614eda565b43111580156136ca57507f000000000000000000000000c13c03352fb4e8ae16faef93c52eab91dccf2cf073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156137165750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613774576000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600061377f306114e3565b9050600060095482101590508080156137a45750600b60029054906101000a900460ff165b80156137bd5750600560149054906101000a900460ff16155b80156138135750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138695750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138bf5750601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613903576001600560146101000a81548160ff0219169083151502179055506138e7613fe9565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806139b95750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156139c357600090505b60008115613c3c57602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a2657506000601454115b15613af357613a536064613a456014548861422b90919063ffffffff16565b6142a590919063ffffffff16565b905060145460165482613a669190614da6565b613a709190614e17565b601b6000828254613a819190614eda565b9250508190555060145460175482613a999190614da6565b613aa39190614e17565b601c6000828254613ab49190614eda565b9250508190555060145460155482613acc9190614da6565b613ad69190614e17565b601a6000828254613ae79190614eda565b92505081905550613c18565b602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613b4e57506000601054115b15613c1757613b7b6064613b6d6010548861422b90919063ffffffff16565b6142a590919063ffffffff16565b905060105460125482613b8e9190614da6565b613b989190614e17565b601b6000828254613ba99190614eda565b9250508190555060105460135482613bc19190614da6565b613bcb9190614e17565b601c6000828254613bdc9190614eda565b9250508190555060105460115482613bf49190614da6565b613bfe9190614e17565b601a6000828254613c0f9190614eda565b925050819055505b5b6000811115613c2d57613c2c873083613d56565b5b8085613c399190615a09565b94505b613c47878787613d56565b505050505b505050565b6000838311158290613c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c90919061466e565b60405180910390fd5b5060008385613ca89190615a09565b9050809150509392505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dbc90615611565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e2b906156a3565b60405180910390fd5b613e3f8383836142ef565b613eaa81604051806060016040528060268152602001615cab602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c519092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f3d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b9490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613fdc9190614864565b60405180910390a3505050565b6000613ff4306114e3565b90506000601c54601a54601b5461400b9190614eda565b6140159190614eda565b90506000808314806140275750600082145b1561403457505050614229565b60146009546140439190614da6565b83111561405c5760146009546140599190614da6565b92505b6000600283601b548661406f9190614da6565b6140799190614e17565b6140839190614e17565b9050600061409a82866142f490919063ffffffff16565b905060004790506140aa8261433e565b60006140bf82476142f490919063ffffffff16565b905060006140ea876140dc601c548561422b90919063ffffffff16565b6142a590919063ffffffff16565b90506000601b819055506000601a819055506000601c81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161414a90615a6e565b60006040518083038185875af1925050503d8060008114614187576040519150601f19603f3d011682016040523d82523d6000602084013e61418c565b606091505b505080965050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516141d890615a6e565b60006040518083038185875af1925050503d8060008114614215576040519150601f19603f3d011682016040523d82523d6000602084013e61421a565b606091505b50508096505050505050505050505b565b600080830361423d576000905061429f565b6000828461424b9190614da6565b905082848261425a9190614e17565b1461429a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161429190615af5565b60405180910390fd5b809150505b92915050565b60006142e783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061457b565b905092915050565b505050565b600061433683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c51565b905092915050565b6000600267ffffffffffffffff81111561435b5761435a614a51565b5b6040519080825280602002602001820160405280156143895781602001602082028036833780820191505090505b50905030816000815181106143a1576143a0615078565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061446a9190615b2a565b8160018151811061447e5761447d615078565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506144e3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612bfa565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614545959493929190615c50565b600060405180830381600087803b15801561455f57600080fd5b505af1158015614573573d6000803e3d6000fd5b505050505050565b600080831182906145c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145b9919061466e565b60405180910390fd5b50600083856145d19190614e17565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156146185780820151818401526020810190506145fd565b60008484015250505050565b6000601f19601f8301169050919050565b6000614640826145de565b61464a81856145e9565b935061465a8185602086016145fa565b61466381614624565b840191505092915050565b600060208201905081810360008301526146888184614635565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006146cf826146a4565b9050919050565b6146df816146c4565b81146146ea57600080fd5b50565b6000813590506146fc816146d6565b92915050565b6000819050919050565b61471581614702565b811461472057600080fd5b50565b6000813590506147328161470c565b92915050565b6000806040838503121561474f5761474e61469a565b5b600061475d858286016146ed565b925050602061476e85828601614723565b9150509250929050565b60008115159050919050565b61478d81614778565b82525050565b60006020820190506147a86000830184614784565b92915050565b6000602082840312156147c4576147c361469a565b5b60006147d2848285016146ed565b91505092915050565b6000819050919050565b60006148006147fb6147f6846146a4565b6147db565b6146a4565b9050919050565b6000614812826147e5565b9050919050565b600061482482614807565b9050919050565b61483481614819565b82525050565b600060208201905061484f600083018461482b565b92915050565b61485e81614702565b82525050565b60006020820190506148796000830184614855565b92915050565b6000602082840312156148955761489461469a565b5b60006148a384828501614723565b91505092915050565b6000806000606084860312156148c5576148c461469a565b5b60006148d3868287016146ed565b93505060206148e4868287016146ed565b92505060406148f586828701614723565b9150509250925092565b600060ff82169050919050565b614915816148ff565b82525050565b6000602082019050614930600083018461490c565b92915050565b61493f816146c4565b82525050565b600060208201905061495a6000830184614936565b92915050565b61496981614778565b811461497457600080fd5b50565b60008135905061498681614960565b92915050565b600080604083850312156149a3576149a261469a565b5b60006149b1858286016146ed565b92505060206149c285828601614977565b9150509250929050565b6000806000606084860312156149e5576149e461469a565b5b60006149f386828701614723565b9350506020614a0486828701614723565b9250506040614a1586828701614723565b9150509250925092565b600060208284031215614a3557614a3461469a565b5b6000614a4384828501614977565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614a8982614624565b810181811067ffffffffffffffff82111715614aa857614aa7614a51565b5b80604052505050565b6000614abb614690565b9050614ac78282614a80565b919050565b600067ffffffffffffffff821115614ae757614ae6614a51565b5b602082029050602081019050919050565b600080fd5b6000614b10614b0b84614acc565b614ab1565b90508083825260208201905060208402830185811115614b3357614b32614af8565b5b835b81811015614b5c5780614b4888826146ed565b845260208401935050602081019050614b35565b5050509392505050565b600082601f830112614b7b57614b7a614a4c565b5b8135614b8b848260208601614afd565b91505092915050565b60008060408385031215614bab57614baa61469a565b5b600083013567ffffffffffffffff811115614bc957614bc861469f565b5b614bd585828601614b66565b9250506020614be685828601614977565b9150509250929050565b60008060408385031215614c0757614c0661469a565b5b6000614c15858286016146ed565b9250506020614c26858286016146ed565b9150509250929050565b600080600080600060a08688031215614c4c57614c4b61469a565b5b6000614c5a88828901614723565b9550506020614c6b88828901614723565b9450506040614c7c88828901614723565b9350506060614c8d88828901614723565b9250506080614c9e88828901614723565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614cf257607f821691505b602082108103614d0557614d04614cab565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d416020836145e9565b9150614d4c82614d0b565b602082019050919050565b60006020820190508181036000830152614d7081614d34565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614db182614702565b9150614dbc83614702565b9250828202614dca81614702565b91508282048414831517614de157614de0614d77565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e2282614702565b9150614e2d83614702565b925082614e3d57614e3c614de8565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614ea4602f836145e9565b9150614eaf82614e48565b604082019050919050565b60006020820190508181036000830152614ed381614e97565b9050919050565b6000614ee582614702565b9150614ef083614702565b9250828201905080821115614f0857614f07614d77565b5b92915050565b7f4d757374206b656570206665657320617420353025206f72206c657373000000600082015250565b6000614f44601d836145e9565b9150614f4f82614f0e565b602082019050919050565b60006020820190508181036000830152614f7381614f37565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614fd66039836145e9565b9150614fe182614f7a565b604082019050919050565b6000602082019050818103600083015261500581614fc9565b9050919050565b7f4163636f756e7473206c6973742063616e6e6f7420626520656d7074792e0000600082015250565b6000615042601e836145e9565b915061504d8261500c565b602082019050919050565b6000602082019050818103600083015261507181615035565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006150b282614702565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150e4576150e3614d77565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f312e352500000000000000000000000000000000000000000000000000000000602082015250565b600061514b6024836145e9565b9150615156826150ef565b604082019050919050565b6000602082019050818103600083015261517a8161513e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006151dd6035836145e9565b91506151e882615181565b604082019050919050565b6000602082019050818103600083015261520c816151d0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061526f6034836145e9565b915061527a82615213565b604082019050919050565b6000602082019050818103600083015261529e81615262565b9050919050565b7f546f6b656e3a206e6f2045544820696e2074686520636f6e7472616374000000600082015250565b60006152db601d836145e9565b91506152e6826152a5565b602082019050919050565b6000602082019050818103600083015261530a816152ce565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061536d6026836145e9565b915061537882615311565b604082019050919050565b6000602082019050818103600083015261539c81615360565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b60006153d9601d836145e9565b91506153e4826153a3565b602082019050919050565b60006020820190508181036000830152615408816153cc565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615445601b836145e9565b91506154508261540f565b602082019050919050565b6000602082019050818103600083015261547481615438565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154d76024836145e9565b91506154e28261547b565b604082019050919050565b60006020820190508181036000830152615506816154ca565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006155696022836145e9565b91506155748261550d565b604082019050919050565b600060208201905081810360008301526155988161555c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155fb6025836145e9565b91506156068261559f565b604082019050919050565b6000602082019050818103600083015261562a816155ee565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061568d6023836145e9565b915061569882615631565b604082019050919050565b600060208201905081810360008301526156bc81615680565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061571f6031836145e9565b915061572a826156c3565b604082019050919050565b6000602082019050818103600083015261574e81615712565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061578b6016836145e9565b915061579682615755565b602082019050919050565b600060208201905081810360008301526157ba8161577e565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006158436049836145e9565b915061584e826157c1565b606082019050919050565b6000602082019050818103600083015261587281615836565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158d56035836145e9565b91506158e082615879565b604082019050919050565b60006020820190508181036000830152615904816158c8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006159416013836145e9565b915061594c8261590b565b602082019050919050565b6000602082019050818103600083015261597081615934565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159d36036836145e9565b91506159de82615977565b604082019050919050565b60006020820190508181036000830152615a02816159c6565b9050919050565b6000615a1482614702565b9150615a1f83614702565b9250828203905081811115615a3757615a36614d77565b5b92915050565b600081905092915050565b50565b6000615a58600083615a3d565b9150615a6382615a48565b600082019050919050565b6000615a7982615a4b565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615adf6021836145e9565b9150615aea82615a83565b604082019050919050565b60006020820190508181036000830152615b0e81615ad2565b9050919050565b600081519050615b24816146d6565b92915050565b600060208284031215615b4057615b3f61469a565b5b6000615b4e84828501615b15565b91505092915050565b6000819050919050565b6000615b7c615b77615b7284615b57565b6147db565b614702565b9050919050565b615b8c81615b61565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615bc7816146c4565b82525050565b6000615bd98383615bbe565b60208301905092915050565b6000602082019050919050565b6000615bfd82615b92565b615c078185615b9d565b9350615c1283615bae565b8060005b83811015615c43578151615c2a8882615bcd565b9750615c3583615be5565b925050600181019050615c16565b5085935050505092915050565b600060a082019050615c656000830188614855565b615c726020830187615b83565b8181036040830152615c848186615bf2565b9050615c936060830185614936565b615ca06080830184614855565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209450340fa38e0e597f2424b449a23a8e6dd0b5bc13c290f00dc47a5871f5739e64736f6c63430008110033

Deployed Bytecode Sourcemap

23109:16286:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7973:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9813:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24691:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23187:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9093:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32106:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24416:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24376;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28849:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10017:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24333:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37494:159;;;;;;;;;;;;;:::i;:::-;;8935:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10481:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23245:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23507:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32271:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24290:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24145:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23587:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9264:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15432:148;;;;;;;;;;;;;:::i;:::-;;27979:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29401:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23322:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24038;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29686:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27823:148;;;;;;;;;;;;;:::i;:::-;;15214:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23359:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24180:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29578:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8192:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31364:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24112:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31023:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24456:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24256:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28251:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10784:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23625:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9417:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31874:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24763:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23547:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30713:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29134:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23956:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23392:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28360:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24004:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9627:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37293:193;;;;;;;;;;;;;:::i;:::-;;23434:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28108:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24075:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15590:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24218:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23474:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30903:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30097:608;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7973:100;8027:13;8060:5;8053:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7973:100;:::o;9813:194::-;9921:4;9938:39;9947:12;:10;:12::i;:::-;9961:7;9970:6;9938:8;:39::i;:::-;9995:4;9988:11;;9813:194;;;;:::o;24691:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;23187:51::-;;;:::o;9093:108::-;9154:7;9181:12;;9174:19;;9093:108;:::o;32106:157::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32213:9:::1;;;;;;;;;;;32185:38;;32202:9;32185:38;;;;;;;;;;;;32246:9;32234;;:21;;;;;;;;;;;;;;;;;;32106:157:::0;:::o;24416:33::-;;;;:::o;24376:::-;;;;:::o;28849:277::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28986:4:::1;28978;28973:1;28957:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28956:26;;;;:::i;:::-;28955:35;;;;:::i;:::-;28945:6;:45;;28923:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;29109:8;29099:6;:19;;;;:::i;:::-;29076:20;:42;;;;28849:277:::0;:::o;10017:454::-;10157:4;10174:36;10184:6;10192:9;10203:6;10174:9;:36::i;:::-;10221:220;10244:6;10265:12;:10;:12::i;:::-;10292:138;10348:6;10292:138;;;;;;;;;;;;;;;;;:11;:19;10304:6;10292:19;;;;;;;;;;;;;;;:33;10312:12;:10;:12::i;:::-;10292:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;10221:8;:220::i;:::-;10459:4;10452:11;;10017:454;;;;;:::o;24333:36::-;;;;:::o;37494:159::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37549:14:::1;37566:24;37584:4;37566:9;:24::i;:::-;37549:41;;37601:44;37619:4;37626:10;37638:6;37601:9;:44::i;:::-;37538:115;37494:159::o:0;8935:93::-;8993:5;9018:2;9011:9;;8935:93;:::o;10481:293::-;10594:4;10611:133;10634:12;:10;:12::i;:::-;10661:7;10683:50;10722:10;10683:11;:25;10695:12;:10;:12::i;:::-;10683:25;;;;;;;;;;;;;;;:34;10709:7;10683:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;10611:8;:133::i;:::-;10762:4;10755:11;;10481:293;;;;:::o;23245:38::-;;;:::o;23507:33::-;;;;;;;;;;;;;:::o;32271:126::-;32337:4;32361:19;:28;32381:7;32361:28;;;;;;;;;;;;;;;;;;;;;;;;;32354:35;;32271:126;;;:::o;24290:36::-;;;;:::o;24145:28::-;;;;:::o;23587:31::-;;;;;;;;;;;;;:::o;9264:143::-;9354:7;9381:9;:18;9391:7;9381:18;;;;;;;;;;;;;;;;9374:25;;9264:143;;;:::o;15432:148::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15539:1:::1;15502:40;;15523:6;;;;;;;;;;;15502:40;;;;;;;;;;;;15570:1;15553:6;;:19;;;;;;;;;;;;;;;;;;15432:148::o:0;27979:121::-;28031:4;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28065:5:::1;28048:14;;:22;;;;;;;;;;;;;;;;;;28088:4;28081:11;;27979:121:::0;:::o;29401:169::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29558:4:::1;29516:31;:39;29548:6;29516:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;29401:169:::0;;:::o;23322:30::-;;;;;;;;;;;;;:::o;24038:::-;;;;:::o;29686:403::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29854:13:::1;29836:15;:31;;;;29896:13;29878:15;:31;;;;29932:7;29920:9;:19;;;;30001:9;;29983:15;;29965;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;29950:12;:60;;;;30045:2;30029:12;;:18;;30021:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29686:403:::0;;;:::o;27823:148::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27894:4:::1;27878:13;;:20;;;;;;;;;;;;;;;;;;27923:4;27909:11;;:18;;;;;;;;;;;;;;;;;;27951:12;27938:10;:25;;;;27823:148::o:0;15214:79::-;15252:7;15279:6;;;;;;;;;;;15272:13;;15214:79;:::o;23359:24::-;;;;;;;;;;;;;:::o;24180:31::-;;;;:::o;29578:100::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29663:7:::1;29649:11;;:21;;;;;;;;;;;;;;;;;;29578:100:::0;:::o;8192:104::-;8248:13;8281:7;8274:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8192:104;:::o;31364:306::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31510:13:::1;31502:21;;:4;:21;;::::0;31480:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31621:41;31650:4;31656:5;31621:28;:41::i;:::-;31364:306:::0;;:::o;24112:24::-;;;;:::o;31023:333::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31183:1:::1;31165:8;:15;:19;31157:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31235:9;31230:119;31254:8;:15;31250:1;:19;31230:119;;;31317:20;31291:10;:23;31302:8;31311:1;31302:11;;;;;;;;:::i;:::-;;;;;;;;31291:23;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31271:3;;;;;:::i;:::-;;;;31230:119;;;;31023:333:::0;;:::o;24456:27::-;;;;:::o;24256:25::-;;;;:::o;28251:101::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28339:5:::1;28318:18;;:26;;;;;;;;;;;;;;;;;;28251:101:::0;:::o;10784:393::-;10902:4;10919:228;10942:12;:10;:12::i;:::-;10969:7;10991:145;11048:15;10991:145;;;;;;;;;;;;;;;;;:11;:25;11003:12;:10;:12::i;:::-;10991:25;;;;;;;;;;;;;;;:34;11017:7;10991:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;10919:8;:228::i;:::-;11165:4;11158:11;;10784:393;;;;:::o;23625:37::-;;;;;;;;;;;;;:::o;9417:200::-;9528:4;9545:42;9555:12;:10;:12::i;:::-;9569:9;9580:6;9545:9;:42::i;:::-;9605:4;9598:11;;9417:200;;;;:::o;31874:224::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32027:15:::1;;;;;;;;;;;31984:59;;32007:18;31984:59;;;;;;;;;;;;32072:18;32054:15;;:36;;;;;;;;;;;;;;;;;;31874:224:::0;:::o;24763:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;23547:33::-;;;;;;;;;;;;;:::o;30713:182::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30829:8:::1;30798:19;:28;30818:7;30798:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;30869:7;30853:34;;;30878:8;30853:34;;;;;;:::i;:::-;;;;;;;;30713:182:::0;;:::o;29134:259::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29275:4:::1;29267;29261:2;29245:13;:11;:13::i;:::-;:18;;;;:::i;:::-;29244:27;;;;:::i;:::-;29243:36;;;;:::i;:::-;29233:6;:46;;29211:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;29376:8;29366:6;:19;;;;:::i;:::-;29354:9;:31;;;;29134:259:::0;:::o;23956:39::-;;;;;;;;;;;;;:::o;23392:35::-;;;;:::o;28360:481::-;28457:4;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28531:6:::1;28526:1;28510:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28509:28;;;;:::i;:::-;28496:9;:41;;28474:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;28686:4;28681:1;28665:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28664:26;;;;:::i;:::-;28651:9;:39;;28629:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;28802:9;28781:18;:30;;;;28829:4;28822:11;;28360:481:::0;;;:::o;24004:27::-;;;;:::o;9627:176::-;9741:7;9768:11;:18;9780:5;9768:18;;;;;;;;;;;;;;;:27;9787:7;9768:27;;;;;;;;;;;;;;;;9761:34;;9627:176;;;;:::o;37293:193::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37381:1:::1;37357:21;:25;37349:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37435:10;37427:28;;:51;37456:21;37427:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37293:193::o:0;23434:33::-;;;;:::o;28108:135::-;28168:4;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28208:5:::1;28185:20;;:28;;;;;;;;;;;;;;;;;;28231:4;28224:11;;28108:135:::0;:::o;24075:30::-;;;;:::o;15590:281::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15713:1:::1;15693:22;;:8;:22;;::::0;15671:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15826:8;15797:38;;15818:6;;;;;;;;;;;15797:38;;;;;;;;;;;;15855:8;15846:6;;:17;;;;;;;;;;;;;;;;;;15590:281:::0;:::o;24218:31::-;;;;:::o;23474:24::-;;;;:::o;30903:112::-;30964:4;30988:10;:19;30999:7;30988:19;;;;;;;;;;;;;;;;;;;;;;;;;30981:26;;30903:112;;;:::o;30097:608::-;15353:12;:10;:12::i;:::-;15343:22;;:6;;;;;;;;;;;:22;;;15335:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30349:13:::1;30330:16;:32;;;;30392:13;30373:16;:32;;;;30429:7;30416:10;:20;;;;30471:22;30447:21;:46;;;;30528:22;30504:21;:46;;;;30615:10;;30596:16;;30577;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;30561:13;:64;;;;30661:2;30644:13;;:19;;30636:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30097:608:::0;;;;;:::o;13220:181::-;13278:7;13298:9;13314:1;13310;:5;;;;:::i;:::-;13298:17;;13339:1;13334;:6;;13326:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;13392:1;13385:8;;;13220:181;;;;:::o;144:98::-;197:7;224:10;217:17;;144:98;:::o;12668:380::-;12821:1;12804:19;;:5;:19;;;12796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12902:1;12883:21;;:7;:21;;;12875:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12986:6;12956:11;:18;12968:5;12956:18;;;;;;;;;;;;;;;:27;12975:7;12956:27;;;;;;;;;;;;;;;:36;;;;13024:7;13008:32;;13017:5;13008:32;;;13033:6;13008:32;;;;;;:::i;:::-;;;;;;;;12668:380;;;:::o;32455:4830::-;32603:1;32587:18;;:4;:18;;;32579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32680:1;32666:16;;:2;:16;;;32658:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32756:10;:14;32767:2;32756:14;;;;;;;;;;;;;;;;;;;;;;;;;32755:15;:36;;;;;32775:10;:16;32786:4;32775:16;;;;;;;;;;;;;;;;;;;;;;;;;32774:17;32755:36;32733:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;32893:1;32883:6;:11;32879:93;;32911:28;32927:4;32933:2;32937:1;32911:15;:28::i;:::-;32954:7;;32879:93;32988:14;;;;;;;;;;;32984:2355;;;33049:7;:5;:7::i;:::-;33041:15;;:4;:15;;;;:49;;;;;33083:7;:5;:7::i;:::-;33077:13;;:2;:13;;;;33041:49;:86;;;;;33125:1;33111:16;;:2;:16;;;;33041:86;:128;;;;;33162:6;33148:21;;:2;:21;;;;33041:128;:158;;;;;33191:8;;;;;;;;;;;33190:9;33041:158;33019:2309;;;33239:13;;;;;;;;;;;33234:223;;33311:19;:25;33331:4;33311:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33340:19;:23;33360:2;33340:23;;;;;;;;;;;;;;;;;;;;;;;;;33311:52;33277:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;33234:223;33481:20;;;;;;;;;;;33477:641;;;33562:7;:5;:7::i;:::-;33556:13;;:2;:13;;;;:72;;;;;33612:15;33598:30;;:2;:30;;;;33556:72;:129;;;;;33671:13;33657:28;;:2;:28;;;;33556:129;33526:573;;;33849:12;33774:28;:39;33803:9;33774:39;;;;;;;;;;;;;;;;:87;33736:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;34063:12;34021:28;:39;34050:9;34021:39;;;;;;;;;;;;;;;:54;;;;33526:573;33477:641;34192:25;:31;34218:4;34192:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;34249:31;:35;34281:2;34249:35;;;;;;;;;;;;;;;;;;;;;;;;;34248:36;34192:92;34166:1147;;;34371:20;;34361:6;:30;;34327:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;34579:9;;34562:13;34572:2;34562:9;:13::i;:::-;34553:6;:22;;;;:::i;:::-;:35;;34519:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34166:1147;;;34757:25;:29;34783:2;34757:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;34812:31;:37;34844:4;34812:37;;;;;;;;;;;;;;;;;;;;;;;;;34811:38;34757:92;34731:582;;;34936:20;;34926:6;:30;;34892:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;34731:582;;;35093:31;:35;35125:2;35093:35;;;;;;;;;;;;;;;;;;;;;;;;;35088:225;;35213:9;;35196:13;35206:2;35196:9;:13::i;:::-;35187:6;:22;;;;:::i;:::-;:35;;35153:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;35088:225;34731:582;34166:1147;33019:2309;32984:2355;35426:1;35413:10;;:14;;;;:::i;:::-;35396:12;:32;;:68;;;;;35451:13;35445:19;;:2;:19;;;;35396:68;:142;;;;;35495:42;35481:57;;:2;:57;;;;35396:142;35378:221;;;35582:5;35565:10;:14;35576:2;35565:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;35378:221;35611:28;35642:24;35660:4;35642:9;:24::i;:::-;35611:55;;35679:12;35718:18;;35694:20;:42;;35679:57;;35767:7;:35;;;;;35791:11;;;;;;;;;;;35767:35;:61;;;;;35820:8;;;;;;;;;;;35819:9;35767:61;:110;;;;;35846:25;:31;35872:4;35846:31;;;;;;;;;;;;;;;;;;;;;;;;;35845:32;35767:110;:153;;;;;35895:19;:25;35915:4;35895:25;;;;;;;;;;;;;;;;;;;;;;;;;35894:26;35767:153;:194;;;;;35938:19;:23;35958:2;35938:23;;;;;;;;;;;;;;;;;;;;;;;;;35937:24;35767:194;35749:326;;;35999:4;35988:8;;:15;;;;;;;;;;;;;;;;;;36020:10;:8;:10::i;:::-;36058:5;36047:8;;:16;;;;;;;;;;;;;;;;;;35749:326;36087:12;36103:8;;;;;;;;;;;36102:9;36087:24;;36128:19;:25;36148:4;36128:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36157:19;:23;36177:2;36157:23;;;;;;;;;;;;;;;;;;;;;;;;;36128:52;36124:100;;;36207:5;36197:15;;36124:100;36236:12;36267:7;36263:969;;;36319:25;:29;36345:2;36319:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;36368:1;36352:13;;:17;36319:50;36315:768;;;36397:34;36427:3;36397:25;36408:13;;36397:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;36390:41;;36500:13;;36480:16;;36473:4;:23;;;;:::i;:::-;36472:41;;;;:::i;:::-;36450:18;;:63;;;;;;;:::i;:::-;;;;;;;;36570:13;;36556:10;;36549:4;:17;;;;:::i;:::-;36548:35;;;;:::i;:::-;36532:12;;:51;;;;;;;:::i;:::-;;;;;;;;36652:13;;36632:16;;36625:4;:23;;;;:::i;:::-;36624:41;;;;:::i;:::-;36602:18;;:63;;;;;;;:::i;:::-;;;;;;;;36315:768;;;36727:25;:31;36753:4;36727:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;36777:1;36762:12;;:16;36727:51;36723:360;;;36806:33;36835:3;36806:24;36817:12;;36806:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;36799:40;;36907:12;;36888:15;;36881:4;:22;;;;:::i;:::-;36880:39;;;;:::i;:::-;36858:18;;:61;;;;;;;:::i;:::-;;;;;;;;36975:12;;36962:9;;36955:4;:16;;;;:::i;:::-;36954:33;;;;:::i;:::-;36938:12;;:49;;;;;;;:::i;:::-;;;;;;;;37055:12;;37036:15;;37029:4;:22;;;;:::i;:::-;37028:39;;;;:::i;:::-;37006:18;;:61;;;;;;;:::i;:::-;;;;;;;;36723:360;36315:768;37110:1;37103:4;:8;37099:91;;;37132:42;37148:4;37162;37169;37132:15;:42::i;:::-;37099:91;37216:4;37206:14;;;;;:::i;:::-;;;36263:969;37244:33;37260:4;37266:2;37270:6;37244:15;:33::i;:::-;32568:4717;;;;32455:4830;;;;:::o;13559:226::-;13679:7;13712:1;13707;:6;;13715:12;13699:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;13739:9;13755:1;13751;:5;;;;:::i;:::-;13739:17;;13776:1;13769:8;;;13559:226;;;;;:::o;31678:188::-;31795:5;31761:25;:31;31787:4;31761:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31852:5;31818:40;;31846:4;31818:40;;;;;;;;;;;;31678:188;;:::o;11189:610::-;11347:1;11329:20;;:6;:20;;;11321:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11431:1;11410:23;;:9;:23;;;11402:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11486:47;11507:6;11515:9;11526:6;11486:20;:47::i;:::-;11566:108;11602:6;11566:108;;;;;;;;;;;;;;;;;:9;:17;11576:6;11566:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;11546:9;:17;11556:6;11546:17;;;;;;;;;;;;;;;:128;;;;11708:32;11733:6;11708:9;:20;11718:9;11708:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;11685:9;:20;11695:9;11685:20;;;;;;;;;;;;;;;:55;;;;11773:9;11756:35;;11765:6;11756:35;;;11784:6;11756:35;;;;;;:::i;:::-;;;;;;;;11189:610;;;:::o;38172:1220::-;38211:23;38237:24;38255:4;38237:9;:24::i;:::-;38211:50;;38272:25;38368:12;;38334:18;;38300;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;38272:108;;38391:12;38439:1;38420:15;:20;:46;;;;38465:1;38444:17;:22;38420:46;38416:85;;;38483:7;;;;;38416:85;38556:2;38535:18;;:23;;;;:::i;:::-;38517:15;:41;38513:115;;;38614:2;38593:18;;:23;;;;:::i;:::-;38575:41;;38513:115;38640:23;38753:1;38720:17;38685:18;;38667:15;:36;;;;:::i;:::-;38666:71;;;;:::i;:::-;:88;;;;:::i;:::-;38640:114;;38765:26;38794:36;38814:15;38794;:19;;:36;;;;:::i;:::-;38765:65;;38843:25;38871:21;38843:49;;38905:36;38922:18;38905:16;:36::i;:::-;38954:18;38975:44;39001:17;38975:21;:25;;:44;;;;:::i;:::-;38954:65;;39032:17;39052:51;39085:17;39052:28;39067:12;;39052:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;39032:71;;39137:1;39116:18;:22;;;;39170:1;39149:18;:22;;;;39197:1;39182:12;:16;;;;39233:9;;;;;;;;;;;39225:23;;39256:9;39225:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39211:59;;;;;39305:15;;;;;;;;;;;39297:29;;39348:21;39297:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39283:101;;;;;38200:1192;;;;;;;;38172:1220;:::o;13795:252::-;13853:7;13884:1;13879;:6;13875:47;;13909:1;13902:8;;;;13875:47;13934:9;13950:1;13946;:5;;;;:::i;:::-;13934:17;;13979:1;13974;13970;:5;;;;:::i;:::-;:10;13962:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;14038:1;14031:8;;;13795:252;;;;;:::o;14057:132::-;14115:7;14142:39;14146:1;14149;14142:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;14135:46;;14057:132;;;;:::o;13060:125::-;;;;:::o;13413:136::-;13471:7;13498:43;13502:1;13505;13498:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;13491:50;;13413:136;;;;:::o;37661:503::-;37727:21;37765:1;37751:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37727:40;;37796:4;37778;37783:1;37778:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37822:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37812:4;37817:1;37812:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;37857:62;37874:4;37889:15;37907:11;37857:8;:62::i;:::-;37932:15;:66;;;38013:11;38039:1;38083:4;38110;38130:15;37932:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37716:448;37661:503;:::o;14199:312::-;14319:7;14351:1;14347;:5;14354:12;14339:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;14378:9;14394:1;14390;:5;;;;:::i;:::-;14378:17;;14502:1;14495:8;;;14199:312;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:86::-;6106:7;6146:4;6139:5;6135:16;6124:27;;6071:86;;;:::o;6163:112::-;6246:22;6262:5;6246:22;:::i;:::-;6241:3;6234:35;6163:112;;:::o;6281:214::-;6370:4;6408:2;6397:9;6393:18;6385:26;;6421:67;6485:1;6474:9;6470:17;6461:6;6421:67;:::i;:::-;6281:214;;;;:::o;6501:118::-;6588:24;6606:5;6588:24;:::i;:::-;6583:3;6576:37;6501:118;;:::o;6625:222::-;6718:4;6756:2;6745:9;6741:18;6733:26;;6769:71;6837:1;6826:9;6822:17;6813:6;6769:71;:::i;:::-;6625:222;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:117::-;8651:1;8648;8641:12;8665:180;8713:77;8710:1;8703:88;8810:4;8807:1;8800:15;8834:4;8831:1;8824:15;8851:281;8934:27;8956:4;8934:27;:::i;:::-;8926:6;8922:40;9064:6;9052:10;9049:22;9028:18;9016:10;9013:34;9010:62;9007:88;;;9075:18;;:::i;:::-;9007:88;9115:10;9111:2;9104:22;8894:238;8851:281;;:::o;9138:129::-;9172:6;9199:20;;:::i;:::-;9189:30;;9228:33;9256:4;9248:6;9228:33;:::i;:::-;9138:129;;;:::o;9273:311::-;9350:4;9440:18;9432:6;9429:30;9426:56;;;9462:18;;:::i;:::-;9426:56;9512:4;9504:6;9500:17;9492:25;;9572:4;9566;9562:15;9554:23;;9273:311;;;:::o;9590:117::-;9699:1;9696;9689:12;9730:710;9826:5;9851:81;9867:64;9924:6;9867:64;:::i;:::-;9851:81;:::i;:::-;9842:90;;9952:5;9981:6;9974:5;9967:21;10015:4;10008:5;10004:16;9997:23;;10068:4;10060:6;10056:17;10048:6;10044:30;10097:3;10089:6;10086:15;10083:122;;;10116:79;;:::i;:::-;10083:122;10231:6;10214:220;10248:6;10243:3;10240:15;10214:220;;;10323:3;10352:37;10385:3;10373:10;10352:37;:::i;:::-;10347:3;10340:50;10419:4;10414:3;10410:14;10403:21;;10290:144;10274:4;10269:3;10265:14;10258:21;;10214:220;;;10218:21;9832:608;;9730:710;;;;;:::o;10463:370::-;10534:5;10583:3;10576:4;10568:6;10564:17;10560:27;10550:122;;10591:79;;:::i;:::-;10550:122;10708:6;10695:20;10733:94;10823:3;10815:6;10808:4;10800:6;10796:17;10733:94;:::i;:::-;10724:103;;10540:293;10463:370;;;;:::o;10839:678::-;10929:6;10937;10986:2;10974:9;10965:7;10961:23;10957:32;10954:119;;;10992:79;;:::i;:::-;10954:119;11140:1;11129:9;11125:17;11112:31;11170:18;11162:6;11159:30;11156:117;;;11192:79;;:::i;:::-;11156:117;11297:78;11367:7;11358:6;11347:9;11343:22;11297:78;:::i;:::-;11287:88;;11083:302;11424:2;11450:50;11492:7;11483:6;11472:9;11468:22;11450:50;:::i;:::-;11440:60;;11395:115;10839:678;;;;;:::o;11523:474::-;11591:6;11599;11648:2;11636:9;11627:7;11623:23;11619:32;11616:119;;;11654:79;;:::i;:::-;11616:119;11774:1;11799:53;11844:7;11835:6;11824:9;11820:22;11799:53;:::i;:::-;11789:63;;11745:117;11901:2;11927:53;11972:7;11963:6;11952:9;11948:22;11927:53;:::i;:::-;11917:63;;11872:118;11523:474;;;;;:::o;12003:911::-;12098:6;12106;12114;12122;12130;12179:3;12167:9;12158:7;12154:23;12150:33;12147:120;;;12186:79;;:::i;:::-;12147:120;12306:1;12331:53;12376:7;12367:6;12356:9;12352:22;12331:53;:::i;:::-;12321:63;;12277:117;12433:2;12459:53;12504:7;12495:6;12484:9;12480:22;12459:53;:::i;:::-;12449:63;;12404:118;12561:2;12587:53;12632:7;12623:6;12612:9;12608:22;12587:53;:::i;:::-;12577:63;;12532:118;12689:2;12715:53;12760:7;12751:6;12740:9;12736:22;12715:53;:::i;:::-;12705:63;;12660:118;12817:3;12844:53;12889:7;12880:6;12869:9;12865:22;12844:53;:::i;:::-;12834:63;;12788:119;12003:911;;;;;;;;:::o;12920:180::-;12968:77;12965:1;12958:88;13065:4;13062:1;13055:15;13089:4;13086:1;13079:15;13106:320;13150:6;13187:1;13181:4;13177:12;13167:22;;13234:1;13228:4;13224:12;13255:18;13245:81;;13311:4;13303:6;13299:17;13289:27;;13245:81;13373:2;13365:6;13362:14;13342:18;13339:38;13336:84;;13392:18;;:::i;:::-;13336:84;13157:269;13106:320;;;:::o;13432:182::-;13572:34;13568:1;13560:6;13556:14;13549:58;13432:182;:::o;13620:366::-;13762:3;13783:67;13847:2;13842:3;13783:67;:::i;:::-;13776:74;;13859:93;13948:3;13859:93;:::i;:::-;13977:2;13972:3;13968:12;13961:19;;13620:366;;;:::o;13992:419::-;14158:4;14196:2;14185:9;14181:18;14173:26;;14245:9;14239:4;14235:20;14231:1;14220:9;14216:17;14209:47;14273:131;14399:4;14273:131;:::i;:::-;14265:139;;13992:419;;;:::o;14417:180::-;14465:77;14462:1;14455:88;14562:4;14559:1;14552:15;14586:4;14583:1;14576:15;14603:410;14643:7;14666:20;14684:1;14666:20;:::i;:::-;14661:25;;14700:20;14718:1;14700:20;:::i;:::-;14695:25;;14755:1;14752;14748:9;14777:30;14795:11;14777:30;:::i;:::-;14766:41;;14956:1;14947:7;14943:15;14940:1;14937:22;14917:1;14910:9;14890:83;14867:139;;14986:18;;:::i;:::-;14867:139;14651:362;14603:410;;;;:::o;15019:180::-;15067:77;15064:1;15057:88;15164:4;15161:1;15154:15;15188:4;15185:1;15178:15;15205:185;15245:1;15262:20;15280:1;15262:20;:::i;:::-;15257:25;;15296:20;15314:1;15296:20;:::i;:::-;15291:25;;15335:1;15325:35;;15340:18;;:::i;:::-;15325:35;15382:1;15379;15375:9;15370:14;;15205:185;;;;:::o;15396:234::-;15536:34;15532:1;15524:6;15520:14;15513:58;15605:17;15600:2;15592:6;15588:15;15581:42;15396:234;:::o;15636:366::-;15778:3;15799:67;15863:2;15858:3;15799:67;:::i;:::-;15792:74;;15875:93;15964:3;15875:93;:::i;:::-;15993:2;15988:3;15984:12;15977:19;;15636:366;;;:::o;16008:419::-;16174:4;16212:2;16201:9;16197:18;16189:26;;16261:9;16255:4;16251:20;16247:1;16236:9;16232:17;16225:47;16289:131;16415:4;16289:131;:::i;:::-;16281:139;;16008:419;;;:::o;16433:191::-;16473:3;16492:20;16510:1;16492:20;:::i;:::-;16487:25;;16526:20;16544:1;16526:20;:::i;:::-;16521:25;;16569:1;16566;16562:9;16555:16;;16590:3;16587:1;16584:10;16581:36;;;16597:18;;:::i;:::-;16581:36;16433:191;;;;:::o;16630:179::-;16770:31;16766:1;16758:6;16754:14;16747:55;16630:179;:::o;16815:366::-;16957:3;16978:67;17042:2;17037:3;16978:67;:::i;:::-;16971:74;;17054:93;17143:3;17054:93;:::i;:::-;17172:2;17167:3;17163:12;17156:19;;16815:366;;;:::o;17187:419::-;17353:4;17391:2;17380:9;17376:18;17368:26;;17440:9;17434:4;17430:20;17426:1;17415:9;17411:17;17404:47;17468:131;17594:4;17468:131;:::i;:::-;17460:139;;17187:419;;;:::o;17612:244::-;17752:34;17748:1;17740:6;17736:14;17729:58;17821:27;17816:2;17808:6;17804:15;17797:52;17612:244;:::o;17862:366::-;18004:3;18025:67;18089:2;18084:3;18025:67;:::i;:::-;18018:74;;18101:93;18190:3;18101:93;:::i;:::-;18219:2;18214:3;18210:12;18203:19;;17862:366;;;:::o;18234:419::-;18400:4;18438:2;18427:9;18423:18;18415:26;;18487:9;18481:4;18477:20;18473:1;18462:9;18458:17;18451:47;18515:131;18641:4;18515:131;:::i;:::-;18507:139;;18234:419;;;:::o;18659:180::-;18799:32;18795:1;18787:6;18783:14;18776:56;18659:180;:::o;18845:366::-;18987:3;19008:67;19072:2;19067:3;19008:67;:::i;:::-;19001:74;;19084:93;19173:3;19084:93;:::i;:::-;19202:2;19197:3;19193:12;19186:19;;18845:366;;;:::o;19217:419::-;19383:4;19421:2;19410:9;19406:18;19398:26;;19470:9;19464:4;19460:20;19456:1;19445:9;19441:17;19434:47;19498:131;19624:4;19498:131;:::i;:::-;19490:139;;19217:419;;;:::o;19642:180::-;19690:77;19687:1;19680:88;19787:4;19784:1;19777:15;19811:4;19808:1;19801:15;19828:233;19867:3;19890:24;19908:5;19890:24;:::i;:::-;19881:33;;19936:66;19929:5;19926:77;19923:103;;20006:18;;:::i;:::-;19923:103;20053:1;20046:5;20042:13;20035:20;;19828:233;;;:::o;20067:223::-;20207:34;20203:1;20195:6;20191:14;20184:58;20276:6;20271:2;20263:6;20259:15;20252:31;20067:223;:::o;20296:366::-;20438:3;20459:67;20523:2;20518:3;20459:67;:::i;:::-;20452:74;;20535:93;20624:3;20535:93;:::i;:::-;20653:2;20648:3;20644:12;20637:19;;20296:366;;;:::o;20668:419::-;20834:4;20872:2;20861:9;20857:18;20849:26;;20921:9;20915:4;20911:20;20907:1;20896:9;20892:17;20885:47;20949:131;21075:4;20949:131;:::i;:::-;20941:139;;20668:419;;;:::o;21093:240::-;21233:34;21229:1;21221:6;21217:14;21210:58;21302:23;21297:2;21289:6;21285:15;21278:48;21093:240;:::o;21339:366::-;21481:3;21502:67;21566:2;21561:3;21502:67;:::i;:::-;21495:74;;21578:93;21667:3;21578:93;:::i;:::-;21696:2;21691:3;21687:12;21680:19;;21339:366;;;:::o;21711:419::-;21877:4;21915:2;21904:9;21900:18;21892:26;;21964:9;21958:4;21954:20;21950:1;21939:9;21935:17;21928:47;21992:131;22118:4;21992:131;:::i;:::-;21984:139;;21711:419;;;:::o;22136:239::-;22276:34;22272:1;22264:6;22260:14;22253:58;22345:22;22340:2;22332:6;22328:15;22321:47;22136:239;:::o;22381:366::-;22523:3;22544:67;22608:2;22603:3;22544:67;:::i;:::-;22537:74;;22620:93;22709:3;22620:93;:::i;:::-;22738:2;22733:3;22729:12;22722:19;;22381:366;;;:::o;22753:419::-;22919:4;22957:2;22946:9;22942:18;22934:26;;23006:9;23000:4;22996:20;22992:1;22981:9;22977:17;22970:47;23034:131;23160:4;23034:131;:::i;:::-;23026:139;;22753:419;;;:::o;23178:179::-;23318:31;23314:1;23306:6;23302:14;23295:55;23178:179;:::o;23363:366::-;23505:3;23526:67;23590:2;23585:3;23526:67;:::i;:::-;23519:74;;23602:93;23691:3;23602:93;:::i;:::-;23720:2;23715:3;23711:12;23704:19;;23363:366;;;:::o;23735:419::-;23901:4;23939:2;23928:9;23924:18;23916:26;;23988:9;23982:4;23978:20;23974:1;23963:9;23959:17;23952:47;24016:131;24142:4;24016:131;:::i;:::-;24008:139;;23735:419;;;:::o;24160:225::-;24300:34;24296:1;24288:6;24284:14;24277:58;24369:8;24364:2;24356:6;24352:15;24345:33;24160:225;:::o;24391:366::-;24533:3;24554:67;24618:2;24613:3;24554:67;:::i;:::-;24547:74;;24630:93;24719:3;24630:93;:::i;:::-;24748:2;24743:3;24739:12;24732:19;;24391:366;;;:::o;24763:419::-;24929:4;24967:2;24956:9;24952:18;24944:26;;25016:9;25010:4;25006:20;25002:1;24991:9;24987:17;24980:47;25044:131;25170:4;25044:131;:::i;:::-;25036:139;;24763:419;;;:::o;25188:179::-;25328:31;25324:1;25316:6;25312:14;25305:55;25188:179;:::o;25373:366::-;25515:3;25536:67;25600:2;25595:3;25536:67;:::i;:::-;25529:74;;25612:93;25701:3;25612:93;:::i;:::-;25730:2;25725:3;25721:12;25714:19;;25373:366;;;:::o;25745:419::-;25911:4;25949:2;25938:9;25934:18;25926:26;;25998:9;25992:4;25988:20;25984:1;25973:9;25969:17;25962:47;26026:131;26152:4;26026:131;:::i;:::-;26018:139;;25745:419;;;:::o;26170:177::-;26310:29;26306:1;26298:6;26294:14;26287:53;26170:177;:::o;26353:366::-;26495:3;26516:67;26580:2;26575:3;26516:67;:::i;:::-;26509:74;;26592:93;26681:3;26592:93;:::i;:::-;26710:2;26705:3;26701:12;26694:19;;26353:366;;;:::o;26725:419::-;26891:4;26929:2;26918:9;26914:18;26906:26;;26978:9;26972:4;26968:20;26964:1;26953:9;26949:17;26942:47;27006:131;27132:4;27006:131;:::i;:::-;26998:139;;26725:419;;;:::o;27150:223::-;27290:34;27286:1;27278:6;27274:14;27267:58;27359:6;27354:2;27346:6;27342:15;27335:31;27150:223;:::o;27379:366::-;27521:3;27542:67;27606:2;27601:3;27542:67;:::i;:::-;27535:74;;27618:93;27707:3;27618:93;:::i;:::-;27736:2;27731:3;27727:12;27720:19;;27379:366;;;:::o;27751:419::-;27917:4;27955:2;27944:9;27940:18;27932:26;;28004:9;27998:4;27994:20;27990:1;27979:9;27975:17;27968:47;28032:131;28158:4;28032:131;:::i;:::-;28024:139;;27751:419;;;:::o;28176:221::-;28316:34;28312:1;28304:6;28300:14;28293:58;28385:4;28380:2;28372:6;28368:15;28361:29;28176:221;:::o;28403:366::-;28545:3;28566:67;28630:2;28625:3;28566:67;:::i;:::-;28559:74;;28642:93;28731:3;28642:93;:::i;:::-;28760:2;28755:3;28751:12;28744:19;;28403:366;;;:::o;28775:419::-;28941:4;28979:2;28968:9;28964:18;28956:26;;29028:9;29022:4;29018:20;29014:1;29003:9;28999:17;28992:47;29056:131;29182:4;29056:131;:::i;:::-;29048:139;;28775:419;;;:::o;29200:224::-;29340:34;29336:1;29328:6;29324:14;29317:58;29409:7;29404:2;29396:6;29392:15;29385:32;29200:224;:::o;29430:366::-;29572:3;29593:67;29657:2;29652:3;29593:67;:::i;:::-;29586:74;;29669:93;29758:3;29669:93;:::i;:::-;29787:2;29782:3;29778:12;29771:19;;29430:366;;;:::o;29802:419::-;29968:4;30006:2;29995:9;29991:18;29983:26;;30055:9;30049:4;30045:20;30041:1;30030:9;30026:17;30019:47;30083:131;30209:4;30083:131;:::i;:::-;30075:139;;29802:419;;;:::o;30227:222::-;30367:34;30363:1;30355:6;30351:14;30344:58;30436:5;30431:2;30423:6;30419:15;30412:30;30227:222;:::o;30455:366::-;30597:3;30618:67;30682:2;30677:3;30618:67;:::i;:::-;30611:74;;30694:93;30783:3;30694:93;:::i;:::-;30812:2;30807:3;30803:12;30796:19;;30455:366;;;:::o;30827:419::-;30993:4;31031:2;31020:9;31016:18;31008:26;;31080:9;31074:4;31070:20;31066:1;31055:9;31051:17;31044:47;31108:131;31234:4;31108:131;:::i;:::-;31100:139;;30827:419;;;:::o;31252:236::-;31392:34;31388:1;31380:6;31376:14;31369:58;31461:19;31456:2;31448:6;31444:15;31437:44;31252:236;:::o;31494:366::-;31636:3;31657:67;31721:2;31716:3;31657:67;:::i;:::-;31650:74;;31733:93;31822:3;31733:93;:::i;:::-;31851:2;31846:3;31842:12;31835:19;;31494:366;;;:::o;31866:419::-;32032:4;32070:2;32059:9;32055:18;32047:26;;32119:9;32113:4;32109:20;32105:1;32094:9;32090:17;32083:47;32147:131;32273:4;32147:131;:::i;:::-;32139:139;;31866:419;;;:::o;32291:172::-;32431:24;32427:1;32419:6;32415:14;32408:48;32291:172;:::o;32469:366::-;32611:3;32632:67;32696:2;32691:3;32632:67;:::i;:::-;32625:74;;32708:93;32797:3;32708:93;:::i;:::-;32826:2;32821:3;32817:12;32810:19;;32469:366;;;:::o;32841:419::-;33007:4;33045:2;33034:9;33030:18;33022:26;;33094:9;33088:4;33084:20;33080:1;33069:9;33065:17;33058:47;33122:131;33248:4;33122:131;:::i;:::-;33114:139;;32841:419;;;:::o;33266:297::-;33406:34;33402:1;33394:6;33390:14;33383:58;33475:34;33470:2;33462:6;33458:15;33451:59;33544:11;33539:2;33531:6;33527:15;33520:36;33266:297;:::o;33569:366::-;33711:3;33732:67;33796:2;33791:3;33732:67;:::i;:::-;33725:74;;33808:93;33897:3;33808:93;:::i;:::-;33926:2;33921:3;33917:12;33910:19;;33569:366;;;:::o;33941:419::-;34107:4;34145:2;34134:9;34130:18;34122:26;;34194:9;34188:4;34184:20;34180:1;34169:9;34165:17;34158:47;34222:131;34348:4;34222:131;:::i;:::-;34214:139;;33941:419;;;:::o;34366:240::-;34506:34;34502:1;34494:6;34490:14;34483:58;34575:23;34570:2;34562:6;34558:15;34551:48;34366:240;:::o;34612:366::-;34754:3;34775:67;34839:2;34834:3;34775:67;:::i;:::-;34768:74;;34851:93;34940:3;34851:93;:::i;:::-;34969:2;34964:3;34960:12;34953:19;;34612:366;;;:::o;34984:419::-;35150:4;35188:2;35177:9;35173:18;35165:26;;35237:9;35231:4;35227:20;35223:1;35212:9;35208:17;35201:47;35265:131;35391:4;35265:131;:::i;:::-;35257:139;;34984:419;;;:::o;35409:169::-;35549:21;35545:1;35537:6;35533:14;35526:45;35409:169;:::o;35584:366::-;35726:3;35747:67;35811:2;35806:3;35747:67;:::i;:::-;35740:74;;35823:93;35912:3;35823:93;:::i;:::-;35941:2;35936:3;35932:12;35925:19;;35584:366;;;:::o;35956:419::-;36122:4;36160:2;36149:9;36145:18;36137:26;;36209:9;36203:4;36199:20;36195:1;36184:9;36180:17;36173:47;36237:131;36363:4;36237:131;:::i;:::-;36229:139;;35956:419;;;:::o;36381:241::-;36521:34;36517:1;36509:6;36505:14;36498:58;36590:24;36585:2;36577:6;36573:15;36566:49;36381:241;:::o;36628:366::-;36770:3;36791:67;36855:2;36850:3;36791:67;:::i;:::-;36784:74;;36867:93;36956:3;36867:93;:::i;:::-;36985:2;36980:3;36976:12;36969:19;;36628:366;;;:::o;37000:419::-;37166:4;37204:2;37193:9;37189:18;37181:26;;37253:9;37247:4;37243:20;37239:1;37228:9;37224:17;37217:47;37281:131;37407:4;37281:131;:::i;:::-;37273:139;;37000:419;;;:::o;37425:194::-;37465:4;37485:20;37503:1;37485:20;:::i;:::-;37480:25;;37519:20;37537:1;37519:20;:::i;:::-;37514:25;;37563:1;37560;37556:9;37548:17;;37587:1;37581:4;37578:11;37575:37;;;37592:18;;:::i;:::-;37575:37;37425:194;;;;:::o;37625:147::-;37726:11;37763:3;37748:18;;37625:147;;;;:::o;37778:114::-;;:::o;37898:398::-;38057:3;38078:83;38159:1;38154:3;38078:83;:::i;:::-;38071:90;;38170:93;38259:3;38170:93;:::i;:::-;38288:1;38283:3;38279:11;38272:18;;37898:398;;;:::o;38302:379::-;38486:3;38508:147;38651:3;38508:147;:::i;:::-;38501:154;;38672:3;38665:10;;38302:379;;;:::o;38687:220::-;38827:34;38823:1;38815:6;38811:14;38804:58;38896:3;38891:2;38883:6;38879:15;38872:28;38687:220;:::o;38913:366::-;39055:3;39076:67;39140:2;39135:3;39076:67;:::i;:::-;39069:74;;39152:93;39241:3;39152:93;:::i;:::-;39270:2;39265:3;39261:12;39254:19;;38913:366;;;:::o;39285:419::-;39451:4;39489:2;39478:9;39474:18;39466:26;;39538:9;39532:4;39528:20;39524:1;39513:9;39509:17;39502:47;39566:131;39692:4;39566:131;:::i;:::-;39558:139;;39285:419;;;:::o;39710:143::-;39767:5;39798:6;39792:13;39783:22;;39814:33;39841:5;39814:33;:::i;:::-;39710:143;;;;:::o;39859:351::-;39929:6;39978:2;39966:9;39957:7;39953:23;39949:32;39946:119;;;39984:79;;:::i;:::-;39946:119;40104:1;40129:64;40185:7;40176:6;40165:9;40161:22;40129:64;:::i;:::-;40119:74;;40075:128;39859:351;;;;:::o;40216:85::-;40261:7;40290:5;40279:16;;40216:85;;;:::o;40307:158::-;40365:9;40398:61;40416:42;40425:32;40451:5;40425:32;:::i;:::-;40416:42;:::i;:::-;40398:61;:::i;:::-;40385:74;;40307:158;;;:::o;40471:147::-;40566:45;40605:5;40566:45;:::i;:::-;40561:3;40554:58;40471:147;;:::o;40624:114::-;40691:6;40725:5;40719:12;40709:22;;40624:114;;;:::o;40744:184::-;40843:11;40877:6;40872:3;40865:19;40917:4;40912:3;40908:14;40893:29;;40744:184;;;;:::o;40934:132::-;41001:4;41024:3;41016:11;;41054:4;41049:3;41045:14;41037:22;;40934:132;;;:::o;41072:108::-;41149:24;41167:5;41149:24;:::i;:::-;41144:3;41137:37;41072:108;;:::o;41186:179::-;41255:10;41276:46;41318:3;41310:6;41276:46;:::i;:::-;41354:4;41349:3;41345:14;41331:28;;41186:179;;;;:::o;41371:113::-;41441:4;41473;41468:3;41464:14;41456:22;;41371:113;;;:::o;41520:732::-;41639:3;41668:54;41716:5;41668:54;:::i;:::-;41738:86;41817:6;41812:3;41738:86;:::i;:::-;41731:93;;41848:56;41898:5;41848:56;:::i;:::-;41927:7;41958:1;41943:284;41968:6;41965:1;41962:13;41943:284;;;42044:6;42038:13;42071:63;42130:3;42115:13;42071:63;:::i;:::-;42064:70;;42157:60;42210:6;42157:60;:::i;:::-;42147:70;;42003:224;41990:1;41987;41983:9;41978:14;;41943:284;;;41947:14;42243:3;42236:10;;41644:608;;;41520:732;;;;:::o;42258:831::-;42521:4;42559:3;42548:9;42544:19;42536:27;;42573:71;42641:1;42630:9;42626:17;42617:6;42573:71;:::i;:::-;42654:80;42730:2;42719:9;42715:18;42706:6;42654:80;:::i;:::-;42781:9;42775:4;42771:20;42766:2;42755:9;42751:18;42744:48;42809:108;42912:4;42903:6;42809:108;:::i;:::-;42801:116;;42927:72;42995:2;42984:9;42980:18;42971:6;42927:72;:::i;:::-;43009:73;43077:3;43066:9;43062:19;43053:6;43009:73;:::i;:::-;42258:831;;;;;;;;:::o

Swarm Source

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