ETH Price: $2,584.84 (-2.00%)

Token

TexasInstituteOfTechnology (TITS)
 

Overview

Max Total Supply

100,000,000,000 TITS

Holders

46

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
745,519,672.925614826375228987 TITS

Value
$0.00
0x5c189E3D81D9ADD92cFd518B87206e501943CC3e
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:
TexasInstituteOfTechnology

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-04
*/

/**
 *Submitted for verification at Etherscan.io on 2023-07-12
 */

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.9;

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    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;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    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;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    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);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    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);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be 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;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be 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
    );

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        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 TexasInstituteOfTechnology is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    address public buyBackWallet;

    uint256 public maxTransactionAmount;
    uint256 public maxWallet;
    uint8 private _decimals;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public rescueSwap = false;
    bool public snipingPeroid = true;
    uint256 public tradingActiveBlock;

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

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

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

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

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

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

    event BuyBackTriggered(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);

    constructor() ERC20("TexasInstituteOfTechnology", "TITS") {
        address _owner = msg.sender;

        _decimals = 18;

        uint256 totalSupply = 100000000000 * (10 ** _decimals);

        maxTransactionAmount = totalSupply;
        maxWallet = (totalSupply * 1) / 2 / 100; // 0.5% maxWallet

        buyMarketingFee = 0;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyBuyBackFee = 0;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBuyBackFee;

        sellMarketingFee = 0;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        sellBuyBackFee = 0;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBuyBackFee;

        marketingWallet = 0x4f15E59c8b33F498C4bbb524567efA72e467Ed4d; // set as marketing wallet
        devWallet = 0x4f15E59c8b33F498C4bbb524567efA72e467Ed4d; // set as dev wallet
        buyBackWallet = address(_owner); // set as buyBackWallet

        //End of Router Variables.

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

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

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

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

    receive() external payable {}

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

    function startSnipingPeroid() external onlyOwner {
        snipingPeroid = true;
    }

    function endSnipingPeroid() external onlyOwner {
        snipingPeroid = false;
    }

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

    function updateMaxAmount(uint256 newPercent) external onlyOwner {
        require(
            newPercent >= 1,
            "Cannot set maxTransactionAmount lower than 1%"
        );
        maxTransactionAmount = ((totalSupply() * newPercent) / 100);
    }

    function updateMaxWallet(uint256 newPercent) external onlyOwner {
        require(
            newPercent >= 1,
            "Cannot set maxTransactionAmount lower than 1%"
        );

        maxWallet = ((totalSupply() * newPercent) / 100);
    }

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

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

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

    // only use this to disable swapback and send tax in form of tokens
    function updateRescueSwap(bool enabled) external onlyOwner {
        rescueSwap = enabled;
    }

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

    // CHECKED
    function updateSFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee,
        uint256 _buyBackFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellBuyBackFee = _buyBackFee;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBuyBackFee;
        require(sellTotalFees <= 70, "Must keep fees at 70% or less");
    }

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

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) external 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 updateBuyBackWallet(address newWallet) external onlyOwner {
        emit buyBackWalletUpdated(newWallet, buyBackWallet);
        buyBackWallet = newWallet;
    }

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

    function setGoodAddress(address account) external onlyOwner {
        _isBot[account] = false;
    }

    function setBlockAddr(address account) external onlyOwner {
        _isBot[account] = true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        }
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !(_isExcludedFromFees[from] || _isExcludedFromFees[to]) &&
                !swapping
            ) {
                //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 {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance > 0;

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

            swapBack();

            swapping = false;
        } 
 

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

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

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

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

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

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

    function resetTaxAmount() public onlyOwner {
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForBuyBack = 0;
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));

        if (rescueSwap) {
            if (contractBalance > 0) {
                super._transfer(
                    address(this),
                    marketingWallet,
                    contractBalance
                );
            }
            return;
        }

        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev +
            tokensForBuyBack;
        bool success;

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        uint256 ethForLiquidity = ethBalance -
            ethForMarketing -
            ethForDev -
            ethForBuyBack;

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":"buyBackWalletUpdated","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":"_isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endSnipingPeroid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resetTaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"address","name":"account","type":"address"}],"name":"setBlockAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setGoodAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipingPeroid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startSnipingPeroid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBuyBack","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"}],"name":"updateBFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateBuyBackWallet","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":"newPercent","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercent","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateRescueSwap","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":"_buyBackFee","type":"uint256"}],"name":"updateSFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff0219169083151502179055505f600b60036101000a81548160ff0219169083151502179055505f600b60046101000a81548160ff0219169083151502179055506001600b60056101000a81548160ff02191690831515021790555034801562000094575f80fd5b506040518060400160405280601a81526020017f5465786173496e737469747574654f66546563686e6f6c6f67790000000000008152506040518060400160405280600481526020017f5449545300000000000000000000000000000000000000000000000000000000815250816003908162000112919062000fc5565b50806004908162000124919062000fc5565b5050505f62000138620006a660201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f3390506012600b5f6101000a81548160ff021916908360ff1602179055505f600b5f9054906101000a900460ff16600a62000212919062001232565b64174876e80062000224919062001282565b9050806009819055506064600260018362000240919062001282565b6200024c9190620012f9565b620002589190620012f9565b600a819055505f600e819055505f600f819055505f6010819055505f601181905550601154601054600f54600e5462000292919062001330565b6200029e919062001330565b620002aa919062001330565b600d819055505f6013819055505f6014819055505f6015819055505f601681905550601654601554601454601354620002e4919062001330565b620002f0919062001330565b620002fc919062001330565b601281905550734f15e59c8b33f498c4bbb524567efa72e467ed4d60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734f15e59c8b33f498c4bbb524567efa72e467ed4d60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f737a250d5630b4cf539739df2c5dacb4c659f2488d905062000415816001620006ad60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000493573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004b99190620013cf565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200051f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005459190620013cf565b6040518363ffffffff1660e01b81526004016200056492919062001410565b6020604051808303815f875af115801562000581573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005a79190620013cf565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620005ef60a0516001620006ad60201b60201c565b6200060460a0516001620007a660201b60201c565b620006178360016200084460201b60201c565b6200062a3060016200084460201b60201c565b6200063f61dead60016200084460201b60201c565b62000652836001620006ad60201b60201c565b62000665306001620006ad60201b60201c565b6200067a61dead6001620006ad60201b60201c565b6200068c83836200098d60201b60201c565b6200069d8362000b2a60201b60201c565b5050506200168c565b5f33905090565b620006bd620006a660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200074e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007459062001499565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b62000854620006a660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008dc9062001499565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009819190620014d5565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f5906200153e565b60405180910390fd5b62000a115f838362000cfa60201b60201c565b62000a288160025462000cff60201b90919060201c565b60028190555062000a7f815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000cff60201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b1e91906200156f565b60405180910390a35050565b62000b3a620006a660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bc29062001499565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000c3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c3390620015fe565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b5f80828462000d0f919062001330565b90508381101562000d57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d4e906200166c565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000ddd57607f821691505b60208210810362000df35762000df262000d98565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e1a565b62000e63868362000e1a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ead62000ea762000ea18462000e7b565b62000e84565b62000e7b565b9050919050565b5f819050919050565b62000ec88362000e8d565b62000ee062000ed78262000eb4565b84845462000e26565b825550505050565b5f90565b62000ef662000ee8565b62000f0381848462000ebd565b505050565b5b8181101562000f2a5762000f1e5f8262000eec565b60018101905062000f09565b5050565b601f82111562000f795762000f438162000df9565b62000f4e8462000e0b565b8101602085101562000f5e578190505b62000f7662000f6d8562000e0b565b83018262000f08565b50505b505050565b5f82821c905092915050565b5f62000f9b5f198460080262000f7e565b1980831691505092915050565b5f62000fb5838362000f8a565b9150826002028217905092915050565b62000fd08262000d61565b67ffffffffffffffff81111562000fec5762000feb62000d6b565b5b62000ff8825462000dc5565b6200100582828562000f2e565b5f60209050601f8311600181146200103b575f841562001026578287015190505b62001032858262000fa8565b865550620010a1565b601f1984166200104b8662000df9565b5f5b8281101562001074578489015182556001820191506020850194506020810190506200104d565b8683101562001094578489015162001090601f89168262000f8a565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562001133578086048111156200110b576200110a620010a9565b5b60018516156200111b5780820291505b80810290506200112b85620010d6565b9450620010eb565b94509492505050565b5f826200114d57600190506200121f565b816200115c575f90506200121f565b81600181146200117557600281146200118057620011b6565b60019150506200121f565b60ff841115620011955762001194620010a9565b5b8360020a915084821115620011af57620011ae620010a9565b5b506200121f565b5060208310610133831016604e8410600b8410161715620011f05782820a905083811115620011ea57620011e9620010a9565b5b6200121f565b620011ff8484846001620010e2565b92509050818404811115620012195762001218620010a9565b5b81810290505b9392505050565b5f60ff82169050919050565b5f6200123e8262000e7b565b91506200124b8362001226565b92506200127a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200113c565b905092915050565b5f6200128e8262000e7b565b91506200129b8362000e7b565b9250828202620012ab8162000e7b565b91508282048414831517620012c557620012c4620010a9565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620013058262000e7b565b9150620013128362000e7b565b925082620013255762001324620012cc565b5b828204905092915050565b5f6200133c8262000e7b565b9150620013498362000e7b565b9250828201905080821115620013645762001363620010a9565b5b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62001399826200136e565b9050919050565b620013ab816200138d565b8114620013b6575f80fd5b50565b5f81519050620013c981620013a0565b92915050565b5f60208284031215620013e757620013e66200136a565b5b5f620013f684828501620013b9565b91505092915050565b6200140a816200138d565b82525050565b5f604082019050620014255f830185620013ff565b620014346020830184620013ff565b9392505050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620014816020836200143b565b91506200148e826200144b565b602082019050919050565b5f6020820190508181035f830152620014b28162001473565b9050919050565b5f8115159050919050565b620014cf81620014b9565b82525050565b5f602082019050620014ea5f830184620014c4565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001526601f836200143b565b91506200153382620014f0565b602082019050919050565b5f6020820190508181035f830152620015578162001518565b9050919050565b620015698162000e7b565b82525050565b5f602082019050620015845f8301846200155e565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f620015e66026836200143b565b9150620015f3826200158a565b604082019050919050565b5f6020820190508181035f8301526200161781620015d8565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62001654601b836200143b565b915062001661826200161e565b602082019050919050565b5f6020820190508181035f830152620016858162001646565b9050919050565b60805160a051615271620016d85f395f818161164f01526120f101525f81816111f201528181613d8001528181613e5f01528181613e8601528181613fd80152613fff01526152715ff3fe6080604052600436106103d1575f3560e01c806387b85804116101fc578063aacebbe311610117578063d79270ef116100aa578063f11a24d311610079578063f11a24d314610dfc578063f2fde38b14610e26578063f637434214610e4e578063f8b45b0514610e78578063fced320a14610ea2576103d8565b8063d79270ef14610d42578063d85ba06314610d6c578063dd62ed3e14610d96578063ee40166e14610dd2576103d8565b8063bbc0c742116100e6578063bbc0c74214610cb0578063bf1de3e614610cda578063c024666814610cf0578063c8c8ebe414610d18576103d8565b8063aacebbe314610bfa578063abb8105214610c22578063ae13513514610c5e578063b62496f514610c74576103d8565b806395d89b411161018f578063a0d82dc51161015e578063a0d82dc514610b30578063a1d11b8514610b5a578063a457c2d714610b82578063a9059cbb14610bbe576103d8565b806395d89b4114610a8a5780639a7a23d614610ab45780639c3b4fdc14610adc5780639fccce3214610b06576103d8565b8063917c978e116101cb578063917c978e146109e85780639213691314610a10578063924de9b714610a3a578063955b225b14610a62576103d8565b806387b85804146109565780638a8c523c1461097e5780638da5cb5b146109945780638ea5220f146109be576103d8565b806327c8f835116102ec5780636ddd17131161027f5780637571336a1161024e5780637571336a146108c457806375f0a874146108ec5780637bce5a04146109165780637dd72e8d14610940576103d8565b80636ddd17131461081e57806370a0823114610848578063715018a614610884578063751039fc1461089a576103d8565b80634a62bb65116102bb5780634a62bb65146107645780634c24c51d1461078e5780634fbee193146107b85780636a486a8e146107f4576103d8565b806327c8f835146106aa578063313ce567146106d457806339509351146106fe57806349bd5a5e1461073a576103d8565b80631816467f116103645780631cd348c0116103335780631cd348c0146105f05780631f3fed8f1461061a5780631fe70a981461064457806323b872dd1461066e576103d8565b80631816467f1461054c5780631a221dbb146105745780631a8145bb1461059e5780631c499ab0146105c8576103d8565b8063106b5da1116103a0578063106b5da11461049457806310d5de53146104bc5780631694505e146104f857806318160ddd14610522576103d8565b806306e7b14d146103dc57806306fdde0314610404578063095ea7b31461042e5780630b166d501461046a576103d8565b366103d857005b5f80fd5b3480156103e7575f80fd5b5061040260048036038101906103fd919061416b565b610eca565b005b34801561040f575f80fd5b5061041861101e565b6040516104259190614220565b60405180910390f35b348015610439575f80fd5b50610454600480360381019061044f9190614273565b6110ae565b60405161046191906142cb565b60405180910390f35b348015610475575f80fd5b5061047e6110cb565b60405161048b91906142f3565b60405180910390f35b34801561049f575f80fd5b506104ba60048036038101906104b5919061430c565b6110d1565b005b3480156104c7575f80fd5b506104e260048036038101906104dd919061416b565b6111d3565b6040516104ef91906142cb565b60405180910390f35b348015610503575f80fd5b5061050c6111f0565b6040516105199190614392565b60405180910390f35b34801561052d575f80fd5b50610536611214565b60405161054391906142f3565b60405180910390f35b348015610557575f80fd5b50610572600480360381019061056d919061416b565b61121d565b005b34801561057f575f80fd5b50610588611371565b60405161059591906142f3565b60405180910390f35b3480156105a9575f80fd5b506105b2611377565b6040516105bf91906142f3565b60405180910390f35b3480156105d3575f80fd5b506105ee60048036038101906105e9919061430c565b61137d565b005b3480156105fb575f80fd5b5061060461147f565b60405161061191906143ba565b60405180910390f35b348015610625575f80fd5b5061062e6114a4565b60405161063b91906142f3565b60405180910390f35b34801561064f575f80fd5b506106586114aa565b60405161066591906142f3565b60405180910390f35b348015610679575f80fd5b50610694600480360381019061068f91906143d3565b6114b0565b6040516106a191906142cb565b60405180910390f35b3480156106b5575f80fd5b506106be611584565b6040516106cb91906143ba565b60405180910390f35b3480156106df575f80fd5b506106e861158a565b6040516106f5919061443e565b60405180910390f35b348015610709575f80fd5b50610724600480360381019061071f9190614273565b61159f565b60405161073191906142cb565b60405180910390f35b348015610745575f80fd5b5061074e61164d565b60405161075b91906143ba565b60405180910390f35b34801561076f575f80fd5b50610778611671565b60405161078591906142cb565b60405180910390f35b348015610799575f80fd5b506107a2611684565b6040516107af91906142cb565b60405180910390f35b3480156107c3575f80fd5b506107de60048036038101906107d9919061416b565b611697565b6040516107eb91906142cb565b60405180910390f35b3480156107ff575f80fd5b506108086116e9565b60405161081591906142f3565b60405180910390f35b348015610829575f80fd5b506108326116ef565b60405161083f91906142cb565b60405180910390f35b348015610853575f80fd5b5061086e6004803603810190610869919061416b565b611702565b60405161087b91906142f3565b60405180910390f35b34801561088f575f80fd5b50610898611747565b005b3480156108a5575f80fd5b506108ae61189a565b6040516108bb91906142cb565b60405180910390f35b3480156108cf575f80fd5b506108ea60048036038101906108e59190614481565b611952565b005b3480156108f7575f80fd5b50610900611a40565b60405161090d91906143ba565b60405180910390f35b348015610921575f80fd5b5061092a611a65565b60405161093791906142f3565b60405180910390f35b34801561094b575f80fd5b50610954611a6b565b005b348015610961575f80fd5b5061097c6004803603810190610977919061416b565b611b1f565b005b348015610989575f80fd5b50610992611c0d565b005b34801561099f575f80fd5b506109a8611ce2565b6040516109b591906143ba565b60405180910390f35b3480156109c9575f80fd5b506109d2611d0a565b6040516109df91906143ba565b60405180910390f35b3480156109f3575f80fd5b50610a0e6004803603810190610a0991906144bf565b611d2f565b005b348015610a1b575f80fd5b50610a24611e5d565b604051610a3191906142f3565b60405180910390f35b348015610a45575f80fd5b50610a606004803603810190610a5b9190614523565b611e63565b005b348015610a6d575f80fd5b50610a886004803603810190610a839190614523565b611f16565b005b348015610a95575f80fd5b50610a9e611fc9565b604051610aab9190614220565b60405180910390f35b348015610abf575f80fd5b50610ada6004803603810190610ad59190614481565b612059565b005b348015610ae7575f80fd5b50610af061218b565b604051610afd91906142f3565b60405180910390f35b348015610b11575f80fd5b50610b1a612191565b604051610b2791906142f3565b60405180910390f35b348015610b3b575f80fd5b50610b44612197565b604051610b5191906142f3565b60405180910390f35b348015610b65575f80fd5b50610b806004803603810190610b7b91906144bf565b61219d565b005b348015610b8d575f80fd5b50610ba86004803603810190610ba39190614273565b6122cb565b604051610bb591906142cb565b60405180910390f35b348015610bc9575f80fd5b50610be46004803603810190610bdf9190614273565b612393565b604051610bf191906142cb565b60405180910390f35b348015610c05575f80fd5b50610c206004803603810190610c1b919061416b565b6123b0565b005b348015610c2d575f80fd5b50610c486004803603810190610c43919061416b565b612504565b604051610c5591906142cb565b60405180910390f35b348015610c69575f80fd5b50610c72612521565b005b348015610c7f575f80fd5b50610c9a6004803603810190610c95919061416b565b6125d3565b604051610ca791906142cb565b60405180910390f35b348015610cbb575f80fd5b50610cc46125f0565b604051610cd191906142cb565b60405180910390f35b348015610ce5575f80fd5b50610cee612603565b005b348015610cfb575f80fd5b50610d166004803603810190610d119190614481565b6126b6565b005b348015610d23575f80fd5b50610d2c6127f2565b604051610d3991906142f3565b60405180910390f35b348015610d4d575f80fd5b50610d566127f8565b604051610d6391906142cb565b60405180910390f35b348015610d77575f80fd5b50610d8061280b565b604051610d8d91906142f3565b60405180910390f35b348015610da1575f80fd5b50610dbc6004803603810190610db7919061454e565b612811565b604051610dc991906142f3565b60405180910390f35b348015610ddd575f80fd5b50610de6612893565b604051610df391906142f3565b60405180910390f35b348015610e07575f80fd5b50610e10612899565b604051610e1d91906142f3565b60405180910390f35b348015610e31575f80fd5b50610e4c6004803603810190610e47919061416b565b61289f565b005b348015610e59575f80fd5b50610e62612a61565b604051610e6f91906142f3565b60405180910390f35b348015610e83575f80fd5b50610e8c612a67565b604051610e9991906142f3565b60405180910390f35b348015610ead575f80fd5b50610ec86004803603810190610ec3919061416b565b612a6d565b005b610ed2612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f57906145d6565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f15e571905a1c816ac9ad091c2b82079da1ad3668d345e3894c424c5e5b47d97b60405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606003805461102d90614621565b80601f016020809104026020016040519081016040528092919081815260200182805461105990614621565b80156110a45780601f1061107b576101008083540402835291602001916110a4565b820191905f5260205f20905b81548152906001019060200180831161108757829003601f168201915b5050505050905090565b5f6110c16110ba612b5a565b8484612b61565b6001905092915050565b601a5481565b6110d9612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e906145d6565b60405180910390fd5b60018110156111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a2906146c1565b60405180910390fd5b6064816111b6611214565b6111c0919061470c565b6111ca919061477a565b60098190555050565b601c602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b611225612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa906145d6565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60185481565b611385612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140a906145d6565b60405180910390fd5b6001811015611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e906146c1565b60405180910390fd5b606481611462611214565b61146c919061470c565b611476919061477a565b600a8190555050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b60115481565b5f6114bc848484612d24565b611579846114c8612b5a565b611574856040518060600160405280602881526020016151ef6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61152b612b5a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134e49092919063ffffffff16565b612b61565b600190509392505050565b61dead81565b5f600b5f9054906101000a900460ff16905090565b5f6116436115ab612b5a565b8461163e8560015f6115bb612b5a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461354690919063ffffffff16565b612b61565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60019054906101000a900460ff1681565b600b60049054906101000a900460ff1681565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60125481565b600b60039054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61174f612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d4906145d6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f6118a3612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611931576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611928906145d6565b60405180910390fd5b5f600b60016101000a81548160ff0219169083151502179055506001905090565b61195a612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df906145d6565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b611a73612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af8906145d6565b60405180910390fd5b5f6018819055505f6017819055505f6019819055505f601a81905550565b611b27612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bac906145d6565b60405180910390fd5b6001601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b611c15612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9a906145d6565b60405180910390fd5b6001600b60026101000a81548160ff0219169083151502179055506001600b60036101000a81548160ff02191690831515021790555043600c81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d37612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc906145d6565b60405180910390fd5b83600e8190555082600f819055508160108190555080601181905550601154601054600f54600e54611df791906147aa565b611e0191906147aa565b611e0b91906147aa565b600d819055506046600d541115611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90614827565b60405180910390fd5b50505050565b60135481565b611e6b612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef0906145d6565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b611f1e612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa3906145d6565b60405180910390fd5b80600b60046101000a81548160ff02191690831515021790555050565b606060048054611fd890614621565b80601f016020809104026020016040519081016040528092919081815260200182805461200490614621565b801561204f5780601f106120265761010080835404028352916020019161204f565b820191905f5260205f20905b81548152906001019060200180831161203257829003601f168201915b5050505050905090565b612061612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e6906145d6565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361217d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612174906148b5565b60405180910390fd5b61218782826135a3565b5050565b60105481565b60195481565b60155481565b6121a5612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222a906145d6565b60405180910390fd5b8360138190555082601481905550816015819055508060168190555060165460155460145460135461226591906147aa565b61226f91906147aa565b61227991906147aa565b601281905550604660125411156122c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bc90614827565b60405180910390fd5b50505050565b5f6123896122d7612b5a565b84612384856040518060600160405280602581526020016152176025913960015f612300612b5a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134e49092919063ffffffff16565b612b61565b6001905092915050565b5f6123a661239f612b5a565b8484612d24565b6001905092915050565b6123b8612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243d906145d6565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d602052805f5260405f205f915054906101000a900460ff1681565b612529612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae906145d6565b60405180910390fd5b5f600b60056101000a81548160ff021916908315150217905550565b601e602052805f5260405f205f915054906101000a900460ff1681565b600b60029054906101000a900460ff1681565b61260b612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612699576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612690906145d6565b60405180910390fd5b6001600b60056101000a81548160ff021916908315150217905550565b6126be612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461274c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612743906145d6565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516127e691906142cb565b60405180910390a25050565b60095481565b600b60059054906101000a900460ff1681565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600c5481565b600f5481565b6128a7612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292c906145d6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299a90614943565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600a5481565b612a75612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afa906145d6565b60405180910390fd5b5f601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc6906149d1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3490614a5f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d1791906142f3565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8990614aed565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df790614b7b565b60405180910390fd5b600b60029054906101000a900460ff16612eef57601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612eaf5750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee590614be3565b60405180910390fd5b5b5f8103612f0657612f0183835f613641565b6134df565b600b60019054906101000a900460ff161561335157612f23611ce2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f915750612f61611ce2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fc957505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613003575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130a75750601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806130a55750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b80156130c05750600560149054906101000a900460ff16155b1561335057601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131625750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613209576009548111156131ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a390614c71565b60405180910390fd5b600a546131b883611702565b826131c391906147aa565b1115613204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131fb90614cd9565b60405180910390fd5b61334f565b601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156132a65750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156132f5576009548111156132f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e790614d67565b60405180910390fd5b61334e565b600a5461330183611702565b8261330c91906147aa565b111561334d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334490614cd9565b60405180910390fd5b5b5b5b5b5f61335b30611702565b90505f808211905080801561337c5750600b60039054906101000a900460ff165b80156133955750600560149054906101000a900460ff16155b80156133e85750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561343b5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561348e5750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156134d1576001600560146101000a81548160ff0219169083151502179055506134b66138ca565b5f600560146101000a81548160ff0219169083151502179055505b6134dc858585613641565b50505b505050565b5f83831115829061352b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135229190614220565b60405180910390fd5b505f83856135399190614d85565b9050809150509392505050565b5f80828461355491906147aa565b905083811015613599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359090614e02565b60405180910390fd5b8091505092915050565b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036136af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a690614aed565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361371d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371490614b7b565b60405180910390fd5b613728838383613c95565b613791816040518060600160405280602681526020016151c9602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134e49092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613820815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461354690919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138bd91906142f3565b60405180910390a3505050565b5f6138d430611702565b9050600b60049054906101000a900460ff1615613926575f8111156139205761391f3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613641565b5b50613c93565b5f601a5460195460175460185461393d91906147aa565b61394791906147aa565b61395191906147aa565b90505f8083148061396157505f82145b1561396e57505050613c93565b5f60028360185486613980919061470c565b61398a919061477a565b613994919061477a565b90505f6139aa8286613c9a90919063ffffffff16565b90505f4790506139b982613ce3565b5f6139cd8247613c9a90919063ffffffff16565b90505f6139f7876139e960175485613f1290919063ffffffff16565b613f8990919063ffffffff16565b90505f613a2188613a1360195486613f1290919063ffffffff16565b613f8990919063ffffffff16565b90505f613a4b89613a3d601a5487613f1290919063ffffffff16565b613f8990919063ffffffff16565b90505f81838587613a5c9190614d85565b613a669190614d85565b613a709190614d85565b90505f6018819055505f6017819055505f6019819055505f601a8190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613ad390614e4d565b5f6040518083038185875af1925050503d805f8114613b0d576040519150601f19603f3d011682016040523d82523d5f602084013e613b12565b606091505b50508099505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613b5d90614e4d565b5f6040518083038185875af1925050503d805f8114613b97576040519150601f19603f3d011682016040523d82523d5f602084013e613b9c565b606091505b5050809950505f88118015613bb057505f81115b15613bfd57613bbf8882613fd2565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601854604051613bf493929190614e61565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c4290614e4d565b5f6040518083038185875af1925050503d805f8114613c7c576040519150601f19603f3d011682016040523d82523d5f602084013e613c81565b606091505b50508099505050505050505050505050505b565b505050565b5f613cdb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134e4565b905092915050565b5f600267ffffffffffffffff811115613cff57613cfe614e96565b5b604051908082528060200260200182016040528015613d2d5781602001602082028036833780820191505090505b50905030815f81518110613d4457613d43614ec3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613de7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e0b9190614f04565b81600181518110613e1f57613e1e614ec3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e84307f000000000000000000000000000000000000000000000000000000000000000084612b61565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613ee595949392919061501f565b5f604051808303815f87803b158015613efc575f80fd5b505af1925050508015613f0d575060015b505050565b5f808303613f22575f9050613f83565b5f8284613f2f919061470c565b9050828482613f3e919061477a565b14613f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f75906150e7565b60405180910390fd5b809150505b92915050565b5f613fca83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140ac565b905092915050565b613ffd307f000000000000000000000000000000000000000000000000000000000000000084612b61565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b815260040161406396959493929190615105565b60606040518083038185885af19350505050801561409f57506040513d601f19601f8201168201806040525081019061409c9190615178565b60015b156140a8575050505b5050565b5f80831182906140f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140e99190614220565b60405180910390fd5b505f8385614100919061477a565b9050809150509392505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61413a82614111565b9050919050565b61414a81614130565b8114614154575f80fd5b50565b5f8135905061416581614141565b92915050565b5f602082840312156141805761417f61410d565b5b5f61418d84828501614157565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156141cd5780820151818401526020810190506141b2565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6141f282614196565b6141fc81856141a0565b935061420c8185602086016141b0565b614215816141d8565b840191505092915050565b5f6020820190508181035f83015261423881846141e8565b905092915050565b5f819050919050565b61425281614240565b811461425c575f80fd5b50565b5f8135905061426d81614249565b92915050565b5f80604083850312156142895761428861410d565b5b5f61429685828601614157565b92505060206142a78582860161425f565b9150509250929050565b5f8115159050919050565b6142c5816142b1565b82525050565b5f6020820190506142de5f8301846142bc565b92915050565b6142ed81614240565b82525050565b5f6020820190506143065f8301846142e4565b92915050565b5f602082840312156143215761432061410d565b5b5f61432e8482850161425f565b91505092915050565b5f819050919050565b5f61435a61435561435084614111565b614337565b614111565b9050919050565b5f61436b82614340565b9050919050565b5f61437c82614361565b9050919050565b61438c81614372565b82525050565b5f6020820190506143a55f830184614383565b92915050565b6143b481614130565b82525050565b5f6020820190506143cd5f8301846143ab565b92915050565b5f805f606084860312156143ea576143e961410d565b5b5f6143f786828701614157565b935050602061440886828701614157565b92505060406144198682870161425f565b9150509250925092565b5f60ff82169050919050565b61443881614423565b82525050565b5f6020820190506144515f83018461442f565b92915050565b614460816142b1565b811461446a575f80fd5b50565b5f8135905061447b81614457565b92915050565b5f80604083850312156144975761449661410d565b5b5f6144a485828601614157565b92505060206144b58582860161446d565b9150509250929050565b5f805f80608085870312156144d7576144d661410d565b5b5f6144e48782880161425f565b94505060206144f58782880161425f565b93505060406145068782880161425f565b92505060606145178782880161425f565b91505092959194509250565b5f602082840312156145385761453761410d565b5b5f6145458482850161446d565b91505092915050565b5f80604083850312156145645761456361410d565b5b5f61457185828601614157565b925050602061458285828601614157565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6145c06020836141a0565b91506145cb8261458c565b602082019050919050565b5f6020820190508181035f8301526145ed816145b4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061463857607f821691505b60208210810361464b5761464a6145f4565b5b50919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b5f6146ab602d836141a0565b91506146b682614651565b604082019050919050565b5f6020820190508181035f8301526146d88161469f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61471682614240565b915061472183614240565b925082820261472f81614240565b91508282048414831517614746576147456146df565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61478482614240565b915061478f83614240565b92508261479f5761479e61474d565b5b828204905092915050565b5f6147b482614240565b91506147bf83614240565b92508282019050808211156147d7576147d66146df565b5b92915050565b7f4d757374206b656570206665657320617420373025206f72206c6573730000005f82015250565b5f614811601d836141a0565b915061481c826147dd565b602082019050919050565b5f6020820190508181035f83015261483e81614805565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61489f6039836141a0565b91506148aa82614845565b604082019050919050565b5f6020820190508181035f8301526148cc81614893565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61492d6026836141a0565b9150614938826148d3565b604082019050919050565b5f6020820190508181035f83015261495a81614921565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6149bb6024836141a0565b91506149c682614961565b604082019050919050565b5f6020820190508181035f8301526149e8816149af565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a496022836141a0565b9150614a54826149ef565b604082019050919050565b5f6020820190508181035f830152614a7681614a3d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614ad76025836141a0565b9150614ae282614a7d565b604082019050919050565b5f6020820190508181035f830152614b0481614acb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614b656023836141a0565b9150614b7082614b0b565b604082019050919050565b5f6020820190508181035f830152614b9281614b59565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614bcd6016836141a0565b9150614bd882614b99565b602082019050919050565b5f6020820190508181035f830152614bfa81614bc1565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614c5b6035836141a0565b9150614c6682614c01565b604082019050919050565b5f6020820190508181035f830152614c8881614c4f565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614cc36013836141a0565b9150614cce82614c8f565b602082019050919050565b5f6020820190508181035f830152614cf081614cb7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614d516036836141a0565b9150614d5c82614cf7565b604082019050919050565b5f6020820190508181035f830152614d7e81614d45565b9050919050565b5f614d8f82614240565b9150614d9a83614240565b9250828203905081811115614db257614db16146df565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614dec601b836141a0565b9150614df782614db8565b602082019050919050565b5f6020820190508181035f830152614e1981614de0565b9050919050565b5f81905092915050565b50565b5f614e385f83614e20565b9150614e4382614e2a565b5f82019050919050565b5f614e5782614e2d565b9150819050919050565b5f606082019050614e745f8301866142e4565b614e8160208301856142e4565b614e8e60408301846142e4565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614efe81614141565b92915050565b5f60208284031215614f1957614f1861410d565b5b5f614f2684828501614ef0565b91505092915050565b5f819050919050565b5f614f52614f4d614f4884614f2f565b614337565b614240565b9050919050565b614f6281614f38565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614f9a81614130565b82525050565b5f614fab8383614f91565b60208301905092915050565b5f602082019050919050565b5f614fcd82614f68565b614fd78185614f72565b9350614fe283614f82565b805f5b83811015615012578151614ff98882614fa0565b975061500483614fb7565b925050600181019050614fe5565b5085935050505092915050565b5f60a0820190506150325f8301886142e4565b61503f6020830187614f59565b81810360408301526150518186614fc3565b905061506060608301856143ab565b61506d60808301846142e4565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6150d16021836141a0565b91506150dc82615077565b604082019050919050565b5f6020820190508181035f8301526150fe816150c5565b9050919050565b5f60c0820190506151185f8301896143ab565b61512560208301886142e4565b6151326040830187614f59565b61513f6060830186614f59565b61514c60808301856143ab565b61515960a08301846142e4565b979650505050505050565b5f8151905061517281614249565b92915050565b5f805f6060848603121561518f5761518e61410d565b5b5f61519c86828701615164565b93505060206151ad86828701615164565b92505060406151be86828701615164565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202ee6e4e03e79010b670959d90ae59d2a0e4a1077ff4dbdaf37a9927146f520e864736f6c63430008140033

Deployed Bytecode

0x6080604052600436106103d1575f3560e01c806387b85804116101fc578063aacebbe311610117578063d79270ef116100aa578063f11a24d311610079578063f11a24d314610dfc578063f2fde38b14610e26578063f637434214610e4e578063f8b45b0514610e78578063fced320a14610ea2576103d8565b8063d79270ef14610d42578063d85ba06314610d6c578063dd62ed3e14610d96578063ee40166e14610dd2576103d8565b8063bbc0c742116100e6578063bbc0c74214610cb0578063bf1de3e614610cda578063c024666814610cf0578063c8c8ebe414610d18576103d8565b8063aacebbe314610bfa578063abb8105214610c22578063ae13513514610c5e578063b62496f514610c74576103d8565b806395d89b411161018f578063a0d82dc51161015e578063a0d82dc514610b30578063a1d11b8514610b5a578063a457c2d714610b82578063a9059cbb14610bbe576103d8565b806395d89b4114610a8a5780639a7a23d614610ab45780639c3b4fdc14610adc5780639fccce3214610b06576103d8565b8063917c978e116101cb578063917c978e146109e85780639213691314610a10578063924de9b714610a3a578063955b225b14610a62576103d8565b806387b85804146109565780638a8c523c1461097e5780638da5cb5b146109945780638ea5220f146109be576103d8565b806327c8f835116102ec5780636ddd17131161027f5780637571336a1161024e5780637571336a146108c457806375f0a874146108ec5780637bce5a04146109165780637dd72e8d14610940576103d8565b80636ddd17131461081e57806370a0823114610848578063715018a614610884578063751039fc1461089a576103d8565b80634a62bb65116102bb5780634a62bb65146107645780634c24c51d1461078e5780634fbee193146107b85780636a486a8e146107f4576103d8565b806327c8f835146106aa578063313ce567146106d457806339509351146106fe57806349bd5a5e1461073a576103d8565b80631816467f116103645780631cd348c0116103335780631cd348c0146105f05780631f3fed8f1461061a5780631fe70a981461064457806323b872dd1461066e576103d8565b80631816467f1461054c5780631a221dbb146105745780631a8145bb1461059e5780631c499ab0146105c8576103d8565b8063106b5da1116103a0578063106b5da11461049457806310d5de53146104bc5780631694505e146104f857806318160ddd14610522576103d8565b806306e7b14d146103dc57806306fdde0314610404578063095ea7b31461042e5780630b166d501461046a576103d8565b366103d857005b5f80fd5b3480156103e7575f80fd5b5061040260048036038101906103fd919061416b565b610eca565b005b34801561040f575f80fd5b5061041861101e565b6040516104259190614220565b60405180910390f35b348015610439575f80fd5b50610454600480360381019061044f9190614273565b6110ae565b60405161046191906142cb565b60405180910390f35b348015610475575f80fd5b5061047e6110cb565b60405161048b91906142f3565b60405180910390f35b34801561049f575f80fd5b506104ba60048036038101906104b5919061430c565b6110d1565b005b3480156104c7575f80fd5b506104e260048036038101906104dd919061416b565b6111d3565b6040516104ef91906142cb565b60405180910390f35b348015610503575f80fd5b5061050c6111f0565b6040516105199190614392565b60405180910390f35b34801561052d575f80fd5b50610536611214565b60405161054391906142f3565b60405180910390f35b348015610557575f80fd5b50610572600480360381019061056d919061416b565b61121d565b005b34801561057f575f80fd5b50610588611371565b60405161059591906142f3565b60405180910390f35b3480156105a9575f80fd5b506105b2611377565b6040516105bf91906142f3565b60405180910390f35b3480156105d3575f80fd5b506105ee60048036038101906105e9919061430c565b61137d565b005b3480156105fb575f80fd5b5061060461147f565b60405161061191906143ba565b60405180910390f35b348015610625575f80fd5b5061062e6114a4565b60405161063b91906142f3565b60405180910390f35b34801561064f575f80fd5b506106586114aa565b60405161066591906142f3565b60405180910390f35b348015610679575f80fd5b50610694600480360381019061068f91906143d3565b6114b0565b6040516106a191906142cb565b60405180910390f35b3480156106b5575f80fd5b506106be611584565b6040516106cb91906143ba565b60405180910390f35b3480156106df575f80fd5b506106e861158a565b6040516106f5919061443e565b60405180910390f35b348015610709575f80fd5b50610724600480360381019061071f9190614273565b61159f565b60405161073191906142cb565b60405180910390f35b348015610745575f80fd5b5061074e61164d565b60405161075b91906143ba565b60405180910390f35b34801561076f575f80fd5b50610778611671565b60405161078591906142cb565b60405180910390f35b348015610799575f80fd5b506107a2611684565b6040516107af91906142cb565b60405180910390f35b3480156107c3575f80fd5b506107de60048036038101906107d9919061416b565b611697565b6040516107eb91906142cb565b60405180910390f35b3480156107ff575f80fd5b506108086116e9565b60405161081591906142f3565b60405180910390f35b348015610829575f80fd5b506108326116ef565b60405161083f91906142cb565b60405180910390f35b348015610853575f80fd5b5061086e6004803603810190610869919061416b565b611702565b60405161087b91906142f3565b60405180910390f35b34801561088f575f80fd5b50610898611747565b005b3480156108a5575f80fd5b506108ae61189a565b6040516108bb91906142cb565b60405180910390f35b3480156108cf575f80fd5b506108ea60048036038101906108e59190614481565b611952565b005b3480156108f7575f80fd5b50610900611a40565b60405161090d91906143ba565b60405180910390f35b348015610921575f80fd5b5061092a611a65565b60405161093791906142f3565b60405180910390f35b34801561094b575f80fd5b50610954611a6b565b005b348015610961575f80fd5b5061097c6004803603810190610977919061416b565b611b1f565b005b348015610989575f80fd5b50610992611c0d565b005b34801561099f575f80fd5b506109a8611ce2565b6040516109b591906143ba565b60405180910390f35b3480156109c9575f80fd5b506109d2611d0a565b6040516109df91906143ba565b60405180910390f35b3480156109f3575f80fd5b50610a0e6004803603810190610a0991906144bf565b611d2f565b005b348015610a1b575f80fd5b50610a24611e5d565b604051610a3191906142f3565b60405180910390f35b348015610a45575f80fd5b50610a606004803603810190610a5b9190614523565b611e63565b005b348015610a6d575f80fd5b50610a886004803603810190610a839190614523565b611f16565b005b348015610a95575f80fd5b50610a9e611fc9565b604051610aab9190614220565b60405180910390f35b348015610abf575f80fd5b50610ada6004803603810190610ad59190614481565b612059565b005b348015610ae7575f80fd5b50610af061218b565b604051610afd91906142f3565b60405180910390f35b348015610b11575f80fd5b50610b1a612191565b604051610b2791906142f3565b60405180910390f35b348015610b3b575f80fd5b50610b44612197565b604051610b5191906142f3565b60405180910390f35b348015610b65575f80fd5b50610b806004803603810190610b7b91906144bf565b61219d565b005b348015610b8d575f80fd5b50610ba86004803603810190610ba39190614273565b6122cb565b604051610bb591906142cb565b60405180910390f35b348015610bc9575f80fd5b50610be46004803603810190610bdf9190614273565b612393565b604051610bf191906142cb565b60405180910390f35b348015610c05575f80fd5b50610c206004803603810190610c1b919061416b565b6123b0565b005b348015610c2d575f80fd5b50610c486004803603810190610c43919061416b565b612504565b604051610c5591906142cb565b60405180910390f35b348015610c69575f80fd5b50610c72612521565b005b348015610c7f575f80fd5b50610c9a6004803603810190610c95919061416b565b6125d3565b604051610ca791906142cb565b60405180910390f35b348015610cbb575f80fd5b50610cc46125f0565b604051610cd191906142cb565b60405180910390f35b348015610ce5575f80fd5b50610cee612603565b005b348015610cfb575f80fd5b50610d166004803603810190610d119190614481565b6126b6565b005b348015610d23575f80fd5b50610d2c6127f2565b604051610d3991906142f3565b60405180910390f35b348015610d4d575f80fd5b50610d566127f8565b604051610d6391906142cb565b60405180910390f35b348015610d77575f80fd5b50610d8061280b565b604051610d8d91906142f3565b60405180910390f35b348015610da1575f80fd5b50610dbc6004803603810190610db7919061454e565b612811565b604051610dc991906142f3565b60405180910390f35b348015610ddd575f80fd5b50610de6612893565b604051610df391906142f3565b60405180910390f35b348015610e07575f80fd5b50610e10612899565b604051610e1d91906142f3565b60405180910390f35b348015610e31575f80fd5b50610e4c6004803603810190610e47919061416b565b61289f565b005b348015610e59575f80fd5b50610e62612a61565b604051610e6f91906142f3565b60405180910390f35b348015610e83575f80fd5b50610e8c612a67565b604051610e9991906142f3565b60405180910390f35b348015610ead575f80fd5b50610ec86004803603810190610ec3919061416b565b612a6d565b005b610ed2612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f57906145d6565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f15e571905a1c816ac9ad091c2b82079da1ad3668d345e3894c424c5e5b47d97b60405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606003805461102d90614621565b80601f016020809104026020016040519081016040528092919081815260200182805461105990614621565b80156110a45780601f1061107b576101008083540402835291602001916110a4565b820191905f5260205f20905b81548152906001019060200180831161108757829003601f168201915b5050505050905090565b5f6110c16110ba612b5a565b8484612b61565b6001905092915050565b601a5481565b6110d9612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e906145d6565b60405180910390fd5b60018110156111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a2906146c1565b60405180910390fd5b6064816111b6611214565b6111c0919061470c565b6111ca919061477a565b60098190555050565b601c602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b611225612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa906145d6565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60185481565b611385612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140a906145d6565b60405180910390fd5b6001811015611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e906146c1565b60405180910390fd5b606481611462611214565b61146c919061470c565b611476919061477a565b600a8190555050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b60115481565b5f6114bc848484612d24565b611579846114c8612b5a565b611574856040518060600160405280602881526020016151ef6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61152b612b5a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134e49092919063ffffffff16565b612b61565b600190509392505050565b61dead81565b5f600b5f9054906101000a900460ff16905090565b5f6116436115ab612b5a565b8461163e8560015f6115bb612b5a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461354690919063ffffffff16565b612b61565b6001905092915050565b7f000000000000000000000000eaf057779d1d6f66eab025a0f63e7d702c8bf1bf81565b600b60019054906101000a900460ff1681565b600b60049054906101000a900460ff1681565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60125481565b600b60039054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61174f612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d4906145d6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f6118a3612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611931576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611928906145d6565b60405180910390fd5b5f600b60016101000a81548160ff0219169083151502179055506001905090565b61195a612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df906145d6565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b611a73612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af8906145d6565b60405180910390fd5b5f6018819055505f6017819055505f6019819055505f601a81905550565b611b27612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bac906145d6565b60405180910390fd5b6001601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b611c15612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9a906145d6565b60405180910390fd5b6001600b60026101000a81548160ff0219169083151502179055506001600b60036101000a81548160ff02191690831515021790555043600c81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d37612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc906145d6565b60405180910390fd5b83600e8190555082600f819055508160108190555080601181905550601154601054600f54600e54611df791906147aa565b611e0191906147aa565b611e0b91906147aa565b600d819055506046600d541115611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90614827565b60405180910390fd5b50505050565b60135481565b611e6b612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef0906145d6565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b611f1e612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa3906145d6565b60405180910390fd5b80600b60046101000a81548160ff02191690831515021790555050565b606060048054611fd890614621565b80601f016020809104026020016040519081016040528092919081815260200182805461200490614621565b801561204f5780601f106120265761010080835404028352916020019161204f565b820191905f5260205f20905b81548152906001019060200180831161203257829003601f168201915b5050505050905090565b612061612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e6906145d6565b60405180910390fd5b7f000000000000000000000000eaf057779d1d6f66eab025a0f63e7d702c8bf1bf73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361217d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612174906148b5565b60405180910390fd5b61218782826135a3565b5050565b60105481565b60195481565b60155481565b6121a5612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222a906145d6565b60405180910390fd5b8360138190555082601481905550816015819055508060168190555060165460155460145460135461226591906147aa565b61226f91906147aa565b61227991906147aa565b601281905550604660125411156122c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bc90614827565b60405180910390fd5b50505050565b5f6123896122d7612b5a565b84612384856040518060600160405280602581526020016152176025913960015f612300612b5a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134e49092919063ffffffff16565b612b61565b6001905092915050565b5f6123a661239f612b5a565b8484612d24565b6001905092915050565b6123b8612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243d906145d6565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d602052805f5260405f205f915054906101000a900460ff1681565b612529612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae906145d6565b60405180910390fd5b5f600b60056101000a81548160ff021916908315150217905550565b601e602052805f5260405f205f915054906101000a900460ff1681565b600b60029054906101000a900460ff1681565b61260b612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612699576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612690906145d6565b60405180910390fd5b6001600b60056101000a81548160ff021916908315150217905550565b6126be612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461274c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612743906145d6565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516127e691906142cb565b60405180910390a25050565b60095481565b600b60059054906101000a900460ff1681565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600c5481565b600f5481565b6128a7612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292c906145d6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299a90614943565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600a5481565b612a75612b5a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afa906145d6565b60405180910390fd5b5f601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc6906149d1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3490614a5f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d1791906142f3565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8990614aed565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df790614b7b565b60405180910390fd5b600b60029054906101000a900460ff16612eef57601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612eaf5750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee590614be3565b60405180910390fd5b5b5f8103612f0657612f0183835f613641565b6134df565b600b60019054906101000a900460ff161561335157612f23611ce2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f915750612f61611ce2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fc957505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613003575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130a75750601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806130a55750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b80156130c05750600560149054906101000a900460ff16155b1561335057601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131625750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613209576009548111156131ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a390614c71565b60405180910390fd5b600a546131b883611702565b826131c391906147aa565b1115613204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131fb90614cd9565b60405180910390fd5b61334f565b601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156132a65750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156132f5576009548111156132f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e790614d67565b60405180910390fd5b61334e565b600a5461330183611702565b8261330c91906147aa565b111561334d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334490614cd9565b60405180910390fd5b5b5b5b5b5f61335b30611702565b90505f808211905080801561337c5750600b60039054906101000a900460ff165b80156133955750600560149054906101000a900460ff16155b80156133e85750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561343b5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561348e5750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156134d1576001600560146101000a81548160ff0219169083151502179055506134b66138ca565b5f600560146101000a81548160ff0219169083151502179055505b6134dc858585613641565b50505b505050565b5f83831115829061352b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135229190614220565b60405180910390fd5b505f83856135399190614d85565b9050809150509392505050565b5f80828461355491906147aa565b905083811015613599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359090614e02565b60405180910390fd5b8091505092915050565b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036136af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a690614aed565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361371d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371490614b7b565b60405180910390fd5b613728838383613c95565b613791816040518060600160405280602681526020016151c9602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134e49092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613820815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461354690919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138bd91906142f3565b60405180910390a3505050565b5f6138d430611702565b9050600b60049054906101000a900460ff1615613926575f8111156139205761391f3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613641565b5b50613c93565b5f601a5460195460175460185461393d91906147aa565b61394791906147aa565b61395191906147aa565b90505f8083148061396157505f82145b1561396e57505050613c93565b5f60028360185486613980919061470c565b61398a919061477a565b613994919061477a565b90505f6139aa8286613c9a90919063ffffffff16565b90505f4790506139b982613ce3565b5f6139cd8247613c9a90919063ffffffff16565b90505f6139f7876139e960175485613f1290919063ffffffff16565b613f8990919063ffffffff16565b90505f613a2188613a1360195486613f1290919063ffffffff16565b613f8990919063ffffffff16565b90505f613a4b89613a3d601a5487613f1290919063ffffffff16565b613f8990919063ffffffff16565b90505f81838587613a5c9190614d85565b613a669190614d85565b613a709190614d85565b90505f6018819055505f6017819055505f6019819055505f601a8190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613ad390614e4d565b5f6040518083038185875af1925050503d805f8114613b0d576040519150601f19603f3d011682016040523d82523d5f602084013e613b12565b606091505b50508099505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613b5d90614e4d565b5f6040518083038185875af1925050503d805f8114613b97576040519150601f19603f3d011682016040523d82523d5f602084013e613b9c565b606091505b5050809950505f88118015613bb057505f81115b15613bfd57613bbf8882613fd2565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601854604051613bf493929190614e61565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c4290614e4d565b5f6040518083038185875af1925050503d805f8114613c7c576040519150601f19603f3d011682016040523d82523d5f602084013e613c81565b606091505b50508099505050505050505050505050505b565b505050565b5f613cdb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134e4565b905092915050565b5f600267ffffffffffffffff811115613cff57613cfe614e96565b5b604051908082528060200260200182016040528015613d2d5781602001602082028036833780820191505090505b50905030815f81518110613d4457613d43614ec3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613de7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e0b9190614f04565b81600181518110613e1f57613e1e614ec3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e84307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612b61565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613ee595949392919061501f565b5f604051808303815f87803b158015613efc575f80fd5b505af1925050508015613f0d575060015b505050565b5f808303613f22575f9050613f83565b5f8284613f2f919061470c565b9050828482613f3e919061477a565b14613f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f75906150e7565b60405180910390fd5b809150505b92915050565b5f613fca83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140ac565b905092915050565b613ffd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612b61565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b815260040161406396959493929190615105565b60606040518083038185885af19350505050801561409f57506040513d601f19601f8201168201806040525081019061409c9190615178565b60015b156140a8575050505b5050565b5f80831182906140f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140e99190614220565b60405180910390fd5b505f8385614100919061477a565b9050809150509392505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61413a82614111565b9050919050565b61414a81614130565b8114614154575f80fd5b50565b5f8135905061416581614141565b92915050565b5f602082840312156141805761417f61410d565b5b5f61418d84828501614157565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156141cd5780820151818401526020810190506141b2565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6141f282614196565b6141fc81856141a0565b935061420c8185602086016141b0565b614215816141d8565b840191505092915050565b5f6020820190508181035f83015261423881846141e8565b905092915050565b5f819050919050565b61425281614240565b811461425c575f80fd5b50565b5f8135905061426d81614249565b92915050565b5f80604083850312156142895761428861410d565b5b5f61429685828601614157565b92505060206142a78582860161425f565b9150509250929050565b5f8115159050919050565b6142c5816142b1565b82525050565b5f6020820190506142de5f8301846142bc565b92915050565b6142ed81614240565b82525050565b5f6020820190506143065f8301846142e4565b92915050565b5f602082840312156143215761432061410d565b5b5f61432e8482850161425f565b91505092915050565b5f819050919050565b5f61435a61435561435084614111565b614337565b614111565b9050919050565b5f61436b82614340565b9050919050565b5f61437c82614361565b9050919050565b61438c81614372565b82525050565b5f6020820190506143a55f830184614383565b92915050565b6143b481614130565b82525050565b5f6020820190506143cd5f8301846143ab565b92915050565b5f805f606084860312156143ea576143e961410d565b5b5f6143f786828701614157565b935050602061440886828701614157565b92505060406144198682870161425f565b9150509250925092565b5f60ff82169050919050565b61443881614423565b82525050565b5f6020820190506144515f83018461442f565b92915050565b614460816142b1565b811461446a575f80fd5b50565b5f8135905061447b81614457565b92915050565b5f80604083850312156144975761449661410d565b5b5f6144a485828601614157565b92505060206144b58582860161446d565b9150509250929050565b5f805f80608085870312156144d7576144d661410d565b5b5f6144e48782880161425f565b94505060206144f58782880161425f565b93505060406145068782880161425f565b92505060606145178782880161425f565b91505092959194509250565b5f602082840312156145385761453761410d565b5b5f6145458482850161446d565b91505092915050565b5f80604083850312156145645761456361410d565b5b5f61457185828601614157565b925050602061458285828601614157565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6145c06020836141a0565b91506145cb8261458c565b602082019050919050565b5f6020820190508181035f8301526145ed816145b4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061463857607f821691505b60208210810361464b5761464a6145f4565b5b50919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b5f6146ab602d836141a0565b91506146b682614651565b604082019050919050565b5f6020820190508181035f8301526146d88161469f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61471682614240565b915061472183614240565b925082820261472f81614240565b91508282048414831517614746576147456146df565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61478482614240565b915061478f83614240565b92508261479f5761479e61474d565b5b828204905092915050565b5f6147b482614240565b91506147bf83614240565b92508282019050808211156147d7576147d66146df565b5b92915050565b7f4d757374206b656570206665657320617420373025206f72206c6573730000005f82015250565b5f614811601d836141a0565b915061481c826147dd565b602082019050919050565b5f6020820190508181035f83015261483e81614805565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61489f6039836141a0565b91506148aa82614845565b604082019050919050565b5f6020820190508181035f8301526148cc81614893565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61492d6026836141a0565b9150614938826148d3565b604082019050919050565b5f6020820190508181035f83015261495a81614921565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6149bb6024836141a0565b91506149c682614961565b604082019050919050565b5f6020820190508181035f8301526149e8816149af565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a496022836141a0565b9150614a54826149ef565b604082019050919050565b5f6020820190508181035f830152614a7681614a3d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614ad76025836141a0565b9150614ae282614a7d565b604082019050919050565b5f6020820190508181035f830152614b0481614acb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614b656023836141a0565b9150614b7082614b0b565b604082019050919050565b5f6020820190508181035f830152614b9281614b59565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614bcd6016836141a0565b9150614bd882614b99565b602082019050919050565b5f6020820190508181035f830152614bfa81614bc1565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614c5b6035836141a0565b9150614c6682614c01565b604082019050919050565b5f6020820190508181035f830152614c8881614c4f565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614cc36013836141a0565b9150614cce82614c8f565b602082019050919050565b5f6020820190508181035f830152614cf081614cb7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614d516036836141a0565b9150614d5c82614cf7565b604082019050919050565b5f6020820190508181035f830152614d7e81614d45565b9050919050565b5f614d8f82614240565b9150614d9a83614240565b9250828203905081811115614db257614db16146df565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614dec601b836141a0565b9150614df782614db8565b602082019050919050565b5f6020820190508181035f830152614e1981614de0565b9050919050565b5f81905092915050565b50565b5f614e385f83614e20565b9150614e4382614e2a565b5f82019050919050565b5f614e5782614e2d565b9150819050919050565b5f606082019050614e745f8301866142e4565b614e8160208301856142e4565b614e8e60408301846142e4565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614efe81614141565b92915050565b5f60208284031215614f1957614f1861410d565b5b5f614f2684828501614ef0565b91505092915050565b5f819050919050565b5f614f52614f4d614f4884614f2f565b614337565b614240565b9050919050565b614f6281614f38565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614f9a81614130565b82525050565b5f614fab8383614f91565b60208301905092915050565b5f602082019050919050565b5f614fcd82614f68565b614fd78185614f72565b9350614fe283614f82565b805f5b83811015615012578151614ff98882614fa0565b975061500483614fb7565b925050600181019050614fe5565b5085935050505092915050565b5f60a0820190506150325f8301886142e4565b61503f6020830187614f59565b81810360408301526150518186614fc3565b905061506060608301856143ab565b61506d60808301846142e4565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6150d16021836141a0565b91506150dc82615077565b604082019050919050565b5f6020820190508181035f8301526150fe816150c5565b9050919050565b5f60c0820190506151185f8301896143ab565b61512560208301886142e4565b6151326040830187614f59565b61513f6060830186614f59565b61514c60808301856143ab565b61515960a08301846142e4565b979650505050505050565b5f8151905061517281614249565b92915050565b5f805f6060848603121561518f5761518e61410d565b5b5f61519c86828701615164565b93505060206151ad86828701615164565b92505060406151be86828701615164565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202ee6e4e03e79010b670959d90ae59d2a0e4a1077ff4dbdaf37a9927146f520e864736f6c63430008140033

Deployed Bytecode Sourcemap

30868:15609:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39703:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7996:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10229:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32076:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36303:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32256:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30964:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9116:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39538:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31924:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32002:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36574:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31227:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31962:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31744:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10905:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31067:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37013:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11768:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31022:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31369:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31487:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39884:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31781:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31449:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9287:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23046:148;;;;;;;;;;;;;:::i;:::-;;36174:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36836:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31159:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31639;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44069:175;;;;;;;;;;;;;:::i;:::-;;40130:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35775:156;;;;;;;;;;;;;:::i;:::-;;22404:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31196:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37488:537;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31816:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37201:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37382:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8215:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38794:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31713:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32042:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31892:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38049:547;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12564:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9643:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39306:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32326:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36035:87;;;;;;;;;;;;;:::i;:::-;;32522:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31409:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35939:88;;;;;;;;;;;;;:::i;:::-;;38604:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31264:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31524:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31605:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9906:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31563:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31676:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23349:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31854:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31306:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40020:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39703:173;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39818:13:::1;;;;;;;;;;;39786:46;;39807:9;39786:46;;;;;;;;;;;;39859:9;39843:13;;:25;;;;;;;;;;;;;;;;;;39703:173:::0;:::o;7996:100::-;8050:13;8083:5;8076:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7996:100;:::o;10229:194::-;10337:4;10354:39;10363:12;:10;:12::i;:::-;10377:7;10386:6;10354:8;:39::i;:::-;10411:4;10404:11;;10229:194;;;;:::o;32076:31::-;;;;:::o;36303:263::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36414:1:::1;36400:10;:15;;36378:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;36554:3;36540:10;36524:13;:11;:13::i;:::-;:26;;;;:::i;:::-;36523:34;;;;:::i;:::-;36499:20;:59;;;;36303:263:::0;:::o;32256:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;30964:51::-;;;:::o;9116:108::-;9177:7;9204:12;;9197:19;;9116:108;:::o;39538:157::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39645:9:::1;;;;;;;;;;;39617:38;;39634:9;39617:38;;;;;;;;;;;;39678:9;39666;;:21;;;;;;;;;;;;;;;;;;39538:157:::0;:::o;31924:29::-;;;;:::o;32002:33::-;;;;:::o;36574:254::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36685:1:::1;36671:10;:15;;36649:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;36816:3;36802:10;36786:13;:11;:13::i;:::-;:26;;;;:::i;:::-;36785:34;;;;:::i;:::-;36772:9;:48;;;;36574:254:::0;:::o;31227:28::-;;;;;;;;;;;;;:::o;31962:33::-;;;;:::o;31744:28::-;;;;:::o;10905:454::-;11045:4;11062:36;11072:6;11080:9;11091:6;11062:9;:36::i;:::-;11109:220;11132:6;11153:12;:10;:12::i;:::-;11180:138;11236:6;11180:138;;;;;;;;;;;;;;;;;:11;:19;11192:6;11180:19;;;;;;;;;;;;;;;:33;11200:12;:10;:12::i;:::-;11180:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;11109:8;:220::i;:::-;11347:4;11340:11;;10905:454;;;;;:::o;31067:53::-;31113:6;31067:53;:::o;37013:92::-;37063:5;37088:9;;;;;;;;;;;37081:16;;37013:92;:::o;11768:293::-;11881:4;11898:133;11921:12;:10;:12::i;:::-;11948:7;11970:50;12009:10;11970:11;:25;11982:12;:10;:12::i;:::-;11970:25;;;;;;;;;;;;;;;:34;11996:7;11970:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11898:8;:133::i;:::-;12049:4;12042:11;;11768:293;;;;:::o;31022:38::-;;;:::o;31369:33::-;;;;;;;;;;;;;:::o;31487:30::-;;;;;;;;;;;;;:::o;39884:128::-;39952:4;39976:19;:28;39996:7;39976:28;;;;;;;;;;;;;;;;;;;;;;;;;39969:35;;39884:128;;;:::o;31781:28::-;;;;:::o;31449:31::-;;;;;;;;;;;;;:::o;9287:143::-;9377:7;9404:9;:18;9414:7;9404:18;;;;;;;;;;;;;;;;9397:25;;9287:143;;;:::o;23046:148::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23153:1:::1;23116:40;;23137:6;;;;;;;;;;;23116:40;;;;;;;;;;;;23184:1;23167:6;;:19;;;;;;;;;;;;;;;;;;23046:148::o:0;36174:121::-;36226:4;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36260:5:::1;36243:14;;:22;;;;;;;;;;;;;;;;;;36283:4;36276:11;;36174:121:::0;:::o;36836:169::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36993:4:::1;36951:31;:39;36983:6;36951:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36836:169:::0;;:::o;31159:30::-;;;;;;;;;;;;;:::o;31639:::-;;;;:::o;44069:175::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44144:1:::1;44123:18;:22;;;;44177:1;44156:18;:22;;;;44204:1;44189:12;:16;;;;44235:1;44216:16;:20;;;;44069:175::o:0;40130:99::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40217:4:::1;40199:6;:15;40206:7;40199:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;40130:99:::0;:::o;35775:156::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35846:4:::1;35830:13;;:20;;;;;;;;;;;;;;;;;;35875:4;35861:11;;:18;;;;;;;;;;;;;;;;;;35911:12;35890:18;:33;;;;35775:156::o:0;22404:79::-;22442:7;22469:6;;;;;;;;;;;22462:13;;22404:79;:::o;31196:24::-;;;;;;;;;;;;;:::o;37488:537::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37684:13:::1;37666:15;:31;;;;37726:13;37708:15;:31;;;;37762:7;37750:9;:19;;;;37796:11;37780:13;:27;;;;37933:13;;37908:9;;37877:15;;37846;;:46;;;;:::i;:::-;:71;;;;:::i;:::-;:100;;;;:::i;:::-;37818:12;:128;;;;37981:2;37965:12;;:18;;37957:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37488:537:::0;;;;:::o;31816:31::-;;;;:::o;37201:100::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37286:7:::1;37272:11;;:21;;;;;;;;;;;;;;;;;;37201:100:::0;:::o;37382:98::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37465:7:::1;37452:10;;:20;;;;;;;;;;;;;;;;;;37382:98:::0;:::o;8215:104::-;8271:13;8304:7;8297:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8215:104;:::o;38794:308::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38942:13:::1;38934:21;;:4;:21;;::::0;38912:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39053:41;39082:4;39088:5;39053:28;:41::i;:::-;38794:308:::0;;:::o;31713:24::-;;;;:::o;32042:27::-;;;;:::o;31892:25::-;;;;:::o;38049:547::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38246:13:::1;38227:16;:32;;;;38289:13;38270:16;:32;;;;38326:7;38313:10;:20;;;;38361:11;38344:14;:28;;;;38502:14;;38476:10;;38444:16;;38412;;:48;;;;:::i;:::-;:74;;;;:::i;:::-;:104;;;;:::i;:::-;38383:13;:133;;;;38552:2;38535:13;;:19;;38527:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38049:547:::0;;;;:::o;12564:393::-;12682:4;12699:228;12722:12;:10;:12::i;:::-;12749:7;12771:145;12828:15;12771:145;;;;;;;;;;;;;;;;;:11;:25;12783:12;:10;:12::i;:::-;12771:25;;;;;;;;;;;;;;;:34;12797:7;12771:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;12699:8;:228::i;:::-;12945:4;12938:11;;12564:393;;;;:::o;9643:200::-;9754:4;9771:42;9781:12;:10;:12::i;:::-;9795:9;9806:6;9771:9;:42::i;:::-;9831:4;9824:11;;9643:200;;;;:::o;39306:224::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39459:15:::1;;;;;;;;;;;39416:59;;39439:18;39416:59;;;;;;;;;;;;39504:18;39486:15;;:36;;;;;;;;;;;;;;;;;;39306:224:::0;:::o;32326:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;36035:87::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36109:5:::1;36093:13;;:21;;;;;;;;;;;;;;;;;;36035:87::o:0;32522:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;31409:33::-;;;;;;;;;;;;;:::o;35939:88::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36015:4:::1;35999:13;;:20;;;;;;;;;;;;;;;;;;35939:88::o:0;38604:182::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38720:8:::1;38689:19;:28;38709:7;38689:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38760:7;38744:34;;;38769:8;38744:34;;;;;;:::i;:::-;;;;;;;;38604:182:::0;;:::o;31264:35::-;;;;:::o;31524:32::-;;;;;;;;;;;;;:::o;31605:27::-;;;;:::o;9906:176::-;10020:7;10047:11;:18;10059:5;10047:18;;;;;;;;;;;;;;;:27;10066:7;10047:27;;;;;;;;;;;;;;;;10040:34;;9906:176;;;;:::o;31563:33::-;;;;:::o;31676:30::-;;;;:::o;23349:281::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23472:1:::1;23452:22;;:8;:22;;::::0;23430:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23585:8;23556:38;;23577:6;;;;;;;;;;;23556:38;;;;;;;;;;;;23614:8;23605:6;;:17;;;;;;;;;;;;;;;;;;23349:281:::0;:::o;31854:31::-;;;;:::o;31306:24::-;;;;:::o;40020:102::-;22626:12;:10;:12::i;:::-;22616:22;;:6;;;;;;;;;;;:22;;;22608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40109:5:::1;40091:6;:15;40098:7;40091:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;40020:102:::0;:::o;167:98::-;220:7;247:10;240:17;;167:98;:::o;15948:380::-;16101:1;16084:19;;:5;:19;;;16076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16182:1;16163:21;;:7;:21;;;16155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16266:6;16236:11;:18;16248:5;16236:18;;;;;;;;;;;;;;;:27;16255:7;16236:27;;;;;;;;;;;;;;;:36;;;;16304:7;16288:32;;16297:5;16288:32;;;16313:6;16288:32;;;;;;:::i;:::-;;;;;;;;15948:380;;;:::o;40237:2576::-;40385:1;40369:18;;:4;:18;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40462:1;40448:16;;:2;:16;;;40440:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40520:13;;;;;;;;;;;40515:183;;40576:19;:25;40596:4;40576:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40605:19;:23;40625:2;40605:23;;;;;;;;;;;;;;;;;;;;;;;;;40576:52;40550:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;40515:183;40722:1;40712:6;:11;40708:93;;40740:28;40756:4;40762:2;40766:1;40740:15;:28::i;:::-;40783:7;;40708:93;40817:14;;;;;;;;;;;40813:1485;;;40878:7;:5;:7::i;:::-;40870:15;;:4;:15;;;;:49;;;;;40912:7;:5;:7::i;:::-;40906:13;;:2;:13;;;;40870:49;:86;;;;;40954:1;40940:16;;:2;:16;;;;40870:86;:128;;;;;40991:6;40977:21;;:2;:21;;;;40870:128;:204;;;;;41021:19;:25;41041:4;41021:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41050:19;:23;41070:2;41050:23;;;;;;;;;;;;;;;;;;;;;;;;;41021:52;41019:55;40870:204;:234;;;;;41096:8;;;;;;;;;;;41095:9;40870:234;40848:1439;;;41193:25;:31;41219:4;41193:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;41250:31;:35;41282:2;41250:35;;;;;;;;;;;;;;;;;;;;;;;;;41249:36;41193:92;41167:1105;;;41372:20;;41362:6;:30;;41328:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;41580:9;;41563:13;41573:2;41563:9;:13::i;:::-;41554:6;:22;;;;:::i;:::-;:35;;41520:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41167:1105;;;41758:25;:29;41784:2;41758:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;41813:31;:37;41845:4;41813:37;;;;;;;;;;;;;;;;;;;;;;;;;41812:38;41758:92;41732:540;;;41937:20;;41927:6;:30;;41893:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;41732:540;;;42172:9;;42155:13;42165:2;42155:9;:13::i;:::-;42146:6;:22;;;;:::i;:::-;:35;;42112:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41732:540;41167:1105;40848:1439;40813:1485;42310:28;42341:24;42359:4;42341:9;:24::i;:::-;42310:55;;42378:12;42416:1;42393:20;:24;42378:39;;42448:7;:35;;;;;42472:11;;;;;;;;;;;42448:35;:61;;;;;42501:8;;;;;;;;;;;42500:9;42448:61;:110;;;;;42527:25;:31;42553:4;42527:31;;;;;;;;;;;;;;;;;;;;;;;;;42526:32;42448:110;:153;;;;;42576:19;:25;42596:4;42576:25;;;;;;;;;;;;;;;;;;;;;;;;;42575:26;42448:153;:194;;;;;42619:19;:23;42639:2;42619:23;;;;;;;;;;;;;;;;;;;;;;;;;42618:24;42448:194;42430:326;;;42680:4;42669:8;;:15;;;;;;;;;;;;;;;;;;42701:10;:8;:10::i;:::-;42739:5;42728:8;;:16;;;;;;;;;;;;;;;;;;42430:326;42772:33;42788:4;42794:2;42798:6;42772:15;:33::i;:::-;40350:2463;;40237:2576;;;;:::o;18229:226::-;18349:7;18382:1;18377;:6;;18385:12;18369:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18409:9;18425:1;18421;:5;;;;:::i;:::-;18409:17;;18446:1;18439:8;;;18229:226;;;;;:::o;17326:181::-;17384:7;17404:9;17420:1;17416;:5;;;;:::i;:::-;17404:17;;17445:1;17440;:6;;17432:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17498:1;17491:8;;;17326:181;;;;:::o;39110:188::-;39227:5;39193:25;:31;39219:4;39193:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39284:5;39250:40;;39278:4;39250:40;;;;;;;;;;;;39110:188;;:::o;13447:610::-;13605:1;13587:20;;:6;:20;;;13579:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13689:1;13668:23;;:9;:23;;;13660:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13744:47;13765:6;13773:9;13784:6;13744:20;:47::i;:::-;13824:108;13860:6;13824:108;;;;;;;;;;;;;;;;;:9;:17;13834:6;13824:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;13804:9;:17;13814:6;13804:17;;;;;;;;;;;;;;;:128;;;;13966:32;13991:6;13966:9;:20;13976:9;13966:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13943:9;:20;13953:9;13943:20;;;;;;;;;;;;;;;:55;;;;14031:9;14014:35;;14023:6;14014:35;;;14042:6;14014:35;;;;;;:::i;:::-;;;;;;;;13447:610;;;:::o;44252:2222::-;44291:23;44317:24;44335:4;44317:9;:24::i;:::-;44291:50;;44358:10;;;;;;;;;;;44354:269;;;44407:1;44389:15;:19;44385:206;;;44429:146;44475:4;44503:15;;;;;;;;;;;44541;44429;:146::i;:::-;44385:206;44605:7;;;44354:269;44635:25;44759:16;;44731:12;;44697:18;;44663;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;:112;;;;:::i;:::-;44635:140;;44786:12;44834:1;44815:15;:20;:46;;;;44860:1;44839:17;:22;44815:46;44811:85;;;44878:7;;;;;44811:85;44957:23;45070:1;45037:17;45002:18;;44984:15;:36;;;;:::i;:::-;44983:71;;;;:::i;:::-;:88;;;;:::i;:::-;44957:114;;45082:26;45111:36;45131:15;45111;:19;;:36;;;;:::i;:::-;45082:65;;45160:25;45188:21;45160:49;;45222:36;45239:18;45222:16;:36::i;:::-;45271:18;45292:44;45318:17;45292:21;:25;;:44;;;;:::i;:::-;45271:65;;45349:23;45375:81;45428:17;45375:34;45390:18;;45375:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;45349:107;;45467:17;45487:51;45520:17;45487:28;45502:12;;45487:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;45467:71;;45549:21;45573:79;45624:17;45573:32;45588:16;;45573:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;45549:103;;45665:23;45773:13;45748:9;45717:15;45691:10;:41;;;;:::i;:::-;:66;;;;:::i;:::-;:95;;;;:::i;:::-;45665:121;;45820:1;45799:18;:22;;;;45853:1;45832:18;:22;;;;45880:1;45865:12;:16;;;;45911:1;45892:16;:20;;;;45947:9;;;;;;;;;;;45939:23;;45970:9;45939:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45925:59;;;;;46017:13;;;;;;;;;;;46009:27;;46044:13;46009:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45995:67;;;;;46097:1;46079:15;:19;:42;;;;;46120:1;46102:15;:19;46079:42;46075:278;;;46138:46;46151:15;46168;46138:12;:46::i;:::-;46204:137;46237:18;46274:15;46308:18;;46204:137;;;;;;;;:::i;:::-;;;;;;;;46075:278;46387:15;;;;;;;;;;;46379:29;;46430:21;46379:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46365:101;;;;;44280:2194;;;;;;;;;;;44252:2222;:::o;16931:125::-;;;;:::o;17790:136::-;17848:7;17875:43;17879:1;17882;17875:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17868:50;;17790:136;;;;:::o;42821:650::-;42947:21;42985:1;42971:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42947:40;;43016:4;42998;43003:1;42998:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43042:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43032:4;43037:1;43032:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43077:62;43094:4;43109:15;43127:11;43077:8;:62::i;:::-;43195:15;:66;;;43280:11;43310:1;43358:4;43389;43413:15;43195:248;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43178:286;42876:595;42821:650;:::o;18714:471::-;18772:7;19022:1;19017;:6;19013:47;;19047:1;19040:8;;;;19013:47;19072:9;19088:1;19084;:5;;;;:::i;:::-;19072:17;;19117:1;19112;19108;:5;;;;:::i;:::-;:10;19100:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19176:1;19169:8;;;18714:471;;;;;:::o;19661:132::-;19719:7;19746:39;19750:1;19753;19746:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19739:46;;19661:132;;;;:::o;43479:582::-;43627:62;43644:4;43659:15;43677:11;43627:8;:62::i;:::-;43749:15;:31;;;43788:9;43825:4;43849:11;43879:1;43926;31113:6;44003:15;43749:284;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43732:322;;;;;;;43479:582;;:::o;20289:312::-;20409:7;20441:1;20437;:5;20444:12;20429:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20468:9;20484:1;20480;:5;;;;:::i;:::-;20468:17;;20592:1;20585:8;;;20289:312;;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:246::-;1537:1;1547:113;1561:6;1558:1;1555:13;1547:113;;;1646:1;1641:3;1637:11;1631:18;1627:1;1622:3;1618:11;1611:39;1583:2;1580:1;1576:10;1571:15;;1547:113;;;1694:1;1685:6;1680:3;1676:16;1669:27;1518:184;1456:246;;;:::o;1708:102::-;1749:6;1800:2;1796:7;1791:2;1784:5;1780:14;1776:28;1766:38;;1708:102;;;:::o;1816:377::-;1904:3;1932:39;1965:5;1932:39;:::i;:::-;1987:71;2051:6;2046:3;1987:71;:::i;:::-;1980:78;;2067:65;2125:6;2120:3;2113:4;2106:5;2102:16;2067:65;:::i;:::-;2157:29;2179:6;2157:29;:::i;:::-;2152:3;2148:39;2141:46;;1908:285;1816:377;;;;:::o;2199:313::-;2312:4;2350:2;2339:9;2335:18;2327:26;;2399:9;2393:4;2389:20;2385:1;2374:9;2370:17;2363:47;2427:78;2500:4;2491:6;2427:78;:::i;:::-;2419:86;;2199:313;;;;:::o;2518:77::-;2555:7;2584:5;2573:16;;2518:77;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:329::-;4192:6;4241:2;4229:9;4220:7;4216:23;4212:32;4209:119;;;4247:79;;:::i;:::-;4209:119;4367:1;4392:53;4437:7;4428:6;4417:9;4413:22;4392:53;:::i;:::-;4382:63;;4338:117;4133:329;;;;:::o;4468:60::-;4496:3;4517:5;4510:12;;4468:60;;;:::o;4534:142::-;4584:9;4617:53;4635:34;4644:24;4662:5;4644:24;:::i;:::-;4635:34;:::i;:::-;4617:53;:::i;:::-;4604:66;;4534:142;;;:::o;4682:126::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4682:126;;;:::o;4814:153::-;4891:9;4924:37;4955:5;4924:37;:::i;:::-;4911:50;;4814:153;;;:::o;4973:185::-;5087:64;5145:5;5087:64;:::i;:::-;5082:3;5075:77;4973:185;;:::o;5164:276::-;5284:4;5322:2;5311:9;5307:18;5299:26;;5335:98;5430:1;5419:9;5415:17;5406:6;5335:98;:::i;:::-;5164:276;;;;:::o;5446:118::-;5533:24;5551:5;5533:24;:::i;:::-;5528:3;5521:37;5446:118;;:::o;5570:222::-;5663:4;5701:2;5690:9;5686:18;5678:26;;5714:71;5782:1;5771:9;5767:17;5758:6;5714:71;:::i;:::-;5570:222;;;;:::o;5798:619::-;5875:6;5883;5891;5940:2;5928:9;5919:7;5915:23;5911:32;5908:119;;;5946:79;;:::i;:::-;5908:119;6066:1;6091:53;6136:7;6127:6;6116:9;6112:22;6091:53;:::i;:::-;6081:63;;6037:117;6193:2;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6164:118;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;5798:619;;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:765::-;7674:6;7682;7690;7698;7747:3;7735:9;7726:7;7722:23;7718:33;7715:120;;;7754:79;;:::i;:::-;7715:120;7874:1;7899:53;7944:7;7935:6;7924:9;7920:22;7899:53;:::i;:::-;7889:63;;7845:117;8001:2;8027:53;8072:7;8063:6;8052:9;8048:22;8027:53;:::i;:::-;8017:63;;7972:118;8129:2;8155:53;8200:7;8191:6;8180:9;8176:22;8155:53;:::i;:::-;8145:63;;8100:118;8257:2;8283:53;8328:7;8319:6;8308:9;8304:22;8283:53;:::i;:::-;8273:63;;8228:118;7588:765;;;;;;;:::o;8359:323::-;8415:6;8464:2;8452:9;8443:7;8439:23;8435:32;8432:119;;;8470:79;;:::i;:::-;8432:119;8590:1;8615:50;8657:7;8648:6;8637:9;8633:22;8615:50;:::i;:::-;8605:60;;8561:114;8359:323;;;;:::o;8688:474::-;8756:6;8764;8813:2;8801:9;8792:7;8788:23;8784:32;8781:119;;;8819:79;;:::i;:::-;8781:119;8939:1;8964:53;9009:7;9000:6;8989:9;8985:22;8964:53;:::i;:::-;8954:63;;8910:117;9066:2;9092:53;9137:7;9128:6;9117:9;9113:22;9092:53;:::i;:::-;9082:63;;9037:118;8688:474;;;;;:::o;9168:182::-;9308:34;9304:1;9296:6;9292:14;9285:58;9168:182;:::o;9356:366::-;9498:3;9519:67;9583:2;9578:3;9519:67;:::i;:::-;9512:74;;9595:93;9684:3;9595:93;:::i;:::-;9713:2;9708:3;9704:12;9697:19;;9356:366;;;:::o;9728:419::-;9894:4;9932:2;9921:9;9917:18;9909:26;;9981:9;9975:4;9971:20;9967:1;9956:9;9952:17;9945:47;10009:131;10135:4;10009:131;:::i;:::-;10001:139;;9728:419;;;:::o;10153:180::-;10201:77;10198:1;10191:88;10298:4;10295:1;10288:15;10322:4;10319:1;10312:15;10339:320;10383:6;10420:1;10414:4;10410:12;10400:22;;10467:1;10461:4;10457:12;10488:18;10478:81;;10544:4;10536:6;10532:17;10522:27;;10478:81;10606:2;10598:6;10595:14;10575:18;10572:38;10569:84;;10625:18;;:::i;:::-;10569:84;10390:269;10339:320;;;:::o;10665:232::-;10805:34;10801:1;10793:6;10789:14;10782:58;10874:15;10869:2;10861:6;10857:15;10850:40;10665:232;:::o;10903:366::-;11045:3;11066:67;11130:2;11125:3;11066:67;:::i;:::-;11059:74;;11142:93;11231:3;11142:93;:::i;:::-;11260:2;11255:3;11251:12;11244:19;;10903:366;;;:::o;11275:419::-;11441:4;11479:2;11468:9;11464:18;11456:26;;11528:9;11522:4;11518:20;11514:1;11503:9;11499:17;11492:47;11556:131;11682:4;11556:131;:::i;:::-;11548:139;;11275:419;;;:::o;11700:180::-;11748:77;11745:1;11738:88;11845:4;11842:1;11835:15;11869:4;11866:1;11859:15;11886:410;11926:7;11949:20;11967:1;11949:20;:::i;:::-;11944:25;;11983:20;12001:1;11983:20;:::i;:::-;11978:25;;12038:1;12035;12031:9;12060:30;12078:11;12060:30;:::i;:::-;12049:41;;12239:1;12230:7;12226:15;12223:1;12220:22;12200:1;12193:9;12173:83;12150:139;;12269:18;;:::i;:::-;12150:139;11934:362;11886:410;;;;:::o;12302:180::-;12350:77;12347:1;12340:88;12447:4;12444:1;12437:15;12471:4;12468:1;12461:15;12488:185;12528:1;12545:20;12563:1;12545:20;:::i;:::-;12540:25;;12579:20;12597:1;12579:20;:::i;:::-;12574:25;;12618:1;12608:35;;12623:18;;:::i;:::-;12608:35;12665:1;12662;12658:9;12653:14;;12488:185;;;;:::o;12679:191::-;12719:3;12738:20;12756:1;12738:20;:::i;:::-;12733:25;;12772:20;12790:1;12772:20;:::i;:::-;12767:25;;12815:1;12812;12808:9;12801:16;;12836:3;12833:1;12830:10;12827:36;;;12843:18;;:::i;:::-;12827:36;12679:191;;;;:::o;12876:179::-;13016:31;13012:1;13004:6;13000:14;12993:55;12876:179;:::o;13061:366::-;13203:3;13224:67;13288:2;13283:3;13224:67;:::i;:::-;13217:74;;13300:93;13389:3;13300:93;:::i;:::-;13418:2;13413:3;13409:12;13402:19;;13061:366;;;:::o;13433:419::-;13599:4;13637:2;13626:9;13622:18;13614:26;;13686:9;13680:4;13676:20;13672:1;13661:9;13657:17;13650:47;13714:131;13840:4;13714:131;:::i;:::-;13706:139;;13433:419;;;:::o;13858:244::-;13998:34;13994:1;13986:6;13982:14;13975:58;14067:27;14062:2;14054:6;14050:15;14043:52;13858:244;:::o;14108:366::-;14250:3;14271:67;14335:2;14330:3;14271:67;:::i;:::-;14264:74;;14347:93;14436:3;14347:93;:::i;:::-;14465:2;14460:3;14456:12;14449:19;;14108:366;;;:::o;14480:419::-;14646:4;14684:2;14673:9;14669:18;14661:26;;14733:9;14727:4;14723:20;14719:1;14708:9;14704:17;14697:47;14761:131;14887:4;14761:131;:::i;:::-;14753:139;;14480:419;;;:::o;14905:225::-;15045:34;15041:1;15033:6;15029:14;15022:58;15114:8;15109:2;15101:6;15097:15;15090:33;14905:225;:::o;15136:366::-;15278:3;15299:67;15363:2;15358:3;15299:67;:::i;:::-;15292:74;;15375:93;15464:3;15375:93;:::i;:::-;15493:2;15488:3;15484:12;15477:19;;15136:366;;;:::o;15508:419::-;15674:4;15712:2;15701:9;15697:18;15689:26;;15761:9;15755:4;15751:20;15747:1;15736:9;15732:17;15725:47;15789:131;15915:4;15789:131;:::i;:::-;15781:139;;15508:419;;;:::o;15933:223::-;16073:34;16069:1;16061:6;16057:14;16050:58;16142:6;16137:2;16129:6;16125:15;16118:31;15933:223;:::o;16162:366::-;16304:3;16325:67;16389:2;16384:3;16325:67;:::i;:::-;16318:74;;16401:93;16490:3;16401:93;:::i;:::-;16519:2;16514:3;16510:12;16503:19;;16162:366;;;:::o;16534:419::-;16700:4;16738:2;16727:9;16723:18;16715:26;;16787:9;16781:4;16777:20;16773:1;16762:9;16758:17;16751:47;16815:131;16941:4;16815:131;:::i;:::-;16807:139;;16534:419;;;:::o;16959:221::-;17099:34;17095:1;17087:6;17083:14;17076:58;17168:4;17163:2;17155:6;17151:15;17144:29;16959:221;:::o;17186:366::-;17328:3;17349:67;17413:2;17408:3;17349:67;:::i;:::-;17342:74;;17425:93;17514:3;17425:93;:::i;:::-;17543:2;17538:3;17534:12;17527:19;;17186:366;;;:::o;17558:419::-;17724:4;17762:2;17751:9;17747:18;17739:26;;17811:9;17805:4;17801:20;17797:1;17786:9;17782:17;17775:47;17839:131;17965:4;17839:131;:::i;:::-;17831:139;;17558:419;;;:::o;17983:224::-;18123:34;18119:1;18111:6;18107:14;18100:58;18192:7;18187:2;18179:6;18175:15;18168:32;17983:224;:::o;18213:366::-;18355:3;18376:67;18440:2;18435:3;18376:67;:::i;:::-;18369:74;;18452:93;18541:3;18452:93;:::i;:::-;18570:2;18565:3;18561:12;18554:19;;18213:366;;;:::o;18585:419::-;18751:4;18789:2;18778:9;18774:18;18766:26;;18838:9;18832:4;18828:20;18824:1;18813:9;18809:17;18802:47;18866:131;18992:4;18866:131;:::i;:::-;18858:139;;18585:419;;;:::o;19010:222::-;19150:34;19146:1;19138:6;19134:14;19127:58;19219:5;19214:2;19206:6;19202:15;19195:30;19010:222;:::o;19238:366::-;19380:3;19401:67;19465:2;19460:3;19401:67;:::i;:::-;19394:74;;19477:93;19566:3;19477:93;:::i;:::-;19595:2;19590:3;19586:12;19579:19;;19238:366;;;:::o;19610:419::-;19776:4;19814:2;19803:9;19799:18;19791:26;;19863:9;19857:4;19853:20;19849:1;19838:9;19834:17;19827:47;19891:131;20017:4;19891:131;:::i;:::-;19883:139;;19610:419;;;:::o;20035:172::-;20175:24;20171:1;20163:6;20159:14;20152:48;20035:172;:::o;20213:366::-;20355:3;20376:67;20440:2;20435:3;20376:67;:::i;:::-;20369:74;;20452:93;20541:3;20452:93;:::i;:::-;20570:2;20565:3;20561:12;20554:19;;20213:366;;;:::o;20585:419::-;20751:4;20789:2;20778:9;20774:18;20766:26;;20838:9;20832:4;20828:20;20824:1;20813:9;20809:17;20802:47;20866:131;20992:4;20866:131;:::i;:::-;20858:139;;20585:419;;;:::o;21010:240::-;21150:34;21146:1;21138:6;21134:14;21127:58;21219:23;21214:2;21206:6;21202:15;21195:48;21010:240;:::o;21256:366::-;21398:3;21419:67;21483:2;21478:3;21419:67;:::i;:::-;21412:74;;21495:93;21584:3;21495:93;:::i;:::-;21613:2;21608:3;21604:12;21597:19;;21256:366;;;:::o;21628:419::-;21794:4;21832:2;21821:9;21817:18;21809:26;;21881:9;21875:4;21871:20;21867:1;21856:9;21852:17;21845:47;21909:131;22035:4;21909:131;:::i;:::-;21901:139;;21628:419;;;:::o;22053:169::-;22193:21;22189:1;22181:6;22177:14;22170:45;22053:169;:::o;22228:366::-;22370:3;22391:67;22455:2;22450:3;22391:67;:::i;:::-;22384:74;;22467:93;22556:3;22467:93;:::i;:::-;22585:2;22580:3;22576:12;22569:19;;22228:366;;;:::o;22600:419::-;22766:4;22804:2;22793:9;22789:18;22781:26;;22853:9;22847:4;22843:20;22839:1;22828:9;22824:17;22817:47;22881:131;23007:4;22881:131;:::i;:::-;22873:139;;22600:419;;;:::o;23025:241::-;23165:34;23161:1;23153:6;23149:14;23142:58;23234:24;23229:2;23221:6;23217:15;23210:49;23025:241;:::o;23272:366::-;23414:3;23435:67;23499:2;23494:3;23435:67;:::i;:::-;23428:74;;23511:93;23600:3;23511:93;:::i;:::-;23629:2;23624:3;23620:12;23613:19;;23272:366;;;:::o;23644:419::-;23810:4;23848:2;23837:9;23833:18;23825:26;;23897:9;23891:4;23887:20;23883:1;23872:9;23868:17;23861:47;23925:131;24051:4;23925:131;:::i;:::-;23917:139;;23644:419;;;:::o;24069:194::-;24109:4;24129:20;24147:1;24129:20;:::i;:::-;24124:25;;24163:20;24181:1;24163:20;:::i;:::-;24158:25;;24207:1;24204;24200:9;24192:17;;24231:1;24225:4;24222:11;24219:37;;;24236:18;;:::i;:::-;24219:37;24069:194;;;;:::o;24269:177::-;24409:29;24405:1;24397:6;24393:14;24386:53;24269:177;:::o;24452:366::-;24594:3;24615:67;24679:2;24674:3;24615:67;:::i;:::-;24608:74;;24691:93;24780:3;24691:93;:::i;:::-;24809:2;24804:3;24800:12;24793:19;;24452:366;;;:::o;24824:419::-;24990:4;25028:2;25017:9;25013:18;25005:26;;25077:9;25071:4;25067:20;25063:1;25052:9;25048:17;25041:47;25105:131;25231:4;25105:131;:::i;:::-;25097:139;;24824:419;;;:::o;25249:147::-;25350:11;25387:3;25372:18;;25249:147;;;;:::o;25402:114::-;;:::o;25522:398::-;25681:3;25702:83;25783:1;25778:3;25702:83;:::i;:::-;25695:90;;25794:93;25883:3;25794:93;:::i;:::-;25912:1;25907:3;25903:11;25896:18;;25522:398;;;:::o;25926:379::-;26110:3;26132:147;26275:3;26132:147;:::i;:::-;26125:154;;26296:3;26289:10;;25926:379;;;:::o;26311:442::-;26460:4;26498:2;26487:9;26483:18;26475:26;;26511:71;26579:1;26568:9;26564:17;26555:6;26511:71;:::i;:::-;26592:72;26660:2;26649:9;26645:18;26636:6;26592:72;:::i;:::-;26674;26742:2;26731:9;26727:18;26718:6;26674:72;:::i;:::-;26311:442;;;;;;:::o;26759:180::-;26807:77;26804:1;26797:88;26904:4;26901:1;26894:15;26928:4;26925:1;26918:15;26945:180;26993:77;26990:1;26983:88;27090:4;27087:1;27080:15;27114:4;27111:1;27104:15;27131:143;27188:5;27219:6;27213:13;27204:22;;27235:33;27262:5;27235:33;:::i;:::-;27131:143;;;;:::o;27280:351::-;27350:6;27399:2;27387:9;27378:7;27374:23;27370:32;27367:119;;;27405:79;;:::i;:::-;27367:119;27525:1;27550:64;27606:7;27597:6;27586:9;27582:22;27550:64;:::i;:::-;27540:74;;27496:128;27280:351;;;;:::o;27637:85::-;27682:7;27711:5;27700:16;;27637:85;;;:::o;27728:158::-;27786:9;27819:61;27837:42;27846:32;27872:5;27846:32;:::i;:::-;27837:42;:::i;:::-;27819:61;:::i;:::-;27806:74;;27728:158;;;:::o;27892:147::-;27987:45;28026:5;27987:45;:::i;:::-;27982:3;27975:58;27892:147;;:::o;28045:114::-;28112:6;28146:5;28140:12;28130:22;;28045:114;;;:::o;28165:184::-;28264:11;28298:6;28293:3;28286:19;28338:4;28333:3;28329:14;28314:29;;28165:184;;;;:::o;28355:132::-;28422:4;28445:3;28437:11;;28475:4;28470:3;28466:14;28458:22;;28355:132;;;:::o;28493:108::-;28570:24;28588:5;28570:24;:::i;:::-;28565:3;28558:37;28493:108;;:::o;28607:179::-;28676:10;28697:46;28739:3;28731:6;28697:46;:::i;:::-;28775:4;28770:3;28766:14;28752:28;;28607:179;;;;:::o;28792:113::-;28862:4;28894;28889:3;28885:14;28877:22;;28792:113;;;:::o;28941:732::-;29060:3;29089:54;29137:5;29089:54;:::i;:::-;29159:86;29238:6;29233:3;29159:86;:::i;:::-;29152:93;;29269:56;29319:5;29269:56;:::i;:::-;29348:7;29379:1;29364:284;29389:6;29386:1;29383:13;29364:284;;;29465:6;29459:13;29492:63;29551:3;29536:13;29492:63;:::i;:::-;29485:70;;29578:60;29631:6;29578:60;:::i;:::-;29568:70;;29424:224;29411:1;29408;29404:9;29399:14;;29364:284;;;29368:14;29664:3;29657:10;;29065:608;;;28941:732;;;;:::o;29679:831::-;29942:4;29980:3;29969:9;29965:19;29957:27;;29994:71;30062:1;30051:9;30047:17;30038:6;29994:71;:::i;:::-;30075:80;30151:2;30140:9;30136:18;30127:6;30075:80;:::i;:::-;30202:9;30196:4;30192:20;30187:2;30176:9;30172:18;30165:48;30230:108;30333:4;30324:6;30230:108;:::i;:::-;30222:116;;30348:72;30416:2;30405:9;30401:18;30392:6;30348:72;:::i;:::-;30430:73;30498:3;30487:9;30483:19;30474:6;30430:73;:::i;:::-;29679:831;;;;;;;;:::o;30516:220::-;30656:34;30652:1;30644:6;30640:14;30633:58;30725:3;30720:2;30712:6;30708:15;30701:28;30516:220;:::o;30742:366::-;30884:3;30905:67;30969:2;30964:3;30905:67;:::i;:::-;30898:74;;30981:93;31070:3;30981:93;:::i;:::-;31099:2;31094:3;31090:12;31083:19;;30742:366;;;:::o;31114:419::-;31280:4;31318:2;31307:9;31303:18;31295:26;;31367:9;31361:4;31357:20;31353:1;31342:9;31338:17;31331:47;31395:131;31521:4;31395:131;:::i;:::-;31387:139;;31114:419;;;:::o;31539:807::-;31788:4;31826:3;31815:9;31811:19;31803:27;;31840:71;31908:1;31897:9;31893:17;31884:6;31840:71;:::i;:::-;31921:72;31989:2;31978:9;31974:18;31965:6;31921:72;:::i;:::-;32003:80;32079:2;32068:9;32064:18;32055:6;32003:80;:::i;:::-;32093;32169:2;32158:9;32154:18;32145:6;32093:80;:::i;:::-;32183:73;32251:3;32240:9;32236:19;32227:6;32183:73;:::i;:::-;32266;32334:3;32323:9;32319:19;32310:6;32266:73;:::i;:::-;31539:807;;;;;;;;;:::o;32352:143::-;32409:5;32440:6;32434:13;32425:22;;32456:33;32483:5;32456:33;:::i;:::-;32352:143;;;;:::o;32501:663::-;32589:6;32597;32605;32654:2;32642:9;32633:7;32629:23;32625:32;32622:119;;;32660:79;;:::i;:::-;32622:119;32780:1;32805:64;32861:7;32852:6;32841:9;32837:22;32805:64;:::i;:::-;32795:74;;32751:128;32918:2;32944:64;33000:7;32991:6;32980:9;32976:22;32944:64;:::i;:::-;32934:74;;32889:129;33057:2;33083:64;33139:7;33130:6;33119:9;33115:22;33083:64;:::i;:::-;33073:74;;33028:129;32501:663;;;;;:::o

Swarm Source

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