ETH Price: $2,857.86 (-9.72%)
Gas: 9 Gwei

Token

Jeetdie Academy (JEETDIE)
 

Overview

Max Total Supply

1,000,000,000 JEETDIE

Holders

45

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
nortlez.eth
Balance
0.930329929650640969 JEETDIE

Value
$0.00
0x667fafdab09397666590973d0a09ade779d55c0b
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:
Jeetdie

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

/**

Jeetdie Academy -- Diamond hands rebellion united!

t.me/jeetdie_academy
twitter.com/jeetdie_academy
jeetdie.academy

   __     ______     ______     ______   _____     __     ______              
  /\ \   /\  ___\   /\  ___\   /\__  _\ /\  __-.  /\ \   /\  ___\             
 _\_\ \  \ \  __\   \ \  __\   \/_/\ \/ \ \ \/\ \ \ \ \  \ \  __\             
/\_____\  \ \_____\  \ \_____\    \ \_\  \ \____-  \ \_\  \ \_____\           
\/_____/   \/_____/   \/_____/     \/_/   \/____/   \/_/   \/_____/           
                                                                              
 ______     ______     ______     _____     ______     __    __     __  __    
/\  __ \   /\  ___\   /\  __ \   /\  __-.  /\  ___\   /\ "-./  \   /\ \_\ \   
\ \  __ \  \ \ \____  \ \  __ \  \ \ \/\ \ \ \  __\   \ \ \-./\ \  \ \____ \  
 \ \_\ \_\  \ \_____\  \ \_\ \_\  \ \____-  \ \_____\  \ \_\ \ \_\  \/\_____\ 
  \/_/\/_/   \/_____/   \/_/\/_/   \/____/   \/_____/   \/_/  \/_/   \/_____/ 
                                                                                                                                                                                                                        

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}



pragma solidity ^0.8.0;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}



pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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



pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

    /**
     * @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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        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) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + 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) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
    unchecked {
        _approve(owner, spender, currentAllowance - subtractedValue);
    }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
    unchecked {
        _balances[from] = fromBalance - amount;
    }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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 += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

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

    /**
     * @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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
        require(currentAllowance >= amount, "ERC20: insufficient allowance");
        unchecked {
        _approve(owner, spender, currentAllowance - 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 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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}



pragma solidity ^0.8.0;

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(address(0));
    }

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

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



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

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}


interface IUniswapV2ERC20 {
    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;
}



pragma solidity ^0.8.15;


contract Jeetdie is ERC20Burnable, Ownable {
    uint256 private constant TOTAL_SUPPLY = 1_000_000_000e18;
    address public marketingWallet;
    uint256 public maxPercentToSwap = 5;
    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address private constant ZERO = 0x0000000000000000000000000000000000000000;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    bool public isTradingEnabled;

    bool private taxRegulationModOn = false;
    uint256 private taxRegulationModInitTime;
    uint256 private currentTaxState;
    uint256 public frameTotalSells;
    uint256 public frameTotalBuys;
   

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _blacklisted;
    mapping(address => bool) public automatedMarketMakerPairs;


    event ExcludeFromFees(address indexed account);
    event FeesUpdated(uint256 sellFee, uint256 buyFee);
    event MarketingWalletChanged(address marketingWallet);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    uint256 public sellFee;
    uint256 public buyFee;


    bool public isLimitsRemoved;
    uint256 public maxTxAmount;
    uint256 public maxHolding;
    mapping(address => bool) public isExempt;

    constructor (address router, address operator) ERC20("Jeetdie Academy", "JEETDIE")
    {
        _mint(owner(), TOTAL_SUPPLY);

        swapTokensAtAmount = TOTAL_SUPPLY / 1000;
        maxHolding = TOTAL_SUPPLY / 100;
        maxTxAmount = TOTAL_SUPPLY / 100;
        marketingWallet = operator;
        sellFee = 2;
        buyFee = 1;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(uniswapV2Router)] = true;

        isExempt[owner()] = true;
    }

    receive() external payable {
    }

    function openTrade() public onlyOwner {
        require(isTradingEnabled == false, "Trading is already open!");
        isTradingEnabled = true;
    }

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");
        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function sendETH(address payable recipient, uint256 amount) internal {
        (bool success, ) = recipient.call{gas: 2300, value: amount}("");
        require(success, "Failed to send Ether");
    }

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

    _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    //=======FeeManagement=======//
    function excludeFromFees(address account) external onlyOwner {
        require(!_isExcludedFromFees[account], "Account is already the value of true");
        _isExcludedFromFees[account] = true;

        emit ExcludeFromFees(account);
    }

    function includeInFees(address account) external onlyOwner {
        require(_isExcludedFromFees[account], "Account already included");
        _isExcludedFromFees[account] = false;
    }

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

    function _updateFees(uint256 _sellFee, uint256 _buyFee) private {
        require(_sellFee <= 10, "Fees must be less than or equal to 10%");
        require(_buyFee <= 10, "Fees must be less than or equal to 10%");
        sellFee = _sellFee;
        buyFee = _buyFee;

        emit FeesUpdated(sellFee, buyFee);
    }

    function updateFees(uint256 _sellFee, uint256 _buyFee) external onlyOwner {
        _updateFees(_sellFee, _buyFee);
    }

    function enableTaxRegulationMod(bool _value) external onlyOwner {
        taxRegulationModOn = _value;
        if (taxRegulationModOn && taxRegulationModInitTime == 0) {
            taxRegulationModInitTime = block.timestamp;
        }
    }

    function isControlTransaction() private view returns (bool) {
        return (block.timestamp >= taxRegulationModInitTime + 900);
    }

    function updateTaxStateAndFees() private {
        uint256 newTaxState;

        if (frameTotalBuys > frameTotalSells) {
            newTaxState = 1;
        } else if (frameTotalBuys == frameTotalSells) {
            newTaxState = 2;
        } else {
            newTaxState = 3;
        }

        if (currentTaxState != newTaxState) {
            currentTaxState = newTaxState;

            if (newTaxState == 1) {
                _updateFees(2, 1);
            } else if (newTaxState == 2) {
                _updateFees(4, 0);
            } else {
                _updateFees(10, 0);
            }
        }
    }

    function changeMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != marketingWallet, "Marketing wallet is already that address");
        marketingWallet = _marketingWallet;
        emit MarketingWalletChanged(marketingWallet);
    }

    function addToBlacklist(address account) external onlyOwner {
        _blacklisted[account] = true;
    }

    function removeFromBlacklist(address account) external onlyOwner {
        _blacklisted[account] = false;
    }

    function _transfer(
    address from,
    address to,
    uint256 amount
) internal override {
    require(from != address(0), "ERC20: transfer from the zero address");
    require(to != address(0), "ERC20: transfer to the zero address");
    require(!_blacklisted[from], "ERC20: sender is blacklisted");
    require(!_blacklisted[to], "ERC20: recipient is blacklisted");

    if (!swapping) {
        _check(from, to, amount);
    }

    uint _buyFee = buyFee;
    uint _sellFee = sellFee;

    if (!isExempt[from] && !isExempt[to]) {
        require(isTradingEnabled, "Trade is not open");
    }

    if (amount == 0) {
        return;
    }

    bool takeFee = !swapping;

    if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
        takeFee = false;
    }

    uint256 toSwap = balanceOf(address(this));

    bool canSwap = toSwap >= swapTokensAtAmount && toSwap > 0 && !automatedMarketMakerPairs[from] && takeFee;
    if (canSwap &&
        !swapping) {
        swapping = true;
        uint256 pairBalance = balanceOf(uniswapV2Pair);
        if (toSwap > pairBalance * maxPercentToSwap / 100) {
            toSwap = pairBalance * maxPercentToSwap / 100;
        }
        swapAndSendMarketing(toSwap);
        swapping = false;
    }

    if (taxRegulationModOn && from != address(this) && to != address(this)) {
        if (isControlTransaction()) {
            updateTaxStateAndFees();
            frameTotalBuys = 0;
            frameTotalSells = 0;
            taxRegulationModInitTime = block.timestamp;
        }
    }

    if (takeFee && to == uniswapV2Pair && _sellFee > 0) {
        uint256 fees = (amount * _sellFee) / 100;
        amount = amount - fees;

        super._transfer(from, address(this), fees);
    }

    else if (takeFee && from == uniswapV2Pair && _buyFee > 0) {
        uint256 fees = (amount * _buyFee) / 100;
        amount = amount - fees;

        super._transfer(from, address(this), fees);
    }

    if (taxRegulationModOn && from != address(this) && to != address(this)) {
        if (from == uniswapV2Pair) {
            frameTotalBuys += amount;
        } else if (to == uniswapV2Pair) {
            frameTotalSells += amount;
        }
    }

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



    //=======Swap=======//
    function swapAndSendMarketing(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp) {}
        catch {
        }

        uint256 newBalance = address(this).balance;
        sendETH(payable(marketingWallet), newBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(newAmount > 0);
        swapTokensAtAmount = newAmount;
    }

    function setMaxPercentToSwap(uint256 newAmount) external onlyOwner {
        require(newAmount > 1, "too low");
        require(newAmount <= 10, "too high");
        maxPercentToSwap = newAmount;
    }

    function _check(
        address from,
        address to,
        uint256 amount
    ) internal view {

        if (!isLimitsRemoved) {

            if (!isSpecialAddresses(from, to) && !isExempt[to]) {
                _checkMaxTxAmount(amount);

                _checkMaxHoldingLimit(to, amount);
            }
        }
    }

    function _checkMaxTxAmount(uint256 amount) internal view {
        require(amount <= maxTxAmount, "Amount exceeds max");

    }

    function _checkMaxHoldingLimit(address to, uint256 amount) internal view {
        if (to == uniswapV2Pair) {
            return;
        }

        require(balanceOf(to) + amount <= maxHolding, "Max holding exceeded max");

    }

    function isSpecialAddresses(address from, address to) view public returns (bool){

        return (from == owner() || to == owner() || from == address(this) || to == address(this));
    }

    function removeLimits() external onlyOwner {
        isLimitsRemoved = true;
    }

    function setMaxTxAmount(uint256 maxTxAmount_) external onlyOwner {
        maxTxAmount = maxTxAmount_;
    }

    function setMaxHolding(uint256 maxHolding_) external onlyOwner {
        maxHolding = maxHolding_;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","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":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","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"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"enableTaxRegulationMod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"frameTotalBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frameTotalSells","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLimitsRemoved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"isSpecialAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","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":"maxHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPercentToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","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":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","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":"uint256","name":"maxHolding_","type":"uint256"}],"name":"setMaxHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setMaxPercentToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount_","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_buyFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260056007556000600b60016101000a81548160ff0219169083151502179055503480156200003157600080fd5b5060405162005e3138038062005e31833981810160405281019062000057919062000c32565b6040518060400160405280600f81526020017f4a6565746469652041636164656d7900000000000000000000000000000000008152506040518060400160405280600781526020017f4a454554444945000000000000000000000000000000000000000000000000008152508160039081620000d4919062000ef3565b508060049081620000e6919062000ef3565b50505062000109620000fd6200064760201b60201c565b6200064f60201b60201c565b620001366200011d6200071560201b60201c565b6b033b2e3c9fd0803ce80000006200073f60201b60201c565b6103e86b033b2e3c9fd0803ce800000062000152919062001038565b600a8190555060646b033b2e3c9fd0803ce800000062000173919062001038565b60178190555060646b033b2e3c9fd0803ce800000062000194919062001038565b60168190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060026013819055506001601481905550600082905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000264919062001070565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f2919062001070565b6040518363ffffffff1660e01b815260040162000311929190620010b3565b6020604051808303816000875af115801562000331573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000357919062001070565b905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200043030600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620008b760201b60201c565b6200044381600162000a8860201b60201c565b600160106000620004596200071560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000620005ec6200071560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050620013b6565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a89062001141565b60405180910390fd5b620007c56000838362000bbe60201b60201c565b8060026000828254620007d9919062001163565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000830919062001163565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008979190620011d1565b60405180910390a3620008b36000838362000bc360201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000929576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009209062001264565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200099b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200099290620012fc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000a7b9190620011d1565b60405180910390a3505050565b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000b1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b149062001394565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bfa8262000bcd565b9050919050565b62000c0c8162000bed565b811462000c1857600080fd5b50565b60008151905062000c2c8162000c01565b92915050565b6000806040838503121562000c4c5762000c4b62000bc8565b5b600062000c5c8582860162000c1b565b925050602062000c6f8582860162000c1b565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000cfb57607f821691505b60208210810362000d115762000d1062000cb3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d3c565b62000d87868362000d3c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000dd462000dce62000dc88462000d9f565b62000da9565b62000d9f565b9050919050565b6000819050919050565b62000df08362000db3565b62000e0862000dff8262000ddb565b84845462000d49565b825550505050565b600090565b62000e1f62000e10565b62000e2c81848462000de5565b505050565b5b8181101562000e545762000e4860008262000e15565b60018101905062000e32565b5050565b601f82111562000ea35762000e6d8162000d17565b62000e788462000d2c565b8101602085101562000e88578190505b62000ea062000e978562000d2c565b83018262000e31565b50505b505050565b600082821c905092915050565b600062000ec86000198460080262000ea8565b1980831691505092915050565b600062000ee3838362000eb5565b9150826002028217905092915050565b62000efe8262000c79565b67ffffffffffffffff81111562000f1a5762000f1962000c84565b5b62000f26825462000ce2565b62000f3382828562000e58565b600060209050601f83116001811462000f6b576000841562000f56578287015190505b62000f62858262000ed5565b86555062000fd2565b601f19841662000f7b8662000d17565b60005b8281101562000fa55784890151825560018201915060208501945060208101905062000f7e565b8683101562000fc5578489015162000fc1601f89168262000eb5565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010458262000d9f565b9150620010528362000d9f565b92508262001065576200106462000fda565b5b828204905092915050565b60006020828403121562001089576200108862000bc8565b5b6000620010998482850162000c1b565b91505092915050565b620010ad8162000bed565b82525050565b6000604082019050620010ca6000830185620010a2565b620010d96020830184620010a2565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001129601f83620010e0565b91506200113682620010f1565b602082019050919050565b600060208201905081810360008301526200115c816200111a565b9050919050565b6000620011708262000d9f565b91506200117d8362000d9f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620011b557620011b462001009565b5b828201905092915050565b620011cb8162000d9f565b82525050565b6000602082019050620011e86000830184620011c0565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200124c602483620010e0565b91506200125982620011ee565b604082019050919050565b600060208201905081810360008301526200127f816200123d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620012e4602283620010e0565b9150620012f18262001286565b604082019050919050565b600060208201905081810360008301526200131781620012d5565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b60006200137c603883620010e0565b915062001389826200131e565b604082019050919050565b60006020820190508181036000830152620013af816200136d565b9050919050565b614a6b80620013c66000396000f3fe6080604052600436106102975760003560e01c806375b05c871161015a578063afa4f3b2116100c1578063e3084d9e1161007a578063e3084d9e14610a25578063e57f14e114610a62578063ec28438a14610a8b578063f2fde38b14610ab4578063f9d0831a14610add578063fb201b1d14610b065761029e565b8063afa4f3b214610903578063b62496f51461092c578063bb85c6d114610969578063bba405e614610992578063dd62ed3e146109bd578063e2f45605146109fa5761029e565b80639a7a23d6116101135780639a7a23d6146107cf5780639bc7c8c0146107f85780639c7d15a214610821578063a457c2d71461084c578063a9059cbb14610889578063ad5dff73146108c65761029e565b806375b05c87146106cf57806375f0a874146106fa57806379cc6790146107255780638c0b5e221461074e5780638da5cb5b1461077957806395d89b41146107a45761029e565b8063333e6f06116101fe5780634fbee193116101b75780634fbee193146105d5578063537df3b6146106125780636db794371461063b57806370a0823114610664578063715018a6146106a1578063751039fc146106b85761029e565b8063333e6f06146104c557806339509351146104f057806342966c681461052d57806344337ea114610556578063470624021461057f57806349bd5a5e146105aa5761029e565b806316a2f82a1161025057806316a2f82a146103b557806318160ddd146103de578063205187581461040957806323b872dd146104325780632b14ca561461046f578063313ce5671461049a5761029e565b8063064a59d0146102a357806306fdde03146102ce578063095ea7b3146102f95780630a7bade014610336578063167d95ac146103615780631694505e1461038a5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b1d565b6040516102c591906132cf565b60405180910390f35b3480156102da57600080fd5b506102e3610b30565b6040516102f09190613383565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b919061343e565b610bc2565b60405161032d91906132cf565b60405180910390f35b34801561034257600080fd5b5061034b610be5565b604051610358919061348d565b60405180910390f35b34801561036d57600080fd5b50610388600480360381019061038391906134d4565b610beb565b005b34801561039657600080fd5b5061039f610c3b565b6040516103ac9190613560565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d7919061357b565b610c61565b005b3480156103ea57600080fd5b506103f3610d50565b604051610400919061348d565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b91906135a8565b610d5a565b005b34801561043e57600080fd5b50610459600480360381019061045491906135d5565b610df3565b60405161046691906132cf565b60405180910390f35b34801561047b57600080fd5b50610484610e22565b604051610491919061348d565b60405180910390f35b3480156104a657600080fd5b506104af610e28565b6040516104bc9190613644565b60405180910390f35b3480156104d157600080fd5b506104da610e31565b6040516104e7919061348d565b60405180910390f35b3480156104fc57600080fd5b506105176004803603810190610512919061343e565b610e37565b60405161052491906132cf565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906135a8565b610e6e565b005b34801561056257600080fd5b5061057d6004803603810190610578919061357b565b610e82565b005b34801561058b57600080fd5b50610594610ee5565b6040516105a1919061348d565b60405180910390f35b3480156105b657600080fd5b506105bf610eeb565b6040516105cc919061366e565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f7919061357b565b610f11565b60405161060991906132cf565b60405180910390f35b34801561061e57600080fd5b506106396004803603810190610634919061357b565b610f67565b005b34801561064757600080fd5b50610662600480360381019061065d9190613689565b610fca565b005b34801561067057600080fd5b5061068b6004803603810190610686919061357b565b610fe0565b604051610698919061348d565b60405180910390f35b3480156106ad57600080fd5b506106b6611028565b005b3480156106c457600080fd5b506106cd61103c565b005b3480156106db57600080fd5b506106e4611061565b6040516106f191906132cf565b60405180910390f35b34801561070657600080fd5b5061070f611074565b60405161071c919061366e565b60405180910390f35b34801561073157600080fd5b5061074c6004803603810190610747919061343e565b61109a565b005b34801561075a57600080fd5b506107636110ba565b604051610770919061348d565b60405180910390f35b34801561078557600080fd5b5061078e6110c0565b60405161079b919061366e565b60405180910390f35b3480156107b057600080fd5b506107b96110ea565b6040516107c69190613383565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f191906136c9565b61117c565b005b34801561080457600080fd5b5061081f600480360381019061081a91906135a8565b611291565b005b34801561082d57600080fd5b506108366112a3565b604051610843919061348d565b60405180910390f35b34801561085857600080fd5b50610873600480360381019061086e919061343e565b6112a9565b60405161088091906132cf565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab919061343e565b611320565b6040516108bd91906132cf565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e8919061357b565b611343565b6040516108fa91906132cf565b60405180910390f35b34801561090f57600080fd5b5061092a600480360381019061092591906135a8565b611363565b005b34801561093857600080fd5b50610953600480360381019061094e919061357b565b611382565b60405161096091906132cf565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b919061357b565b6113a2565b005b34801561099e57600080fd5b506109a76114d7565b6040516109b4919061348d565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613709565b6114dd565b6040516109f1919061348d565b60405180910390f35b348015610a0657600080fd5b50610a0f611564565b604051610a1c919061348d565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190613709565b61156a565b604051610a5991906132cf565b60405180910390f35b348015610a6e57600080fd5b50610a896004803603810190610a84919061357b565b611653565b005b348015610a9757600080fd5b50610ab26004803603810190610aad91906135a8565b611786565b005b348015610ac057600080fd5b50610adb6004803603810190610ad6919061357b565b611798565b005b348015610ae957600080fd5b50610b046004803603810190610aff919061357b565b61181b565b005b348015610b1257600080fd5b50610b1b611a19565b005b600b60009054906101000a900460ff1681565b606060038054610b3f90613778565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6b90613778565b8015610bb85780601f10610b8d57610100808354040283529160200191610bb8565b820191906000526020600020905b815481529060010190602001808311610b9b57829003601f168201915b5050505050905090565b600080610bcd611a94565b9050610bda818585611a9c565b600191505092915050565b600e5481565b610bf3611c65565b80600b60016101000a81548160ff021916908315150217905550600b60019054906101000a900460ff168015610c2b57506000600c54145b15610c385742600c819055505b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c69611c65565b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cec906137f5565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600254905090565b610d62611c65565b60018111610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c90613861565b60405180910390fd5b600a811115610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de0906138cd565b60405180910390fd5b8060078190555050565b600080610dfe611a94565b9050610e0b858285611ce3565b610e16858585611d6f565b60019150509392505050565b60135481565b60006012905090565b60175481565b600080610e42611a94565b9050610e63818585610e5485896114dd565b610e5e919061391c565b611a9c565b600191505092915050565b610e7f610e79611a94565b82612627565b50565b610e8a611c65565b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60145481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f6f611c65565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610fd2611c65565b610fdc82826127fd565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611030611c65565b61103a60006128d4565b565b611044611c65565b6001601560006101000a81548160ff021916908315150217905550565b601560009054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110ac826110a6611a94565b83611ce3565b6110b68282612627565b5050565b60165481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546110f990613778565b80601f016020809104026020016040519081016040528092919081815260200182805461112590613778565b80156111725780601f1061114757610100808354040283529160200191611172565b820191906000526020600020905b81548152906001019060200180831161115557829003601f168201915b5050505050905090565b611184611c65565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b906139e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127a90613a76565b60405180910390fd5b61128d828261299a565b5050565b611299611c65565b8060178190555050565b60075481565b6000806112b4611a94565b905060006112c282866114dd565b905083811015611307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fe90613b08565b60405180910390fd5b6113148286868403611a9c565b60019250505092915050565b60008061132b611a94565b9050611338818585611d6f565b600191505092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b61136b611c65565b6000811161137857600080fd5b80600a8190555050565b60126020528060005260406000206000915054906101000a900460ff1681565b6113aa611c65565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361143a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143190613b9a565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516114cc919061366e565b60405180910390a150565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006115746110c0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806115df57506115b06110c0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061161557503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061164b57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905092915050565b61165b611c65565b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df90613c2c565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d93660405160405180910390a250565b61178e611c65565b8060168190555050565b6117a0611c65565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690613cbe565b60405180910390fd5b611818816128d4565b50565b611823611c65565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890613d2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611911573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561190b573d6000803e3d6000fd5b50611a16565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611951919061366e565b602060405180830381865afa15801561196e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119929190613d5f565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016119cf929190613d8c565b6020604051808303816000875af11580156119ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a129190613dca565b5050505b50565b611a21611c65565b60001515600b60009054906101000a900460ff16151514611a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6e90613e43565b60405180910390fd5b6001600b60006101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0290613ed5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613f67565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c58919061348d565b60405180910390a3505050565b611c6d611a94565b73ffffffffffffffffffffffffffffffffffffffff16611c8b6110c0565b73ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890613fd3565b60405180910390fd5b565b6000611cef84846114dd565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611d695781811015611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d529061403f565b60405180910390fd5b611d688484848403611a9c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd5906140d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4490614163565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed1906141cf565b60405180910390fd5b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e9061423b565b60405180910390fd5b600960149054906101000a900460ff16611f8757611f86838383612acd565b5b6000601454905060006013549050601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120395750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561208e57600b60009054906101000a900460ff1661208d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612084906142a7565b60405180910390fd5b5b6000830361209d575050612622565b6000600960149054906101000a900460ff16159050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121535750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561215d57600090505b600061216830610fe0565b90506000600a54821015801561217e5750600082115b80156121d45750601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121dd5750825b90508080156121f95750600960149054906101000a900460ff16155b156122ac576001600960146101000a81548160ff0219169083151502179055506000612246600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610fe0565b905060646007548261225891906142c7565b6122629190614350565b8311156122865760646007548261227991906142c7565b6122839190614350565b92505b61228f83612b61565b6000600960146101000a81548160ff021916908315150217905550505b600b60019054906101000a900460ff1680156122f457503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b801561232c57503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b1561235f57612339612ddc565b1561235e57612346612df6565b6000600f819055506000600e8190555042600c819055505b5b8280156123b95750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b80156123c55750600084115b15612405576000606485886123da91906142c7565b6123e49190614350565b905080876123f29190614381565b96506123ff893083612e7b565b506124a8565b82801561245f5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b801561246b5750600085115b156124a75760006064868861248091906142c7565b61248a9190614350565b905080876124989190614381565b96506124a5893083612e7b565b505b5b600b60019054906101000a900460ff1680156124f057503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b801561252857503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b1561261157600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16036125a05785600f6000828254612594919061391c565b92505081905550612610565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff160361260f5785600e6000828254612607919061391c565b925050819055505b5b5b61261c888888612e7b565b50505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268d90614427565b60405180910390fd5b6126a2826000836130fa565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271f906144b9565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461277f9190614381565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127e4919061348d565b60405180910390a36127f8836000846130ff565b505050565b600a821115612841576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128389061454b565b60405180910390fd5b600a811115612885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287c9061454b565b60405180910390fd5b81601381905550806014819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a16013546014546040516128c892919061456b565b60405180910390a15050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2390614606565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b601560009054906101000a900460ff16612b5c57612aeb838361156a565b158015612b425750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b5b57612b5081613104565b612b5a828261314c565b5b5b505050565b6000600267ffffffffffffffff811115612b7e57612b7d614626565b5b604051908082528060200260200182016040528015612bac5781602001602082028036833780820191505090505b5090503081600081518110612bc457612bc3614655565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8f9190614699565b81600181518110612ca357612ca2614655565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612d419594939291906147bf565b600060405180830381600087803b158015612d5b57600080fd5b505af1925050508015612d6c575060015b506000479050612d9e600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826131ff565b7f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998382604051612dcf92919061456b565b60405180910390a1505050565b6000610384600c54612dee919061391c565b421015905090565b6000600e54600f541115612e0d5760019050612e27565b600e54600f5403612e215760029050612e26565b600390505b5b80600d5414612e785780600d8190555060018103612e5057612e4b600260016127fd565b612e77565b60028103612e6957612e64600460006127fd565b612e76565b612e75600a60006127fd565b5b5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee1906140d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5090614163565b60405180910390fd5b612f648383836130fa565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe19061488b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461307d919061391c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130e1919061348d565b60405180910390a36130f48484846130ff565b50505050565b505050565b505050565b601654811115613149576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613140906148f7565b60405180910390fd5b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603156131fb57601754816131af84610fe0565b6131b9919061391c565b11156131fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f190614963565b60405180910390fd5b5b5050565b60008273ffffffffffffffffffffffffffffffffffffffff166108fc83604051613228906149b4565b600060405180830381858888f193505050503d8060008114613266576040519150601f19603f3d011682016040523d82523d6000602084013e61326b565b606091505b50509050806132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614a15565b60405180910390fd5b505050565b60008115159050919050565b6132c9816132b4565b82525050565b60006020820190506132e460008301846132c0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613324578082015181840152602081019050613309565b83811115613333576000848401525b50505050565b6000601f19601f8301169050919050565b6000613355826132ea565b61335f81856132f5565b935061336f818560208601613306565b61337881613339565b840191505092915050565b6000602082019050818103600083015261339d818461334a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133d5826133aa565b9050919050565b6133e5816133ca565b81146133f057600080fd5b50565b600081359050613402816133dc565b92915050565b6000819050919050565b61341b81613408565b811461342657600080fd5b50565b60008135905061343881613412565b92915050565b60008060408385031215613455576134546133a5565b5b6000613463858286016133f3565b925050602061347485828601613429565b9150509250929050565b61348781613408565b82525050565b60006020820190506134a2600083018461347e565b92915050565b6134b1816132b4565b81146134bc57600080fd5b50565b6000813590506134ce816134a8565b92915050565b6000602082840312156134ea576134e96133a5565b5b60006134f8848285016134bf565b91505092915050565b6000819050919050565b600061352661352161351c846133aa565b613501565b6133aa565b9050919050565b60006135388261350b565b9050919050565b600061354a8261352d565b9050919050565b61355a8161353f565b82525050565b60006020820190506135756000830184613551565b92915050565b600060208284031215613591576135906133a5565b5b600061359f848285016133f3565b91505092915050565b6000602082840312156135be576135bd6133a5565b5b60006135cc84828501613429565b91505092915050565b6000806000606084860312156135ee576135ed6133a5565b5b60006135fc868287016133f3565b935050602061360d868287016133f3565b925050604061361e86828701613429565b9150509250925092565b600060ff82169050919050565b61363e81613628565b82525050565b60006020820190506136596000830184613635565b92915050565b613668816133ca565b82525050565b6000602082019050613683600083018461365f565b92915050565b600080604083850312156136a05761369f6133a5565b5b60006136ae85828601613429565b92505060206136bf85828601613429565b9150509250929050565b600080604083850312156136e0576136df6133a5565b5b60006136ee858286016133f3565b92505060206136ff858286016134bf565b9150509250929050565b600080604083850312156137205761371f6133a5565b5b600061372e858286016133f3565b925050602061373f858286016133f3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061379057607f821691505b6020821081036137a3576137a2613749565b5b50919050565b7f4163636f756e7420616c726561647920696e636c756465640000000000000000600082015250565b60006137df6018836132f5565b91506137ea826137a9565b602082019050919050565b6000602082019050818103600083015261380e816137d2565b9050919050565b7f746f6f206c6f7700000000000000000000000000000000000000000000000000600082015250565b600061384b6007836132f5565b915061385682613815565b602082019050919050565b6000602082019050818103600083015261387a8161383e565b9050919050565b7f746f6f2068696768000000000000000000000000000000000000000000000000600082015250565b60006138b76008836132f5565b91506138c282613881565b602082019050919050565b600060208201905081810360008301526138e6816138aa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061392782613408565b915061393283613408565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613967576139666138ed565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006139ce6039836132f5565b91506139d982613972565b604082019050919050565b600060208201905081810360008301526139fd816139c1565b9050919050565b7f54686520706169722063616e6e6f7420626520746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a606023836132f5565b9150613a6b82613a04565b604082019050919050565b60006020820190508181036000830152613a8f81613a53565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613af26025836132f5565b9150613afd82613a96565b604082019050919050565b60006020820190508181036000830152613b2181613ae5565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b6000613b846028836132f5565b9150613b8f82613b28565b604082019050919050565b60006020820190508181036000830152613bb381613b77565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f7472756500000000000000000000000000000000000000000000000000000000602082015250565b6000613c166024836132f5565b9150613c2182613bba565b604082019050919050565b60006020820190508181036000830152613c4581613c09565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ca86026836132f5565b9150613cb382613c4c565b604082019050919050565b60006020820190508181036000830152613cd781613c9b565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e73600082015250565b6000613d146020836132f5565b9150613d1f82613cde565b602082019050919050565b60006020820190508181036000830152613d4381613d07565b9050919050565b600081519050613d5981613412565b92915050565b600060208284031215613d7557613d746133a5565b5b6000613d8384828501613d4a565b91505092915050565b6000604082019050613da1600083018561365f565b613dae602083018461347e565b9392505050565b600081519050613dc4816134a8565b92915050565b600060208284031215613de057613ddf6133a5565b5b6000613dee84828501613db5565b91505092915050565b7f54726164696e6720697320616c7265616479206f70656e210000000000000000600082015250565b6000613e2d6018836132f5565b9150613e3882613df7565b602082019050919050565b60006020820190508181036000830152613e5c81613e20565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ebf6024836132f5565b9150613eca82613e63565b604082019050919050565b60006020820190508181036000830152613eee81613eb2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f516022836132f5565b9150613f5c82613ef5565b604082019050919050565b60006020820190508181036000830152613f8081613f44565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fbd6020836132f5565b9150613fc882613f87565b602082019050919050565b60006020820190508181036000830152613fec81613fb0565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614029601d836132f5565b915061403482613ff3565b602082019050919050565b600060208201905081810360008301526140588161401c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140bb6025836132f5565b91506140c68261405f565b604082019050919050565b600060208201905081810360008301526140ea816140ae565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061414d6023836132f5565b9150614158826140f1565b604082019050919050565b6000602082019050818103600083015261417c81614140565b9050919050565b7f45524332303a2073656e64657220697320626c61636b6c697374656400000000600082015250565b60006141b9601c836132f5565b91506141c482614183565b602082019050919050565b600060208201905081810360008301526141e8816141ac565b9050919050565b7f45524332303a20726563697069656e7420697320626c61636b6c697374656400600082015250565b6000614225601f836132f5565b9150614230826141ef565b602082019050919050565b6000602082019050818103600083015261425481614218565b9050919050565b7f5472616465206973206e6f74206f70656e000000000000000000000000000000600082015250565b60006142916011836132f5565b915061429c8261425b565b602082019050919050565b600060208201905081810360008301526142c081614284565b9050919050565b60006142d282613408565b91506142dd83613408565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614316576143156138ed565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061435b82613408565b915061436683613408565b92508261437657614375614321565b5b828204905092915050565b600061438c82613408565b915061439783613408565b9250828210156143aa576143a96138ed565b5b828203905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006144116021836132f5565b915061441c826143b5565b604082019050919050565b6000602082019050818103600083015261444081614404565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006144a36022836132f5565b91506144ae82614447565b604082019050919050565b600060208201905081810360008301526144d281614496565b9050919050565b7f46656573206d757374206265206c657373207468616e206f7220657175616c2060008201527f746f203130250000000000000000000000000000000000000000000000000000602082015250565b60006145356026836132f5565b9150614540826144d9565b604082019050919050565b6000602082019050818103600083015261456481614528565b9050919050565b6000604082019050614580600083018561347e565b61458d602083018461347e565b9392505050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b60006145f06038836132f5565b91506145fb82614594565b604082019050919050565b6000602082019050818103600083015261461f816145e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614693816133dc565b92915050565b6000602082840312156146af576146ae6133a5565b5b60006146bd84828501614684565b91505092915050565b6000819050919050565b60006146eb6146e66146e1846146c6565b613501565b613408565b9050919050565b6146fb816146d0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614736816133ca565b82525050565b6000614748838361472d565b60208301905092915050565b6000602082019050919050565b600061476c82614701565b614776818561470c565b93506147818361471d565b8060005b838110156147b2578151614799888261473c565b97506147a483614754565b925050600181019050614785565b5085935050505092915050565b600060a0820190506147d4600083018861347e565b6147e160208301876146f2565b81810360408301526147f38186614761565b9050614802606083018561365f565b61480f608083018461347e565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006148756026836132f5565b915061488082614819565b604082019050919050565b600060208201905081810360008301526148a481614868565b9050919050565b7f416d6f756e742065786365656473206d61780000000000000000000000000000600082015250565b60006148e16012836132f5565b91506148ec826148ab565b602082019050919050565b60006020820190508181036000830152614910816148d4565b9050919050565b7f4d617820686f6c64696e67206578636565646564206d61780000000000000000600082015250565b600061494d6018836132f5565b915061495882614917565b602082019050919050565b6000602082019050818103600083015261497c81614940565b9050919050565b600081905092915050565b50565b600061499e600083614983565b91506149a98261498e565b600082019050919050565b60006149bf82614991565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b60006149ff6014836132f5565b9150614a0a826149c9565b602082019050919050565b60006020820190508181036000830152614a2e816149f2565b905091905056fea2646970667358221220725d7191d0ff1e0b415338ce932a272bbfa4bc7435e59e9317b935e3fecd01c764736f6c634300080f00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000006988ee396098e7f07d30204e4ea41c52ce959cb9

Deployed Bytecode

0x6080604052600436106102975760003560e01c806375b05c871161015a578063afa4f3b2116100c1578063e3084d9e1161007a578063e3084d9e14610a25578063e57f14e114610a62578063ec28438a14610a8b578063f2fde38b14610ab4578063f9d0831a14610add578063fb201b1d14610b065761029e565b8063afa4f3b214610903578063b62496f51461092c578063bb85c6d114610969578063bba405e614610992578063dd62ed3e146109bd578063e2f45605146109fa5761029e565b80639a7a23d6116101135780639a7a23d6146107cf5780639bc7c8c0146107f85780639c7d15a214610821578063a457c2d71461084c578063a9059cbb14610889578063ad5dff73146108c65761029e565b806375b05c87146106cf57806375f0a874146106fa57806379cc6790146107255780638c0b5e221461074e5780638da5cb5b1461077957806395d89b41146107a45761029e565b8063333e6f06116101fe5780634fbee193116101b75780634fbee193146105d5578063537df3b6146106125780636db794371461063b57806370a0823114610664578063715018a6146106a1578063751039fc146106b85761029e565b8063333e6f06146104c557806339509351146104f057806342966c681461052d57806344337ea114610556578063470624021461057f57806349bd5a5e146105aa5761029e565b806316a2f82a1161025057806316a2f82a146103b557806318160ddd146103de578063205187581461040957806323b872dd146104325780632b14ca561461046f578063313ce5671461049a5761029e565b8063064a59d0146102a357806306fdde03146102ce578063095ea7b3146102f95780630a7bade014610336578063167d95ac146103615780631694505e1461038a5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b1d565b6040516102c591906132cf565b60405180910390f35b3480156102da57600080fd5b506102e3610b30565b6040516102f09190613383565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b919061343e565b610bc2565b60405161032d91906132cf565b60405180910390f35b34801561034257600080fd5b5061034b610be5565b604051610358919061348d565b60405180910390f35b34801561036d57600080fd5b50610388600480360381019061038391906134d4565b610beb565b005b34801561039657600080fd5b5061039f610c3b565b6040516103ac9190613560565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d7919061357b565b610c61565b005b3480156103ea57600080fd5b506103f3610d50565b604051610400919061348d565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b91906135a8565b610d5a565b005b34801561043e57600080fd5b50610459600480360381019061045491906135d5565b610df3565b60405161046691906132cf565b60405180910390f35b34801561047b57600080fd5b50610484610e22565b604051610491919061348d565b60405180910390f35b3480156104a657600080fd5b506104af610e28565b6040516104bc9190613644565b60405180910390f35b3480156104d157600080fd5b506104da610e31565b6040516104e7919061348d565b60405180910390f35b3480156104fc57600080fd5b506105176004803603810190610512919061343e565b610e37565b60405161052491906132cf565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906135a8565b610e6e565b005b34801561056257600080fd5b5061057d6004803603810190610578919061357b565b610e82565b005b34801561058b57600080fd5b50610594610ee5565b6040516105a1919061348d565b60405180910390f35b3480156105b657600080fd5b506105bf610eeb565b6040516105cc919061366e565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f7919061357b565b610f11565b60405161060991906132cf565b60405180910390f35b34801561061e57600080fd5b506106396004803603810190610634919061357b565b610f67565b005b34801561064757600080fd5b50610662600480360381019061065d9190613689565b610fca565b005b34801561067057600080fd5b5061068b6004803603810190610686919061357b565b610fe0565b604051610698919061348d565b60405180910390f35b3480156106ad57600080fd5b506106b6611028565b005b3480156106c457600080fd5b506106cd61103c565b005b3480156106db57600080fd5b506106e4611061565b6040516106f191906132cf565b60405180910390f35b34801561070657600080fd5b5061070f611074565b60405161071c919061366e565b60405180910390f35b34801561073157600080fd5b5061074c6004803603810190610747919061343e565b61109a565b005b34801561075a57600080fd5b506107636110ba565b604051610770919061348d565b60405180910390f35b34801561078557600080fd5b5061078e6110c0565b60405161079b919061366e565b60405180910390f35b3480156107b057600080fd5b506107b96110ea565b6040516107c69190613383565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f191906136c9565b61117c565b005b34801561080457600080fd5b5061081f600480360381019061081a91906135a8565b611291565b005b34801561082d57600080fd5b506108366112a3565b604051610843919061348d565b60405180910390f35b34801561085857600080fd5b50610873600480360381019061086e919061343e565b6112a9565b60405161088091906132cf565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab919061343e565b611320565b6040516108bd91906132cf565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e8919061357b565b611343565b6040516108fa91906132cf565b60405180910390f35b34801561090f57600080fd5b5061092a600480360381019061092591906135a8565b611363565b005b34801561093857600080fd5b50610953600480360381019061094e919061357b565b611382565b60405161096091906132cf565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b919061357b565b6113a2565b005b34801561099e57600080fd5b506109a76114d7565b6040516109b4919061348d565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613709565b6114dd565b6040516109f1919061348d565b60405180910390f35b348015610a0657600080fd5b50610a0f611564565b604051610a1c919061348d565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190613709565b61156a565b604051610a5991906132cf565b60405180910390f35b348015610a6e57600080fd5b50610a896004803603810190610a84919061357b565b611653565b005b348015610a9757600080fd5b50610ab26004803603810190610aad91906135a8565b611786565b005b348015610ac057600080fd5b50610adb6004803603810190610ad6919061357b565b611798565b005b348015610ae957600080fd5b50610b046004803603810190610aff919061357b565b61181b565b005b348015610b1257600080fd5b50610b1b611a19565b005b600b60009054906101000a900460ff1681565b606060038054610b3f90613778565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6b90613778565b8015610bb85780601f10610b8d57610100808354040283529160200191610bb8565b820191906000526020600020905b815481529060010190602001808311610b9b57829003601f168201915b5050505050905090565b600080610bcd611a94565b9050610bda818585611a9c565b600191505092915050565b600e5481565b610bf3611c65565b80600b60016101000a81548160ff021916908315150217905550600b60019054906101000a900460ff168015610c2b57506000600c54145b15610c385742600c819055505b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c69611c65565b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cec906137f5565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600254905090565b610d62611c65565b60018111610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c90613861565b60405180910390fd5b600a811115610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de0906138cd565b60405180910390fd5b8060078190555050565b600080610dfe611a94565b9050610e0b858285611ce3565b610e16858585611d6f565b60019150509392505050565b60135481565b60006012905090565b60175481565b600080610e42611a94565b9050610e63818585610e5485896114dd565b610e5e919061391c565b611a9c565b600191505092915050565b610e7f610e79611a94565b82612627565b50565b610e8a611c65565b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60145481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f6f611c65565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610fd2611c65565b610fdc82826127fd565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611030611c65565b61103a60006128d4565b565b611044611c65565b6001601560006101000a81548160ff021916908315150217905550565b601560009054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110ac826110a6611a94565b83611ce3565b6110b68282612627565b5050565b60165481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546110f990613778565b80601f016020809104026020016040519081016040528092919081815260200182805461112590613778565b80156111725780601f1061114757610100808354040283529160200191611172565b820191906000526020600020905b81548152906001019060200180831161115557829003601f168201915b5050505050905090565b611184611c65565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b906139e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127a90613a76565b60405180910390fd5b61128d828261299a565b5050565b611299611c65565b8060178190555050565b60075481565b6000806112b4611a94565b905060006112c282866114dd565b905083811015611307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fe90613b08565b60405180910390fd5b6113148286868403611a9c565b60019250505092915050565b60008061132b611a94565b9050611338818585611d6f565b600191505092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b61136b611c65565b6000811161137857600080fd5b80600a8190555050565b60126020528060005260406000206000915054906101000a900460ff1681565b6113aa611c65565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361143a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143190613b9a565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516114cc919061366e565b60405180910390a150565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006115746110c0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806115df57506115b06110c0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061161557503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061164b57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905092915050565b61165b611c65565b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df90613c2c565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d93660405160405180910390a250565b61178e611c65565b8060168190555050565b6117a0611c65565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690613cbe565b60405180910390fd5b611818816128d4565b50565b611823611c65565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890613d2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611911573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561190b573d6000803e3d6000fd5b50611a16565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611951919061366e565b602060405180830381865afa15801561196e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119929190613d5f565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016119cf929190613d8c565b6020604051808303816000875af11580156119ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a129190613dca565b5050505b50565b611a21611c65565b60001515600b60009054906101000a900460ff16151514611a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6e90613e43565b60405180910390fd5b6001600b60006101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0290613ed5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613f67565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c58919061348d565b60405180910390a3505050565b611c6d611a94565b73ffffffffffffffffffffffffffffffffffffffff16611c8b6110c0565b73ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890613fd3565b60405180910390fd5b565b6000611cef84846114dd565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611d695781811015611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d529061403f565b60405180910390fd5b611d688484848403611a9c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd5906140d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4490614163565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed1906141cf565b60405180910390fd5b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e9061423b565b60405180910390fd5b600960149054906101000a900460ff16611f8757611f86838383612acd565b5b6000601454905060006013549050601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120395750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561208e57600b60009054906101000a900460ff1661208d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612084906142a7565b60405180910390fd5b5b6000830361209d575050612622565b6000600960149054906101000a900460ff16159050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121535750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561215d57600090505b600061216830610fe0565b90506000600a54821015801561217e5750600082115b80156121d45750601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121dd5750825b90508080156121f95750600960149054906101000a900460ff16155b156122ac576001600960146101000a81548160ff0219169083151502179055506000612246600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610fe0565b905060646007548261225891906142c7565b6122629190614350565b8311156122865760646007548261227991906142c7565b6122839190614350565b92505b61228f83612b61565b6000600960146101000a81548160ff021916908315150217905550505b600b60019054906101000a900460ff1680156122f457503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b801561232c57503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b1561235f57612339612ddc565b1561235e57612346612df6565b6000600f819055506000600e8190555042600c819055505b5b8280156123b95750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b80156123c55750600084115b15612405576000606485886123da91906142c7565b6123e49190614350565b905080876123f29190614381565b96506123ff893083612e7b565b506124a8565b82801561245f5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b801561246b5750600085115b156124a75760006064868861248091906142c7565b61248a9190614350565b905080876124989190614381565b96506124a5893083612e7b565b505b5b600b60019054906101000a900460ff1680156124f057503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b801561252857503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b1561261157600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16036125a05785600f6000828254612594919061391c565b92505081905550612610565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff160361260f5785600e6000828254612607919061391c565b925050819055505b5b5b61261c888888612e7b565b50505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268d90614427565b60405180910390fd5b6126a2826000836130fa565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271f906144b9565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461277f9190614381565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127e4919061348d565b60405180910390a36127f8836000846130ff565b505050565b600a821115612841576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128389061454b565b60405180910390fd5b600a811115612885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287c9061454b565b60405180910390fd5b81601381905550806014819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a16013546014546040516128c892919061456b565b60405180910390a15050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2390614606565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b601560009054906101000a900460ff16612b5c57612aeb838361156a565b158015612b425750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b5b57612b5081613104565b612b5a828261314c565b5b5b505050565b6000600267ffffffffffffffff811115612b7e57612b7d614626565b5b604051908082528060200260200182016040528015612bac5781602001602082028036833780820191505090505b5090503081600081518110612bc457612bc3614655565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8f9190614699565b81600181518110612ca357612ca2614655565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612d419594939291906147bf565b600060405180830381600087803b158015612d5b57600080fd5b505af1925050508015612d6c575060015b506000479050612d9e600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826131ff565b7f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998382604051612dcf92919061456b565b60405180910390a1505050565b6000610384600c54612dee919061391c565b421015905090565b6000600e54600f541115612e0d5760019050612e27565b600e54600f5403612e215760029050612e26565b600390505b5b80600d5414612e785780600d8190555060018103612e5057612e4b600260016127fd565b612e77565b60028103612e6957612e64600460006127fd565b612e76565b612e75600a60006127fd565b5b5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee1906140d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5090614163565b60405180910390fd5b612f648383836130fa565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe19061488b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461307d919061391c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130e1919061348d565b60405180910390a36130f48484846130ff565b50505050565b505050565b505050565b601654811115613149576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613140906148f7565b60405180910390fd5b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603156131fb57601754816131af84610fe0565b6131b9919061391c565b11156131fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f190614963565b60405180910390fd5b5b5050565b60008273ffffffffffffffffffffffffffffffffffffffff166108fc83604051613228906149b4565b600060405180830381858888f193505050503d8060008114613266576040519150601f19603f3d011682016040523d82523d6000602084013e61326b565b606091505b50509050806132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614a15565b60405180910390fd5b505050565b60008115159050919050565b6132c9816132b4565b82525050565b60006020820190506132e460008301846132c0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613324578082015181840152602081019050613309565b83811115613333576000848401525b50505050565b6000601f19601f8301169050919050565b6000613355826132ea565b61335f81856132f5565b935061336f818560208601613306565b61337881613339565b840191505092915050565b6000602082019050818103600083015261339d818461334a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133d5826133aa565b9050919050565b6133e5816133ca565b81146133f057600080fd5b50565b600081359050613402816133dc565b92915050565b6000819050919050565b61341b81613408565b811461342657600080fd5b50565b60008135905061343881613412565b92915050565b60008060408385031215613455576134546133a5565b5b6000613463858286016133f3565b925050602061347485828601613429565b9150509250929050565b61348781613408565b82525050565b60006020820190506134a2600083018461347e565b92915050565b6134b1816132b4565b81146134bc57600080fd5b50565b6000813590506134ce816134a8565b92915050565b6000602082840312156134ea576134e96133a5565b5b60006134f8848285016134bf565b91505092915050565b6000819050919050565b600061352661352161351c846133aa565b613501565b6133aa565b9050919050565b60006135388261350b565b9050919050565b600061354a8261352d565b9050919050565b61355a8161353f565b82525050565b60006020820190506135756000830184613551565b92915050565b600060208284031215613591576135906133a5565b5b600061359f848285016133f3565b91505092915050565b6000602082840312156135be576135bd6133a5565b5b60006135cc84828501613429565b91505092915050565b6000806000606084860312156135ee576135ed6133a5565b5b60006135fc868287016133f3565b935050602061360d868287016133f3565b925050604061361e86828701613429565b9150509250925092565b600060ff82169050919050565b61363e81613628565b82525050565b60006020820190506136596000830184613635565b92915050565b613668816133ca565b82525050565b6000602082019050613683600083018461365f565b92915050565b600080604083850312156136a05761369f6133a5565b5b60006136ae85828601613429565b92505060206136bf85828601613429565b9150509250929050565b600080604083850312156136e0576136df6133a5565b5b60006136ee858286016133f3565b92505060206136ff858286016134bf565b9150509250929050565b600080604083850312156137205761371f6133a5565b5b600061372e858286016133f3565b925050602061373f858286016133f3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061379057607f821691505b6020821081036137a3576137a2613749565b5b50919050565b7f4163636f756e7420616c726561647920696e636c756465640000000000000000600082015250565b60006137df6018836132f5565b91506137ea826137a9565b602082019050919050565b6000602082019050818103600083015261380e816137d2565b9050919050565b7f746f6f206c6f7700000000000000000000000000000000000000000000000000600082015250565b600061384b6007836132f5565b915061385682613815565b602082019050919050565b6000602082019050818103600083015261387a8161383e565b9050919050565b7f746f6f2068696768000000000000000000000000000000000000000000000000600082015250565b60006138b76008836132f5565b91506138c282613881565b602082019050919050565b600060208201905081810360008301526138e6816138aa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061392782613408565b915061393283613408565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613967576139666138ed565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006139ce6039836132f5565b91506139d982613972565b604082019050919050565b600060208201905081810360008301526139fd816139c1565b9050919050565b7f54686520706169722063616e6e6f7420626520746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a606023836132f5565b9150613a6b82613a04565b604082019050919050565b60006020820190508181036000830152613a8f81613a53565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613af26025836132f5565b9150613afd82613a96565b604082019050919050565b60006020820190508181036000830152613b2181613ae5565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b6000613b846028836132f5565b9150613b8f82613b28565b604082019050919050565b60006020820190508181036000830152613bb381613b77565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f7472756500000000000000000000000000000000000000000000000000000000602082015250565b6000613c166024836132f5565b9150613c2182613bba565b604082019050919050565b60006020820190508181036000830152613c4581613c09565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ca86026836132f5565b9150613cb382613c4c565b604082019050919050565b60006020820190508181036000830152613cd781613c9b565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e73600082015250565b6000613d146020836132f5565b9150613d1f82613cde565b602082019050919050565b60006020820190508181036000830152613d4381613d07565b9050919050565b600081519050613d5981613412565b92915050565b600060208284031215613d7557613d746133a5565b5b6000613d8384828501613d4a565b91505092915050565b6000604082019050613da1600083018561365f565b613dae602083018461347e565b9392505050565b600081519050613dc4816134a8565b92915050565b600060208284031215613de057613ddf6133a5565b5b6000613dee84828501613db5565b91505092915050565b7f54726164696e6720697320616c7265616479206f70656e210000000000000000600082015250565b6000613e2d6018836132f5565b9150613e3882613df7565b602082019050919050565b60006020820190508181036000830152613e5c81613e20565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ebf6024836132f5565b9150613eca82613e63565b604082019050919050565b60006020820190508181036000830152613eee81613eb2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f516022836132f5565b9150613f5c82613ef5565b604082019050919050565b60006020820190508181036000830152613f8081613f44565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fbd6020836132f5565b9150613fc882613f87565b602082019050919050565b60006020820190508181036000830152613fec81613fb0565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614029601d836132f5565b915061403482613ff3565b602082019050919050565b600060208201905081810360008301526140588161401c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140bb6025836132f5565b91506140c68261405f565b604082019050919050565b600060208201905081810360008301526140ea816140ae565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061414d6023836132f5565b9150614158826140f1565b604082019050919050565b6000602082019050818103600083015261417c81614140565b9050919050565b7f45524332303a2073656e64657220697320626c61636b6c697374656400000000600082015250565b60006141b9601c836132f5565b91506141c482614183565b602082019050919050565b600060208201905081810360008301526141e8816141ac565b9050919050565b7f45524332303a20726563697069656e7420697320626c61636b6c697374656400600082015250565b6000614225601f836132f5565b9150614230826141ef565b602082019050919050565b6000602082019050818103600083015261425481614218565b9050919050565b7f5472616465206973206e6f74206f70656e000000000000000000000000000000600082015250565b60006142916011836132f5565b915061429c8261425b565b602082019050919050565b600060208201905081810360008301526142c081614284565b9050919050565b60006142d282613408565b91506142dd83613408565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614316576143156138ed565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061435b82613408565b915061436683613408565b92508261437657614375614321565b5b828204905092915050565b600061438c82613408565b915061439783613408565b9250828210156143aa576143a96138ed565b5b828203905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006144116021836132f5565b915061441c826143b5565b604082019050919050565b6000602082019050818103600083015261444081614404565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006144a36022836132f5565b91506144ae82614447565b604082019050919050565b600060208201905081810360008301526144d281614496565b9050919050565b7f46656573206d757374206265206c657373207468616e206f7220657175616c2060008201527f746f203130250000000000000000000000000000000000000000000000000000602082015250565b60006145356026836132f5565b9150614540826144d9565b604082019050919050565b6000602082019050818103600083015261456481614528565b9050919050565b6000604082019050614580600083018561347e565b61458d602083018461347e565b9392505050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b60006145f06038836132f5565b91506145fb82614594565b604082019050919050565b6000602082019050818103600083015261461f816145e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614693816133dc565b92915050565b6000602082840312156146af576146ae6133a5565b5b60006146bd84828501614684565b91505092915050565b6000819050919050565b60006146eb6146e66146e1846146c6565b613501565b613408565b9050919050565b6146fb816146d0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614736816133ca565b82525050565b6000614748838361472d565b60208301905092915050565b6000602082019050919050565b600061476c82614701565b614776818561470c565b93506147818361471d565b8060005b838110156147b2578151614799888261473c565b97506147a483614754565b925050600181019050614785565b5085935050505092915050565b600060a0820190506147d4600083018861347e565b6147e160208301876146f2565b81810360408301526147f38186614761565b9050614802606083018561365f565b61480f608083018461347e565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006148756026836132f5565b915061488082614819565b604082019050919050565b600060208201905081810360008301526148a481614868565b9050919050565b7f416d6f756e742065786365656473206d61780000000000000000000000000000600082015250565b60006148e16012836132f5565b91506148ec826148ab565b602082019050919050565b60006020820190508181036000830152614910816148d4565b9050919050565b7f4d617820686f6c64696e67206578636565646564206d61780000000000000000600082015250565b600061494d6018836132f5565b915061495882614917565b602082019050919050565b6000602082019050818103600083015261497c81614940565b9050919050565b600081905092915050565b50565b600061499e600083614983565b91506149a98261498e565b600082019050919050565b60006149bf82614991565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b60006149ff6014836132f5565b9150614a0a826149c9565b602082019050919050565b60006020820190508181036000830152614a2e816149f2565b905091905056fea2646970667358221220725d7191d0ff1e0b415338ce932a272bbfa4bc7435e59e9317b935e3fecd01c764736f6c634300080f0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000006988ee396098e7f07d30204e4ea41c52ce959cb9

-----Decoded View---------------
Arg [0] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : operator (address): 0x6988ee396098E7F07D30204E4ea41c52Ce959cb9

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000006988ee396098e7f07d30204e4ea41c52ce959cb9


Deployed Bytecode Sourcemap

30936:11364:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31446:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7387:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9738:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31614:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36137:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31128:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35341:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8507:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40837:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10519:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32290:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8349:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32418:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11223:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18527:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37474:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32319:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31176:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35539:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37589:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36006:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8678:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20835:103;;;;;;;;;;;;;:::i;:::-;;41981:84;;;;;;;;;;;;;:::i;:::-;;32351:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31049:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18937:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32385:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20187:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7606:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34417:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42191:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31086:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11964:424;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9011:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32450:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40678:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31805:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37183:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31651:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9267:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31406:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41783:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35087:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42073:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21093:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33758:441;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33597:153;;;;;;;;;;;;;:::i;:::-;;31446:28;;;;;;;;;;;;;:::o;7387:100::-;7441:13;7474:5;7467:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7387:100;:::o;9738:201::-;9821:4;9838:13;9854:12;:10;:12::i;:::-;9838:28;;9877:32;9886:5;9893:7;9902:6;9877:8;:32::i;:::-;9927:4;9920:11;;;9738:201;;;;:::o;31614:30::-;;;;:::o;36137:246::-;20073:13;:11;:13::i;:::-;36233:6:::1;36212:18;;:27;;;;;;;;;;;;;;;;;;36254:18;;;;;;;;;;;:51;;;;;36304:1;36276:24;;:29;36254:51;36250:126;;;36349:15;36322:24;:42;;;;36250:126;36137:246:::0;:::o;31128:41::-;;;;;;;;;;;;;:::o;35341:190::-;20073:13;:11;:13::i;:::-;35419:19:::1;:28;35439:7;35419:28;;;;;;;;;;;;;;;;;;;;;;;;;35411:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35518:5;35487:19;:28;35507:7;35487:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;35341:190:::0;:::o;8507:108::-;8568:7;8595:12;;8588:19;;8507:108;:::o;40837:205::-;20073:13;:11;:13::i;:::-;40935:1:::1;40923:9;:13;40915:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;40980:2;40967:9;:15;;40959:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;41025:9;41006:16;:28;;;;40837:205:::0;:::o;10519:295::-;10650:4;10667:15;10685:12;:10;:12::i;:::-;10667:30;;10708:38;10724:4;10730:7;10739:6;10708:15;:38::i;:::-;10757:27;10767:4;10773:2;10777:6;10757:9;:27::i;:::-;10802:4;10795:11;;;10519:295;;;;;:::o;32290:22::-;;;;:::o;8349:93::-;8407:5;8432:2;8425:9;;8349:93;:::o;32418:25::-;;;;:::o;11223:238::-;11311:4;11328:13;11344:12;:10;:12::i;:::-;11328:28;;11367:64;11376:5;11383:7;11420:10;11392:25;11402:5;11409:7;11392:9;:25::i;:::-;:38;;;;:::i;:::-;11367:8;:64::i;:::-;11449:4;11442:11;;;11223:238;;;;:::o;18527:91::-;18583:27;18589:12;:10;:12::i;:::-;18603:6;18583:5;:27::i;:::-;18527:91;:::o;37474:107::-;20073:13;:11;:13::i;:::-;37569:4:::1;37545:12;:21;37558:7;37545:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;37474:107:::0;:::o;32319:21::-;;;;:::o;31176:29::-;;;;;;;;;;;;;:::o;35539:126::-;35605:4;35629:19;:28;35649:7;35629:28;;;;;;;;;;;;;;;;;;;;;;;;;35622:35;;35539:126;;;:::o;37589:113::-;20073:13;:11;:13::i;:::-;37689:5:::1;37665:12;:21;37678:7;37665:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37589:113:::0;:::o;36006:123::-;20073:13;:11;:13::i;:::-;36091:30:::1;36103:8;36113:7;36091:11;:30::i;:::-;36006:123:::0;;:::o;8678:127::-;8752:7;8779:9;:18;8789:7;8779:18;;;;;;;;;;;;;;;;8772:25;;8678:127;;;:::o;20835:103::-;20073:13;:11;:13::i;:::-;20900:30:::1;20927:1;20900:18;:30::i;:::-;20835:103::o:0;41981:84::-;20073:13;:11;:13::i;:::-;42053:4:::1;42035:15;;:22;;;;;;;;;;;;;;;;;;41981:84::o:0;32351:27::-;;;;;;;;;;;;;:::o;31049:30::-;;;;;;;;;;;;;:::o;18937:164::-;19014:46;19030:7;19039:12;:10;:12::i;:::-;19053:6;19014:15;:46::i;:::-;19071:22;19077:7;19086:6;19071:5;:22::i;:::-;18937:164;;:::o;32385:26::-;;;;:::o;20187:87::-;20233:7;20260:6;;;;;;;;;;;20253:13;;20187:87;:::o;7606:104::-;7662:13;7695:7;7688:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7606:104;:::o;34417:309::-;20073:13;:11;:13::i;:::-;34520::::1;;;;;;;;;;;34512:21;;:4;:21;;::::0;34504:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34626:1;34610:18;;:4;:18;;::::0;34602:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34677:41;34706:4;34712:5;34677:28;:41::i;:::-;34417:309:::0;;:::o;42191:106::-;20073:13;:11;:13::i;:::-;42278:11:::1;42265:10;:24;;;;42191:106:::0;:::o;31086:35::-;;;;:::o;11964:424::-;12057:4;12074:13;12090:12;:10;:12::i;:::-;12074:28;;12113:24;12140:25;12150:5;12157:7;12140:9;:25::i;:::-;12113:52;;12204:15;12184:16;:35;;12176:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;12289:60;12298:5;12305:7;12333:15;12314:16;:34;12289:8;:60::i;:::-;12376:4;12369:11;;;;11964:424;;;;:::o;9011:193::-;9090:4;9107:13;9123:12;:10;:12::i;:::-;9107:28;;9146;9156:5;9163:2;9167:6;9146:9;:28::i;:::-;9192:4;9185:11;;;9011:193;;;;:::o;32450:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;40678:151::-;20073:13;:11;:13::i;:::-;40778:1:::1;40766:9;:13;40758:22;;;::::0;::::1;;40812:9;40791:18;:30;;;;40678:151:::0;:::o;31805:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;37183:283::-;20073:13;:11;:13::i;:::-;37298:15:::1;;;;;;;;;;;37278:35;;:16;:35;;::::0;37270:88:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37387:16;37369:15;;:34;;;;;;;;;;;;;;;;;;37419:39;37442:15;;;;;;;;;;;37419:39;;;;;;:::i;:::-;;;;;;;;37183:283:::0;:::o;31651:29::-;;;;:::o;9267:151::-;9356:7;9383:11;:18;9395:5;9383:18;;;;;;;;;;;;;;;:27;9402:7;9383:27;;;;;;;;;;;;;;;;9376:34;;9267:151;;;;:::o;31406:33::-;;;;:::o;41783:190::-;41858:4;41892:7;:5;:7::i;:::-;41884:15;;:4;:15;;;:32;;;;41909:7;:5;:7::i;:::-;41903:13;;:2;:13;;;41884:32;:57;;;;41936:4;41920:21;;:4;:21;;;41884:57;:80;;;;41959:4;41945:19;;:2;:19;;;41884:80;41876:89;;41783:190;;;;:::o;35087:246::-;20073:13;:11;:13::i;:::-;35168:19:::1;:28;35188:7;35168:28;;;;;;;;;;;;;;;;;;;;;;;;;35167:29;35159:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;35279:4;35248:19;:28;35268:7;35248:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35317:7;35301:24;;;;;;;;;;;;35087:246:::0;:::o;42073:110::-;20073:13;:11;:13::i;:::-;42163:12:::1;42149:11;:26;;;;42073:110:::0;:::o;21093:201::-;20073:13;:11;:13::i;:::-;21202:1:::1;21182:22;;:8;:22;;::::0;21174:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21258:28;21277:8;21258:18;:28::i;:::-;21093:201:::0;:::o;33758:441::-;20073:13;:11;:13::i;:::-;33854:4:::1;33837:22;;:5;:22;;::::0;33829:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33928:3;33911:21;;:5;:21;;::::0;33907:126:::1;;33957:10;33949:28;;:51;33978:21;33949:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;34015:7;;33907:126;34043:17;34070:5;34043:33;;34087:15;34105:10;:20;;;34134:4;34105:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34087:53;;34151:10;:19;;;34171:10;34183:7;34151:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33818:381;;20097:1;33758:441:::0;:::o;33597:153::-;20073:13;:11;:13::i;:::-;33674:5:::1;33654:25;;:16;;;;;;;;;;;:25;;;33646:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33738:4;33719:16;;:23;;;;;;;;;;;;;;;;;;33597:153::o:0;5162:98::-;5215:7;5242:10;5235:17;;5162:98;:::o;15553:380::-;15706:1;15689:19;;:5;:19;;;15681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15787:1;15768:21;;:7;:21;;;15760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15871:6;15841:11;:18;15853:5;15841:18;;;;;;;;;;;;;;;:27;15860:7;15841:27;;;;;;;;;;;;;;;:36;;;;15909:7;15893:32;;15902:5;15893:32;;;15918:6;15893:32;;;;;;:::i;:::-;;;;;;;;15553:380;;;:::o;20352:132::-;20427:12;:10;:12::i;:::-;20416:23;;:7;:5;:7::i;:::-;:23;;;20408:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20352:132::o;16224:433::-;16359:24;16386:25;16396:5;16403:7;16386:9;:25::i;:::-;16359:52;;16446:17;16426:16;:37;16422:228;;16504:6;16484:16;:26;;16476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16576:51;16585:5;16592:7;16620:6;16601:16;:25;16576:8;:51::i;:::-;16422:228;16348:309;16224:433;;;:::o;37710:2316::-;37838:1;37822:18;;:4;:18;;;37814:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37911:1;37897:16;;:2;:16;;;37889:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37969:12;:18;37982:4;37969:18;;;;;;;;;;;;;;;;;;;;;;;;;37968:19;37960:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38036:12;:16;38049:2;38036:16;;;;;;;;;;;;;;;;;;;;;;;;;38035:17;38027:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38102:8;;;;;;;;;;;38097:58;;38123:24;38130:4;38136:2;38140:6;38123;:24::i;:::-;38097:58;38163:12;38178:6;;38163:21;;38191:13;38207:7;;38191:23;;38228:8;:14;38237:4;38228:14;;;;;;;;;;;;;;;;;;;;;;;;;38227:15;:32;;;;;38247:8;:12;38256:2;38247:12;;;;;;;;;;;;;;;;;;;;;;;;;38246:13;38227:32;38223:103;;;38280:16;;;;;;;;;;;38272:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;38223:103;38348:1;38338:6;:11;38334:42;;38362:7;;;;38334:42;38384:12;38400:8;;;;;;;;;;;38399:9;38384:24;;38421:19;:25;38441:4;38421:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38450:19;:23;38470:2;38450:23;;;;;;;;;;;;;;;;;;;;;;;;;38421:52;38417:92;;;38496:5;38486:15;;38417:92;38517:14;38534:24;38552:4;38534:9;:24::i;:::-;38517:41;;38567:12;38592:18;;38582:6;:28;;:42;;;;;38623:1;38614:6;:10;38582:42;:78;;;;;38629:25;:31;38655:4;38629:31;;;;;;;;;;;;;;;;;;;;;;;;;38628:32;38582:78;:89;;;;;38664:7;38582:89;38567:104;;38682:7;:29;;;;;38703:8;;;;;;;;;;;38702:9;38682:29;38678:325;;;38735:4;38724:8;;:15;;;;;;;;;;;;;;;;;;38750:19;38772:24;38782:13;;;;;;;;;;;38772:9;:24::i;:::-;38750:46;;38853:3;38834:16;;38820:11;:30;;;;:::i;:::-;:36;;;;:::i;:::-;38811:6;:45;38807:123;;;38915:3;38896:16;;38882:11;:30;;;;:::i;:::-;:36;;;;:::i;:::-;38873:45;;38807:123;38940:28;38961:6;38940:20;:28::i;:::-;38990:5;38979:8;;:16;;;;;;;;;;;;;;;;;;38713:290;38678:325;39015:18;;;;;;;;;;;:43;;;;;39053:4;39037:21;;:4;:21;;;;39015:43;:66;;;;;39076:4;39062:19;;:2;:19;;;;39015:66;39011:292;;;39098:22;:20;:22::i;:::-;39094:202;;;39137:23;:21;:23::i;:::-;39192:1;39175:14;:18;;;;39226:1;39208:15;:19;;;;39269:15;39242:24;:42;;;;39094:202;39011:292;39315:7;:30;;;;;39332:13;;;;;;;;;;;39326:19;;:2;:19;;;39315:30;:46;;;;;39360:1;39349:8;:12;39315:46;39311:411;;;39374:12;39411:3;39399:8;39390:6;:17;;;;:::i;:::-;39389:25;;;;:::i;:::-;39374:40;;39443:4;39434:6;:13;;;;:::i;:::-;39425:22;;39460:42;39476:4;39490;39497;39460:15;:42::i;:::-;39363:147;39311:411;;;39527:7;:32;;;;;39546:13;;;;;;;;;;;39538:21;;:4;:21;;;39527:32;:47;;;;;39573:1;39563:7;:11;39527:47;39523:199;;;39587:12;39623:3;39612:7;39603:6;:16;;;;:::i;:::-;39602:24;;;;:::i;:::-;39587:39;;39655:4;39646:6;:13;;;;:::i;:::-;39637:22;;39672:42;39688:4;39702;39709;39672:15;:42::i;:::-;39576:146;39523:199;39311:411;39734:18;;;;;;;;;;;:43;;;;;39772:4;39756:21;;:4;:21;;;;39734:43;:66;;;;;39795:4;39781:19;;:2;:19;;;;39734:66;39730:251;;;39825:13;;;;;;;;;;;39817:21;;:4;:21;;;39813:161;;39873:6;39855:14;;:24;;;;;;;:::i;:::-;;;;;;;;39813:161;;;39907:13;;;;;;;;;;;39901:19;;:2;:19;;;39897:77;;39956:6;39937:15;;:25;;;;;;;:::i;:::-;;;;;;;;39897:77;39813:161;39730:251;39989:33;40005:4;40011:2;40015:6;39989:15;:33::i;:::-;37807:2219;;;;;37710:2316;;;;:::o;14536:579::-;14639:1;14620:21;;:7;:21;;;14612:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14692:49;14713:7;14730:1;14734:6;14692:20;:49::i;:::-;14754:22;14779:9;:18;14789:7;14779:18;;;;;;;;;;;;;;;;14754:43;;14834:6;14816:14;:24;;14808:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14945:6;14928:14;:23;14907:9;:18;14917:7;14907:18;;;;;;;;;;;;;;;:44;;;;14985:6;14969:12;;:22;;;;;;;:::i;:::-;;;;;;;;15035:1;15009:37;;15018:7;15009:37;;;15039:6;15009:37;;;;;;:::i;:::-;;;;;;;;15059:48;15079:7;15096:1;15100:6;15059:19;:48::i;:::-;14601:514;14536:579;;:::o;35673:325::-;35768:2;35756:8;:14;;35748:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35843:2;35832:7;:13;;35824:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35909:8;35899:7;:18;;;;35937:7;35928:6;:16;;;;35962:28;35974:7;;35983:6;;35962:28;;;;;;;:::i;:::-;;;;;;;;35673:325;;:::o;21454:191::-;21528:16;21547:6;;;;;;;;;;;21528:25;;21573:8;21564:6;;:17;;;;;;;;;;;;;;;;;;21628:8;21597:40;;21618:8;21597:40;;;;;;;;;;;;21517:128;21454:191;:::o;34734:308::-;34860:5;34825:40;;:25;:31;34851:4;34825:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;34817:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;34971:5;34937:25;:31;34963:4;34937:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35028:5;34994:40;;35022:4;34994:40;;;;;;;;;;;;34734:308;;:::o;41050:342::-;41174:15;;;;;;;;;;;41169:216;;41213:28;41232:4;41238:2;41213:18;:28::i;:::-;41212:29;:46;;;;;41246:8;:12;41255:2;41246:12;;;;;;;;;;;;;;;;;;;;;;;;;41245:13;41212:46;41208:166;;;41279:25;41297:6;41279:17;:25::i;:::-;41325:33;41347:2;41351:6;41325:21;:33::i;:::-;41208:166;41169:216;41050:342;;;:::o;40066:604::-;40138:21;40176:1;40162:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40138:40;;40207:4;40189;40194:1;40189:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40233:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40223:4;40228:1;40223:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40272:15;;;;;;;;;;;:66;;;40353:11;40379:1;40395:4;40422;40442:15;40272:186;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40268:221;40501:18;40522:21;40501:42;;40554:45;40570:15;;;;;;;;;;;40588:10;40554:7;:45::i;:::-;40617;40638:11;40651:10;40617:45;;;;;;;:::i;:::-;;;;;;;;40125:545;;40066:604;:::o;36391:137::-;36445:4;36516:3;36489:24;;:30;;;;:::i;:::-;36470:15;:49;;36462:58;;36391:137;:::o;36536:639::-;36588:19;36641:15;;36624:14;;:32;36620:215;;;36687:1;36673:15;;36620:215;;;36728:15;;36710:14;;:33;36706:129;;36774:1;36760:15;;36706:129;;;36822:1;36808:15;;36706:129;36620:215;36870:11;36851:15;;:30;36847:321;;36916:11;36898:15;:29;;;;36963:1;36948:11;:16;36944:213;;36985:17;36997:1;37000;36985:11;:17::i;:::-;36944:213;;;37043:1;37028:11;:16;37024:133;;37065:17;37077:1;37080;37065:11;:17::i;:::-;37024:133;;;37123:18;37135:2;37139:1;37123:11;:18::i;:::-;37024:133;36944:213;36847:321;36577:598;36536:639::o;12858:659::-;13005:1;12989:18;;:4;:18;;;12981:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13082:1;13068:16;;:2;:16;;;13060:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;13137:38;13158:4;13164:2;13168:6;13137:20;:38::i;:::-;13188:19;13210:9;:15;13220:4;13210:15;;;;;;;;;;;;;;;;13188:37;;13259:6;13244:11;:21;;13236:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;13368:6;13354:11;:20;13336:9;:15;13346:4;13336:15;;;;;;;;;;;;;;;:38;;;;13409:6;13392:9;:13;13402:2;13392:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;13448:2;13433:26;;13442:4;13433:26;;;13452:6;13433:26;;;;;;:::i;:::-;;;;;;;;13472:37;13492:4;13498:2;13502:6;13472:19;:37::i;:::-;12970:547;12858:659;;;:::o;17257:125::-;;;;:::o;17986:124::-;;;;:::o;41400:130::-;41486:11;;41476:6;:21;;41468:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;41400:130;:::o;41538:237::-;41632:13;;;;;;;;;;;41626:19;;:2;:19;;;41622:58;41662:7;41622:58;41726:10;;41716:6;41700:13;41710:2;41700:9;:13::i;:::-;:22;;;;:::i;:::-;:36;;41692:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41538:237;;;:::o;34207:202::-;34288:12;34306:9;:14;;34326:4;34339:6;34306:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34287:63;;;34369:7;34361:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;34276:133;34207:202;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:99::-;486:6;520:5;514:12;504:22;;434:99;;;:::o;539:169::-;623:11;657:6;652:3;645:19;697:4;692:3;688:14;673:29;;539:169;;;;:::o;714:307::-;782:1;792:113;806:6;803:1;800:13;792:113;;;891:1;886:3;882:11;876:18;872:1;867:3;863:11;856:39;828:2;825:1;821:10;816:15;;792:113;;;923:6;920:1;917:13;914:101;;;1003:1;994:6;989:3;985:16;978:27;914:101;763:258;714:307;;;:::o;1027:102::-;1068:6;1119:2;1115:7;1110:2;1103:5;1099:14;1095:28;1085:38;;1027:102;;;:::o;1135:364::-;1223:3;1251:39;1284:5;1251:39;:::i;:::-;1306:71;1370:6;1365:3;1306:71;:::i;:::-;1299:78;;1386:52;1431:6;1426:3;1419:4;1412:5;1408:16;1386:52;:::i;:::-;1463:29;1485:6;1463:29;:::i;:::-;1458:3;1454:39;1447:46;;1227:272;1135:364;;;;:::o;1505:313::-;1618:4;1656:2;1645:9;1641:18;1633:26;;1705:9;1699:4;1695:20;1691:1;1680:9;1676:17;1669:47;1733:78;1806:4;1797:6;1733:78;:::i;:::-;1725:86;;1505:313;;;;:::o;1905:117::-;2014:1;2011;2004:12;2151:126;2188:7;2228:42;2221:5;2217:54;2206:65;;2151:126;;;:::o;2283:96::-;2320:7;2349:24;2367:5;2349:24;:::i;:::-;2338:35;;2283:96;;;:::o;2385:122::-;2458:24;2476:5;2458:24;:::i;:::-;2451:5;2448:35;2438:63;;2497:1;2494;2487:12;2438:63;2385:122;:::o;2513:139::-;2559:5;2597:6;2584:20;2575:29;;2613:33;2640:5;2613:33;:::i;:::-;2513:139;;;;:::o;2658:77::-;2695:7;2724:5;2713:16;;2658:77;;;:::o;2741:122::-;2814:24;2832:5;2814:24;:::i;:::-;2807:5;2804:35;2794:63;;2853:1;2850;2843:12;2794:63;2741:122;:::o;2869:139::-;2915:5;2953:6;2940:20;2931:29;;2969:33;2996:5;2969:33;:::i;:::-;2869:139;;;;:::o;3014:474::-;3082:6;3090;3139:2;3127:9;3118:7;3114:23;3110:32;3107:119;;;3145:79;;:::i;:::-;3107:119;3265:1;3290:53;3335:7;3326:6;3315:9;3311:22;3290:53;:::i;:::-;3280:63;;3236:117;3392:2;3418:53;3463:7;3454:6;3443:9;3439:22;3418:53;:::i;:::-;3408:63;;3363:118;3014:474;;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:116::-;3916:21;3931:5;3916:21;:::i;:::-;3909:5;3906:32;3896:60;;3952:1;3949;3942:12;3896:60;3846:116;:::o;3968:133::-;4011:5;4049:6;4036:20;4027:29;;4065:30;4089:5;4065:30;:::i;:::-;3968:133;;;;:::o;4107:323::-;4163:6;4212:2;4200:9;4191:7;4187:23;4183:32;4180:119;;;4218:79;;:::i;:::-;4180:119;4338:1;4363:50;4405:7;4396:6;4385:9;4381:22;4363:50;:::i;:::-;4353:60;;4309:114;4107:323;;;;:::o;4436:60::-;4464:3;4485:5;4478:12;;4436:60;;;:::o;4502:142::-;4552:9;4585:53;4603:34;4612:24;4630:5;4612:24;:::i;:::-;4603:34;:::i;:::-;4585:53;:::i;:::-;4572:66;;4502:142;;;:::o;4650:126::-;4700:9;4733:37;4764:5;4733:37;:::i;:::-;4720:50;;4650:126;;;:::o;4782:153::-;4859:9;4892:37;4923:5;4892:37;:::i;:::-;4879:50;;4782:153;;;:::o;4941:185::-;5055:64;5113:5;5055:64;:::i;:::-;5050:3;5043:77;4941:185;;:::o;5132:276::-;5252:4;5290:2;5279:9;5275:18;5267:26;;5303:98;5398:1;5387:9;5383:17;5374:6;5303:98;:::i;:::-;5132:276;;;;:::o;5414:329::-;5473:6;5522:2;5510:9;5501:7;5497:23;5493:32;5490:119;;;5528:79;;:::i;:::-;5490:119;5648:1;5673:53;5718:7;5709:6;5698:9;5694:22;5673:53;:::i;:::-;5663:63;;5619:117;5414:329;;;;:::o;5749:::-;5808:6;5857:2;5845:9;5836:7;5832:23;5828:32;5825:119;;;5863:79;;:::i;:::-;5825:119;5983:1;6008:53;6053:7;6044:6;6033:9;6029:22;6008:53;:::i;:::-;5998:63;;5954:117;5749:329;;;;:::o;6084:619::-;6161:6;6169;6177;6226:2;6214:9;6205:7;6201:23;6197:32;6194:119;;;6232:79;;:::i;:::-;6194:119;6352:1;6377:53;6422:7;6413:6;6402:9;6398:22;6377:53;:::i;:::-;6367:63;;6323:117;6479:2;6505:53;6550:7;6541:6;6530:9;6526:22;6505:53;:::i;:::-;6495:63;;6450:118;6607:2;6633:53;6678:7;6669:6;6658:9;6654:22;6633:53;:::i;:::-;6623:63;;6578:118;6084:619;;;;;:::o;6709:86::-;6744:7;6784:4;6777:5;6773:16;6762:27;;6709:86;;;:::o;6801:112::-;6884:22;6900:5;6884:22;:::i;:::-;6879:3;6872:35;6801:112;;:::o;6919:214::-;7008:4;7046:2;7035:9;7031:18;7023:26;;7059:67;7123:1;7112:9;7108:17;7099:6;7059:67;:::i;:::-;6919:214;;;;:::o;7139:118::-;7226:24;7244:5;7226:24;:::i;:::-;7221:3;7214:37;7139:118;;:::o;7263:222::-;7356:4;7394:2;7383:9;7379:18;7371:26;;7407:71;7475:1;7464:9;7460:17;7451:6;7407:71;:::i;:::-;7263:222;;;;:::o;7491:474::-;7559:6;7567;7616:2;7604:9;7595:7;7591:23;7587:32;7584:119;;;7622:79;;:::i;:::-;7584:119;7742:1;7767:53;7812:7;7803:6;7792:9;7788:22;7767:53;:::i;:::-;7757:63;;7713:117;7869:2;7895:53;7940:7;7931:6;7920:9;7916:22;7895:53;:::i;:::-;7885:63;;7840:118;7491:474;;;;;:::o;7971:468::-;8036:6;8044;8093:2;8081:9;8072:7;8068:23;8064:32;8061:119;;;8099:79;;:::i;:::-;8061:119;8219:1;8244:53;8289:7;8280:6;8269:9;8265:22;8244:53;:::i;:::-;8234:63;;8190:117;8346:2;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8317:115;7971:468;;;;;:::o;8445:474::-;8513:6;8521;8570:2;8558:9;8549:7;8545:23;8541:32;8538:119;;;8576:79;;:::i;:::-;8538:119;8696:1;8721:53;8766:7;8757:6;8746:9;8742:22;8721:53;:::i;:::-;8711:63;;8667:117;8823:2;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8794:118;8445:474;;;;;:::o;8925:180::-;8973:77;8970:1;8963:88;9070:4;9067:1;9060:15;9094:4;9091:1;9084:15;9111:320;9155:6;9192:1;9186:4;9182:12;9172:22;;9239:1;9233:4;9229:12;9260:18;9250:81;;9316:4;9308:6;9304:17;9294:27;;9250:81;9378:2;9370:6;9367:14;9347:18;9344:38;9341:84;;9397:18;;:::i;:::-;9341:84;9162:269;9111:320;;;:::o;9437:174::-;9577:26;9573:1;9565:6;9561:14;9554:50;9437:174;:::o;9617:366::-;9759:3;9780:67;9844:2;9839:3;9780:67;:::i;:::-;9773:74;;9856:93;9945:3;9856:93;:::i;:::-;9974:2;9969:3;9965:12;9958:19;;9617:366;;;:::o;9989:419::-;10155:4;10193:2;10182:9;10178:18;10170:26;;10242:9;10236:4;10232:20;10228:1;10217:9;10213:17;10206:47;10270:131;10396:4;10270:131;:::i;:::-;10262:139;;9989:419;;;:::o;10414:157::-;10554:9;10550:1;10542:6;10538:14;10531:33;10414:157;:::o;10577:365::-;10719:3;10740:66;10804:1;10799:3;10740:66;:::i;:::-;10733:73;;10815:93;10904:3;10815:93;:::i;:::-;10933:2;10928:3;10924:12;10917:19;;10577:365;;;:::o;10948:419::-;11114:4;11152:2;11141:9;11137:18;11129:26;;11201:9;11195:4;11191:20;11187:1;11176:9;11172:17;11165:47;11229:131;11355:4;11229:131;:::i;:::-;11221:139;;10948:419;;;:::o;11373:158::-;11513:10;11509:1;11501:6;11497:14;11490:34;11373:158;:::o;11537:365::-;11679:3;11700:66;11764:1;11759:3;11700:66;:::i;:::-;11693:73;;11775:93;11864:3;11775:93;:::i;:::-;11893:2;11888:3;11884:12;11877:19;;11537:365;;;:::o;11908:419::-;12074:4;12112:2;12101:9;12097:18;12089:26;;12161:9;12155:4;12151:20;12147:1;12136:9;12132:17;12125:47;12189:131;12315:4;12189:131;:::i;:::-;12181:139;;11908:419;;;:::o;12333:180::-;12381:77;12378:1;12371:88;12478:4;12475:1;12468:15;12502:4;12499:1;12492:15;12519:305;12559:3;12578:20;12596:1;12578:20;:::i;:::-;12573:25;;12612:20;12630:1;12612:20;:::i;:::-;12607:25;;12766:1;12698:66;12694:74;12691:1;12688:81;12685:107;;;12772:18;;:::i;:::-;12685:107;12816:1;12813;12809:9;12802:16;;12519:305;;;;:::o;12830:244::-;12970:34;12966:1;12958:6;12954:14;12947:58;13039:27;13034:2;13026:6;13022:15;13015:52;12830:244;:::o;13080:366::-;13222:3;13243:67;13307:2;13302:3;13243:67;:::i;:::-;13236:74;;13319:93;13408:3;13319:93;:::i;:::-;13437:2;13432:3;13428:12;13421:19;;13080:366;;;:::o;13452:419::-;13618:4;13656:2;13645:9;13641:18;13633:26;;13705:9;13699:4;13695:20;13691:1;13680:9;13676:17;13669:47;13733:131;13859:4;13733:131;:::i;:::-;13725:139;;13452:419;;;:::o;13877:222::-;14017:34;14013:1;14005:6;14001:14;13994:58;14086:5;14081:2;14073:6;14069:15;14062:30;13877:222;:::o;14105:366::-;14247:3;14268:67;14332:2;14327:3;14268:67;:::i;:::-;14261:74;;14344:93;14433:3;14344:93;:::i;:::-;14462:2;14457:3;14453:12;14446:19;;14105:366;;;:::o;14477:419::-;14643:4;14681:2;14670:9;14666:18;14658:26;;14730:9;14724:4;14720:20;14716:1;14705:9;14701:17;14694:47;14758:131;14884:4;14758:131;:::i;:::-;14750:139;;14477:419;;;:::o;14902:224::-;15042:34;15038:1;15030:6;15026:14;15019:58;15111:7;15106:2;15098:6;15094:15;15087:32;14902:224;:::o;15132:366::-;15274:3;15295:67;15359:2;15354:3;15295:67;:::i;:::-;15288:74;;15371:93;15460:3;15371:93;:::i;:::-;15489:2;15484:3;15480:12;15473:19;;15132:366;;;:::o;15504:419::-;15670:4;15708:2;15697:9;15693:18;15685:26;;15757:9;15751:4;15747:20;15743:1;15732:9;15728:17;15721:47;15785:131;15911:4;15785:131;:::i;:::-;15777:139;;15504:419;;;:::o;15929:227::-;16069:34;16065:1;16057:6;16053:14;16046:58;16138:10;16133:2;16125:6;16121:15;16114:35;15929:227;:::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:223::-;17099:34;17095:1;17087:6;17083:14;17076:58;17168:6;17163:2;17155:6;17151:15;17144:31;16959:223;:::o;17188:366::-;17330:3;17351:67;17415:2;17410:3;17351:67;:::i;:::-;17344:74;;17427:93;17516:3;17427:93;:::i;:::-;17545:2;17540:3;17536:12;17529:19;;17188:366;;;:::o;17560:419::-;17726:4;17764:2;17753:9;17749:18;17741:26;;17813:9;17807:4;17803:20;17799:1;17788:9;17784:17;17777:47;17841:131;17967:4;17841:131;:::i;:::-;17833:139;;17560:419;;;:::o;17985:225::-;18125:34;18121:1;18113:6;18109:14;18102:58;18194:8;18189:2;18181:6;18177:15;18170:33;17985:225;:::o;18216:366::-;18358:3;18379:67;18443:2;18438:3;18379:67;:::i;:::-;18372:74;;18455:93;18544:3;18455:93;:::i;:::-;18573:2;18568:3;18564:12;18557:19;;18216:366;;;:::o;18588:419::-;18754:4;18792:2;18781:9;18777:18;18769:26;;18841:9;18835:4;18831:20;18827:1;18816:9;18812:17;18805:47;18869:131;18995:4;18869:131;:::i;:::-;18861:139;;18588:419;;;:::o;19013:182::-;19153:34;19149:1;19141:6;19137:14;19130:58;19013:182;:::o;19201:366::-;19343:3;19364:67;19428:2;19423:3;19364:67;:::i;:::-;19357:74;;19440:93;19529:3;19440:93;:::i;:::-;19558:2;19553:3;19549:12;19542:19;;19201:366;;;:::o;19573:419::-;19739:4;19777:2;19766:9;19762:18;19754:26;;19826:9;19820:4;19816:20;19812:1;19801:9;19797:17;19790:47;19854:131;19980:4;19854:131;:::i;:::-;19846:139;;19573:419;;;:::o;19998:143::-;20055:5;20086:6;20080:13;20071:22;;20102:33;20129:5;20102:33;:::i;:::-;19998:143;;;;:::o;20147:351::-;20217:6;20266:2;20254:9;20245:7;20241:23;20237:32;20234:119;;;20272:79;;:::i;:::-;20234:119;20392:1;20417:64;20473:7;20464:6;20453:9;20449:22;20417:64;:::i;:::-;20407:74;;20363:128;20147:351;;;;:::o;20504:332::-;20625:4;20663:2;20652:9;20648:18;20640:26;;20676:71;20744:1;20733:9;20729:17;20720:6;20676:71;:::i;:::-;20757:72;20825:2;20814:9;20810:18;20801:6;20757:72;:::i;:::-;20504:332;;;;;:::o;20842:137::-;20896:5;20927:6;20921:13;20912:22;;20943:30;20967:5;20943:30;:::i;:::-;20842:137;;;;:::o;20985:345::-;21052:6;21101:2;21089:9;21080:7;21076:23;21072:32;21069:119;;;21107:79;;:::i;:::-;21069:119;21227:1;21252:61;21305:7;21296:6;21285:9;21281:22;21252:61;:::i;:::-;21242:71;;21198:125;20985:345;;;;:::o;21336:174::-;21476:26;21472:1;21464:6;21460:14;21453:50;21336:174;:::o;21516:366::-;21658:3;21679:67;21743:2;21738:3;21679:67;:::i;:::-;21672:74;;21755:93;21844:3;21755:93;:::i;:::-;21873:2;21868:3;21864:12;21857:19;;21516:366;;;:::o;21888:419::-;22054:4;22092:2;22081:9;22077:18;22069:26;;22141:9;22135:4;22131:20;22127:1;22116:9;22112:17;22105:47;22169:131;22295:4;22169:131;:::i;:::-;22161:139;;21888:419;;;:::o;22313:223::-;22453:34;22449:1;22441:6;22437:14;22430:58;22522:6;22517:2;22509:6;22505:15;22498:31;22313:223;:::o;22542:366::-;22684:3;22705:67;22769:2;22764:3;22705:67;:::i;:::-;22698:74;;22781:93;22870:3;22781:93;:::i;:::-;22899:2;22894:3;22890:12;22883:19;;22542:366;;;:::o;22914:419::-;23080:4;23118:2;23107:9;23103:18;23095:26;;23167:9;23161:4;23157:20;23153:1;23142:9;23138:17;23131:47;23195:131;23321:4;23195:131;:::i;:::-;23187:139;;22914:419;;;:::o;23339:221::-;23479:34;23475:1;23467:6;23463:14;23456:58;23548:4;23543:2;23535:6;23531:15;23524:29;23339:221;:::o;23566:366::-;23708:3;23729:67;23793:2;23788:3;23729:67;:::i;:::-;23722:74;;23805:93;23894:3;23805:93;:::i;:::-;23923:2;23918:3;23914:12;23907:19;;23566:366;;;:::o;23938:419::-;24104:4;24142:2;24131:9;24127:18;24119:26;;24191:9;24185:4;24181:20;24177:1;24166:9;24162:17;24155:47;24219:131;24345:4;24219:131;:::i;:::-;24211:139;;23938:419;;;:::o;24363:182::-;24503:34;24499:1;24491:6;24487:14;24480:58;24363:182;:::o;24551:366::-;24693:3;24714:67;24778:2;24773:3;24714:67;:::i;:::-;24707:74;;24790:93;24879:3;24790:93;:::i;:::-;24908:2;24903:3;24899:12;24892:19;;24551:366;;;:::o;24923:419::-;25089:4;25127:2;25116:9;25112:18;25104:26;;25176:9;25170:4;25166:20;25162:1;25151:9;25147:17;25140:47;25204:131;25330:4;25204:131;:::i;:::-;25196:139;;24923:419;;;:::o;25348:179::-;25488:31;25484:1;25476:6;25472:14;25465:55;25348:179;:::o;25533:366::-;25675:3;25696:67;25760:2;25755:3;25696:67;:::i;:::-;25689:74;;25772:93;25861:3;25772:93;:::i;:::-;25890:2;25885:3;25881:12;25874:19;;25533:366;;;:::o;25905:419::-;26071:4;26109:2;26098:9;26094:18;26086:26;;26158:9;26152:4;26148:20;26144:1;26133:9;26129:17;26122:47;26186:131;26312:4;26186:131;:::i;:::-;26178:139;;25905:419;;;:::o;26330:224::-;26470:34;26466:1;26458:6;26454:14;26447:58;26539:7;26534:2;26526:6;26522:15;26515:32;26330:224;:::o;26560:366::-;26702:3;26723:67;26787:2;26782:3;26723:67;:::i;:::-;26716:74;;26799:93;26888:3;26799:93;:::i;:::-;26917:2;26912:3;26908:12;26901:19;;26560:366;;;:::o;26932:419::-;27098:4;27136:2;27125:9;27121:18;27113:26;;27185:9;27179:4;27175:20;27171:1;27160:9;27156:17;27149:47;27213:131;27339:4;27213:131;:::i;:::-;27205:139;;26932:419;;;:::o;27357:222::-;27497:34;27493:1;27485:6;27481:14;27474:58;27566:5;27561:2;27553:6;27549:15;27542:30;27357:222;:::o;27585:366::-;27727:3;27748:67;27812:2;27807:3;27748:67;:::i;:::-;27741:74;;27824:93;27913:3;27824:93;:::i;:::-;27942:2;27937:3;27933:12;27926:19;;27585:366;;;:::o;27957:419::-;28123:4;28161:2;28150:9;28146:18;28138:26;;28210:9;28204:4;28200:20;28196:1;28185:9;28181:17;28174:47;28238:131;28364:4;28238:131;:::i;:::-;28230:139;;27957:419;;;:::o;28382:178::-;28522:30;28518:1;28510:6;28506:14;28499:54;28382:178;:::o;28566:366::-;28708:3;28729:67;28793:2;28788:3;28729:67;:::i;:::-;28722:74;;28805:93;28894:3;28805:93;:::i;:::-;28923:2;28918:3;28914:12;28907:19;;28566:366;;;:::o;28938:419::-;29104:4;29142:2;29131:9;29127:18;29119:26;;29191:9;29185:4;29181:20;29177:1;29166:9;29162:17;29155:47;29219:131;29345:4;29219:131;:::i;:::-;29211:139;;28938:419;;;:::o;29363:181::-;29503:33;29499:1;29491:6;29487:14;29480:57;29363:181;:::o;29550:366::-;29692:3;29713:67;29777:2;29772:3;29713:67;:::i;:::-;29706:74;;29789:93;29878:3;29789:93;:::i;:::-;29907:2;29902:3;29898:12;29891:19;;29550:366;;;:::o;29922:419::-;30088:4;30126:2;30115:9;30111:18;30103:26;;30175:9;30169:4;30165:20;30161:1;30150:9;30146:17;30139:47;30203:131;30329:4;30203:131;:::i;:::-;30195:139;;29922:419;;;:::o;30347:167::-;30487:19;30483:1;30475:6;30471:14;30464:43;30347:167;:::o;30520:366::-;30662:3;30683:67;30747:2;30742:3;30683:67;:::i;:::-;30676:74;;30759:93;30848:3;30759:93;:::i;:::-;30877:2;30872:3;30868:12;30861:19;;30520:366;;;:::o;30892:419::-;31058:4;31096:2;31085:9;31081:18;31073:26;;31145:9;31139:4;31135:20;31131:1;31120:9;31116:17;31109:47;31173:131;31299:4;31173:131;:::i;:::-;31165:139;;30892:419;;;:::o;31317:348::-;31357:7;31380:20;31398:1;31380:20;:::i;:::-;31375:25;;31414:20;31432:1;31414:20;:::i;:::-;31409:25;;31602:1;31534:66;31530:74;31527:1;31524:81;31519:1;31512:9;31505:17;31501:105;31498:131;;;31609:18;;:::i;:::-;31498:131;31657:1;31654;31650:9;31639:20;;31317:348;;;;:::o;31671:180::-;31719:77;31716:1;31709:88;31816:4;31813:1;31806:15;31840:4;31837:1;31830:15;31857:185;31897:1;31914:20;31932:1;31914:20;:::i;:::-;31909:25;;31948:20;31966:1;31948:20;:::i;:::-;31943:25;;31987:1;31977:35;;31992:18;;:::i;:::-;31977:35;32034:1;32031;32027:9;32022:14;;31857:185;;;;:::o;32048:191::-;32088:4;32108:20;32126:1;32108:20;:::i;:::-;32103:25;;32142:20;32160:1;32142:20;:::i;:::-;32137:25;;32181:1;32178;32175:8;32172:34;;;32186:18;;:::i;:::-;32172:34;32231:1;32228;32224:9;32216:17;;32048:191;;;;:::o;32245:220::-;32385:34;32381:1;32373:6;32369:14;32362:58;32454:3;32449:2;32441:6;32437:15;32430:28;32245:220;:::o;32471:366::-;32613:3;32634:67;32698:2;32693:3;32634:67;:::i;:::-;32627:74;;32710:93;32799:3;32710:93;:::i;:::-;32828:2;32823:3;32819:12;32812:19;;32471:366;;;:::o;32843:419::-;33009:4;33047:2;33036:9;33032:18;33024:26;;33096:9;33090:4;33086:20;33082:1;33071:9;33067:17;33060:47;33124:131;33250:4;33124:131;:::i;:::-;33116:139;;32843:419;;;:::o;33268:221::-;33408:34;33404:1;33396:6;33392:14;33385:58;33477:4;33472:2;33464:6;33460:15;33453:29;33268:221;:::o;33495:366::-;33637:3;33658:67;33722:2;33717:3;33658:67;:::i;:::-;33651:74;;33734:93;33823:3;33734:93;:::i;:::-;33852:2;33847:3;33843:12;33836:19;;33495:366;;;:::o;33867:419::-;34033:4;34071:2;34060:9;34056:18;34048:26;;34120:9;34114:4;34110:20;34106:1;34095:9;34091:17;34084:47;34148:131;34274:4;34148:131;:::i;:::-;34140:139;;33867:419;;;:::o;34292:225::-;34432:34;34428:1;34420:6;34416:14;34409:58;34501:8;34496:2;34488:6;34484:15;34477:33;34292:225;:::o;34523:366::-;34665:3;34686:67;34750:2;34745:3;34686:67;:::i;:::-;34679:74;;34762:93;34851:3;34762:93;:::i;:::-;34880:2;34875:3;34871:12;34864:19;;34523:366;;;:::o;34895:419::-;35061:4;35099:2;35088:9;35084:18;35076:26;;35148:9;35142:4;35138:20;35134:1;35123:9;35119:17;35112:47;35176:131;35302:4;35176:131;:::i;:::-;35168:139;;34895:419;;;:::o;35320:332::-;35441:4;35479:2;35468:9;35464:18;35456:26;;35492:71;35560:1;35549:9;35545:17;35536:6;35492:71;:::i;:::-;35573:72;35641:2;35630:9;35626:18;35617:6;35573:72;:::i;:::-;35320:332;;;;;:::o;35658:243::-;35798:34;35794:1;35786:6;35782:14;35775:58;35867:26;35862:2;35854:6;35850:15;35843:51;35658:243;:::o;35907:366::-;36049:3;36070:67;36134:2;36129:3;36070:67;:::i;:::-;36063:74;;36146:93;36235:3;36146:93;:::i;:::-;36264:2;36259:3;36255:12;36248:19;;35907:366;;;:::o;36279:419::-;36445:4;36483:2;36472:9;36468:18;36460:26;;36532:9;36526:4;36522:20;36518:1;36507:9;36503:17;36496:47;36560:131;36686:4;36560:131;:::i;:::-;36552:139;;36279:419;;;:::o;36704:180::-;36752:77;36749:1;36742:88;36849:4;36846:1;36839:15;36873:4;36870:1;36863:15;36890:180;36938:77;36935:1;36928:88;37035:4;37032:1;37025:15;37059:4;37056:1;37049:15;37076:143;37133:5;37164:6;37158:13;37149:22;;37180:33;37207:5;37180:33;:::i;:::-;37076:143;;;;:::o;37225:351::-;37295:6;37344:2;37332:9;37323:7;37319:23;37315:32;37312:119;;;37350:79;;:::i;:::-;37312:119;37470:1;37495:64;37551:7;37542:6;37531:9;37527:22;37495:64;:::i;:::-;37485:74;;37441:128;37225:351;;;;:::o;37582:85::-;37627:7;37656:5;37645:16;;37582:85;;;:::o;37673:158::-;37731:9;37764:61;37782:42;37791:32;37817:5;37791:32;:::i;:::-;37782:42;:::i;:::-;37764:61;:::i;:::-;37751:74;;37673:158;;;:::o;37837:147::-;37932:45;37971:5;37932:45;:::i;:::-;37927:3;37920:58;37837:147;;:::o;37990:114::-;38057:6;38091:5;38085:12;38075:22;;37990:114;;;:::o;38110:184::-;38209:11;38243:6;38238:3;38231:19;38283:4;38278:3;38274:14;38259:29;;38110:184;;;;:::o;38300:132::-;38367:4;38390:3;38382:11;;38420:4;38415:3;38411:14;38403:22;;38300:132;;;:::o;38438:108::-;38515:24;38533:5;38515:24;:::i;:::-;38510:3;38503:37;38438:108;;:::o;38552:179::-;38621:10;38642:46;38684:3;38676:6;38642:46;:::i;:::-;38720:4;38715:3;38711:14;38697:28;;38552:179;;;;:::o;38737:113::-;38807:4;38839;38834:3;38830:14;38822:22;;38737:113;;;:::o;38886:732::-;39005:3;39034:54;39082:5;39034:54;:::i;:::-;39104:86;39183:6;39178:3;39104:86;:::i;:::-;39097:93;;39214:56;39264:5;39214:56;:::i;:::-;39293:7;39324:1;39309:284;39334:6;39331:1;39328:13;39309:284;;;39410:6;39404:13;39437:63;39496:3;39481:13;39437:63;:::i;:::-;39430:70;;39523:60;39576:6;39523:60;:::i;:::-;39513:70;;39369:224;39356:1;39353;39349:9;39344:14;;39309:284;;;39313:14;39609:3;39602:10;;39010:608;;;38886:732;;;;:::o;39624:831::-;39887:4;39925:3;39914:9;39910:19;39902:27;;39939:71;40007:1;39996:9;39992:17;39983:6;39939:71;:::i;:::-;40020:80;40096:2;40085:9;40081:18;40072:6;40020:80;:::i;:::-;40147:9;40141:4;40137:20;40132:2;40121:9;40117:18;40110:48;40175:108;40278:4;40269:6;40175:108;:::i;:::-;40167:116;;40293:72;40361:2;40350:9;40346:18;40337:6;40293:72;:::i;:::-;40375:73;40443:3;40432:9;40428:19;40419:6;40375:73;:::i;:::-;39624:831;;;;;;;;:::o;40461:225::-;40601:34;40597:1;40589:6;40585:14;40578:58;40670:8;40665:2;40657:6;40653:15;40646:33;40461:225;:::o;40692:366::-;40834:3;40855:67;40919:2;40914:3;40855:67;:::i;:::-;40848:74;;40931:93;41020:3;40931:93;:::i;:::-;41049:2;41044:3;41040:12;41033:19;;40692:366;;;:::o;41064:419::-;41230:4;41268:2;41257:9;41253:18;41245:26;;41317:9;41311:4;41307:20;41303:1;41292:9;41288:17;41281:47;41345:131;41471:4;41345:131;:::i;:::-;41337:139;;41064:419;;;:::o;41489:168::-;41629:20;41625:1;41617:6;41613:14;41606:44;41489:168;:::o;41663:366::-;41805:3;41826:67;41890:2;41885:3;41826:67;:::i;:::-;41819:74;;41902:93;41991:3;41902:93;:::i;:::-;42020:2;42015:3;42011:12;42004:19;;41663:366;;;:::o;42035:419::-;42201:4;42239:2;42228:9;42224:18;42216:26;;42288:9;42282:4;42278:20;42274:1;42263:9;42259:17;42252:47;42316:131;42442:4;42316:131;:::i;:::-;42308:139;;42035:419;;;:::o;42460:174::-;42600:26;42596:1;42588:6;42584:14;42577:50;42460:174;:::o;42640:366::-;42782:3;42803:67;42867:2;42862:3;42803:67;:::i;:::-;42796:74;;42879:93;42968:3;42879:93;:::i;:::-;42997:2;42992:3;42988:12;42981:19;;42640:366;;;:::o;43012:419::-;43178:4;43216:2;43205:9;43201:18;43193:26;;43265:9;43259:4;43255:20;43251:1;43240:9;43236:17;43229:47;43293:131;43419:4;43293:131;:::i;:::-;43285:139;;43012:419;;;:::o;43437:147::-;43538:11;43575:3;43560:18;;43437:147;;;;:::o;43590:114::-;;:::o;43710:398::-;43869:3;43890:83;43971:1;43966:3;43890:83;:::i;:::-;43883:90;;43982:93;44071:3;43982:93;:::i;:::-;44100:1;44095:3;44091:11;44084:18;;43710:398;;;:::o;44114:379::-;44298:3;44320:147;44463:3;44320:147;:::i;:::-;44313:154;;44484:3;44477:10;;44114:379;;;:::o;44499:170::-;44639:22;44635:1;44627:6;44623:14;44616:46;44499:170;:::o;44675:366::-;44817:3;44838:67;44902:2;44897:3;44838:67;:::i;:::-;44831:74;;44914:93;45003:3;44914:93;:::i;:::-;45032:2;45027:3;45023:12;45016:19;;44675:366;;;:::o;45047:419::-;45213:4;45251:2;45240:9;45236:18;45228:26;;45300:9;45294:4;45290:20;45286:1;45275:9;45271:17;45264:47;45328:131;45454:4;45328:131;:::i;:::-;45320:139;;45047:419;;;:::o

Swarm Source

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