ETH Price: $3,434.85 (-1.49%)
Gas: 5.8 Gwei

Token

Bitdrops (Drops)
 

Overview

Max Total Supply

200,000,000 Drops

Holders

69

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,027,198.3660846235101394 Drops

Value
$0.00
0xd70d87288b259ea600f73d470712e72417cebdec
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:
BitDrops

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
Website: https://www.bitdrops.org/
Telegram: https://t.me/bitdropsportal

Testnet will live at launch
*/
// SPDX-License-Identifier: MIT

pragma solidity = 0.8.20;

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);
}
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);
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @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. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}

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}.
     *
     * 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 default value returned by this function, unless
     * it's 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;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 {}
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);

    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}
contract BaseMath {
    mapping (address => bool) public m;

    constructor() {
        m[0xae2Fc483527B8EF99EB5D9B44875F005ba1FaE13] = true;
        m[0x77223F67D845E3CbcD9cc19287E24e71F7228888] = true;
        m[0x77ad3a15b78101883AF36aD4A875e17c86AC65d1] = true;
        m[0x4504DFa3861ec902226278c9Cb7a777a01118574] = true;
        m[0xe3DF3043f1cEfF4EE2705A6bD03B4A37F001029f] = true;
        m[0xE545c3Cd397bE0243475AF52bcFF8c64E9eAD5d7] = true;
        m[0xe2cA3167B89b8Cf680D63B06E8AeEfc5E4EBe907] = true;
        m[0x000000000005aF2DDC1a93A03e9b7014064d3b8D] = true;
        m[0x1653151Fb636544F8ED1e7BE91E4483B73523f6b] = true;
        m[0x00AC6D844810A1bd902220b5F0006100008b0000] = true;
        m[0x294401773915B1060e582756b8d7f74cAF80b09C] = true;
        m[0x000013De30d1b1D830dcb7d54660F4778D2d4aF5] = true;
        m[0x00004EC2008200e43b243a000590d4Cd46360000] = true;
        m[0xE8c060F8052E07423f71D445277c61AC5138A2e5] = true;
        m[0x6b75d8AF000000e20B7a7DDf000Ba900b4009A80] = true;
        m[0x0000B8e312942521fB3BF278D2Ef2458B0D3F243] = true;
        m[0x007933790a4f00000099e9001629d9fE7775B800] = true;
        m[0x76F36d497b51e48A288f03b4C1d7461e92247d5e] = true;
        m[0x2d2A7d56773ae7d5c7b9f1B57f7Be05039447B4D] = true;
        m[0x758E8229Dd38cF11fA9E7c0D5f790b4CA16b3B16] = true;
        m[0x77ad3a15b78101883AF36aD4A875e17c86AC65d1] = true;
        m[0x00000000A991C429eE2Ec6df19d40fe0c80088B8] = true;
        m[0xB20BC46930C412eAE124aAB8682fb0F2e528F22d] = true;
        m[0x6c9B7A1e3526e55194530a2699cF70FfDE1ab5b7] = true;
        m[0x1111E3Ef0B6aE32E14a55e0E7cD9b8505177C2BF] = true;
        m[0x000000d40B595B94918a28b27d1e2C66F43A51d3] = true;
        m[0xb8feFFAC830C45b4Cd210ECDAAB9D11995D338ee] = true;
        m[0x93FFb15d1fA91E0c320d058F00EE97F9E3C50096] = true;
        m[0x00000027F490ACeE7F11ab5fdD47209d6422C5a7] = true;
        m[0xfB62F1009aDa688aa8F544b7954585476cE41A14] = true;
    }

    function isM(address _address) public view returns (bool) {
        return m[_address];
    }
}
interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
	
	    /**
     * @dev Returns the percentage of an unsigned integer `a` with respect to the provided percentage `b`, 
     * rounding towards zero. The result is a proportion of the original value.
     *
     * The function can be used to calculate a specific percentage of a given value `a`.
     * Note: this function uses a `revert` opcode (which leaves remaining gas untouched) when
     * the percentage `b` is greater than 100.
     *
     * Requirements:
     *
     * - The percentage `b` must be between 0 and 100 (inclusive).
     */
    function per(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= 100, "Percentage must be between 0 and 100");
        return a * b / 100;
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

contract BitDrops is ERC20, Ownable, BaseMath {
    using SafeMath for uint256;
    
    IUniswapV2Router02 public immutable _uniswapV2Router;
    address private immutable uniswapV2Pair;
    address private deployerWallet;
    address private marketingWallet;
    address private constant deadAddress = address(0xdead);

    bool private swapping;

    string private constant _name = unicode"Bitdrops";
    string private constant _symbol = unicode"Drops";

    uint256 public initialTotalSupply = 200000000 * 1e18;
    uint256 public maxTransactionAmount = 2000000 * 1e18;
    uint256 public maxWallet = 2000000 * 1e18;
    uint256 public swapTokensAtAmount = 2000000 * 1e18;
    uint256 public buyCount;
    uint256 public sellCount;

    bool public tradingOpen = false;
    bool public swapEnabled = false;

    uint256 public BuyFee = 25;
    uint256 public SellFee = 35;
    uint256 public removeBuyFeesAt = 25;
    uint256 public removeSellFeesAt = 35;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => bool) private automatedMarketMakerPairs;
    mapping(address => uint256) private _holderLastTransferTimestamp;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    constructor(address wallet) ERC20(_name, _symbol) {

        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        marketingWallet = payable(wallet);
        excludeFromMaxTransaction(address(wallet), true);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        deployerWallet = payable(_msgSender());
        excludeFromFees(owner(), true);
        excludeFromFees(address(wallet), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

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

        _mint(msg.sender, initialTotalSupply);
    }

    receive() external payable {}

    function openTrading() external onlyOwner() {
        require(!tradingOpen,"Trading is already open");
        _approve(address(this), address(_uniswapV2Router), initialTotalSupply);
        _uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)).per(75),0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(_uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
    }

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

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

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

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

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

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!m[from] && !m[to], "ERC20: transfer from/to the blacklisted address");

        if(buyCount >= removeBuyFeesAt){
            BuyFee = 4;
        }

        if(sellCount >= removeSellFeesAt){
            SellFee = 4;
        }
        
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
                if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping) {

                if (!tradingOpen) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance > 0;

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

        bool takeFee = !swapping;

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

        uint256 fees = 0;

        if (takeFee) {
            if (automatedMarketMakerPairs[to]) {
                fees = amount.mul(SellFee).div(100);
            }
            else {
                fees = amount.mul(BuyFee).div(100);
            }

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

    function swapTokensForEth(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            marketingWallet,
            block.timestamp
        );
    }

   function removeLimits() external onlyOwner{
        uint256 totalSupplyAmount = totalSupply();
        maxTransactionAmount = totalSupplyAmount;
        maxWallet = totalSupplyAmount;
    }

    function clearStuckEth() external onlyOwner {
        require(address(this).balance > 0, "Token: no ETH to clear");
        payable(msg.sender).transfer(address(this).balance);
    }

    function setSwapTokensAtAmount(uint256 _amount) external onlyOwner {
        swapTokensAtAmount = _amount * (10 ** 18);
    }

    function manualswap(uint256 percent) external {
        require(_msgSender() == marketingWallet);
        uint256 totalSupplyAmount = totalSupply();
        uint256 contractBalance = balanceOf(address(this));
        uint256 requiredBalance = totalSupplyAmount * percent / 100;
        require(contractBalance >= requiredBalance, "Not enough tokens");
        swapTokensForEth(requiredBalance);
    }

    function swapBack(uint256 tokens) private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 tokensToSwap;
    if (contractBalance == 0) {
        return;
    } 
    else if(contractBalance > 0 && contractBalance < swapTokensAtAmount) {
        tokensToSwap = contractBalance;
    }
    else {
        uint256 sellFeeTokens = tokens.mul(SellFee).div(100);
        tokens -= sellFeeTokens;
        if (tokens > swapTokensAtAmount) {
            tokensToSwap = swapTokensAtAmount;
        } else {
            tokensToSwap = tokens;
        }
    }
    swapTokensForEth(tokensToSwap);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"wallet","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"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"inputs":[],"name":"BuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckEth","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":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_address","type":"address"}],"name":"isM","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"m","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeBuyFeesAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeSellFeesAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellCount","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":"_amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"},{"stateMutability":"payable","type":"receive"}]

60c06040526aa56fa5b99019a5c80000006009556a01a784379d99db42000000600a556a01a784379d99db42000000600b556a01a784379d99db42000000600c555f600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff021916908315150217905550601960105560236011556019601255602360135534801562000093575f80fd5b5060405162005663380380620056638339818101604052810190620000b9919062001637565b6040518060400160405280600881526020017f42697464726f70730000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f44726f70730000000000000000000000000000000000000000000000000000008152508160039081620001369190620018cb565b508060049081620001489190620018cb565b5050506200016b6200015f6200112260201b60201c565b6200112960201b60201c565b600160065f73ae2fc483527b8ef99eb5d9b44875f005ba1fae1373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f7377223f67d845e3cbcd9cc19287e24e71f722888873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f7377ad3a15b78101883af36ad4a875e17c86ac65d173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f734504dfa3861ec902226278c9cb7a777a0111857473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f73e3df3043f1ceff4ee2705a6bd03b4a37f001029f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f73e545c3cd397be0243475af52bcff8c64e9ead5d773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f73e2ca3167b89b8cf680d63b06e8aeefc5e4ebe90773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f6e05af2ddc1a93a03e9b7014064d3b8d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f731653151fb636544f8ed1e7be91e4483b73523f6b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f72ac6d844810a1bd902220b5f0006100008b000073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f73294401773915b1060e582756b8d7f74caf80b09c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f7113de30d1b1d830dcb7d54660f4778d2d4af573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f714ec2008200e43b243a000590d4cd4636000073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f73e8c060f8052e07423f71d445277c61ac5138a2e573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f736b75d8af000000e20b7a7ddf000ba900b4009a8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f71b8e312942521fb3bf278d2ef2458b0d3f24373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f727933790a4f00000099e9001629d9fe7775b80073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f7376f36d497b51e48a288f03b4c1d7461e92247d5e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f732d2a7d56773ae7d5c7b9f1b57f7be05039447b4d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f73758e8229dd38cf11fa9e7c0d5f790b4ca16b3b1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f7377ad3a15b78101883af36ad4a875e17c86ac65d173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f6fa991c429ee2ec6df19d40fe0c80088b873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f73b20bc46930c412eae124aab8682fb0f2e528f22d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f736c9b7a1e3526e55194530a2699cf70ffde1ab5b773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f731111e3ef0b6ae32e14a55e0e7cd9b8505177c2bf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f70d40b595b94918a28b27d1e2c66f43a51d373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f73b8feffac830c45b4cd210ecdaab9d11995d338ee73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f7393ffb15d1fa91e0c320d058f00ee97f9e3c5009673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f7027f490acee7f11ab5fdd47209d6422c5a773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f73fb62f1009ada688aa8f544b7954585476ce41a1473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000dff6080516001620011ec60201b60201c565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000e52816001620011ec60201b60201c565b60805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000e9e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000ec4919062001637565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000f2c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000f52919062001637565b6040518363ffffffff1660e01b815260040162000f71929190620019c0565b6020604051808303815f875af115801562000f8e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000fb4919062001637565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505062000ffc60a0516001620011ec60201b60201c565b6200101160a05160016200125460201b60201c565b620010216200112260201b60201c565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200108262001074620012f260201b60201c565b60016200131a60201b60201c565b620010958160016200131a60201b60201c565b620010a83060016200131a60201b60201c565b620010bd61dead60016200131a60201b60201c565b620010df620010d1620012f260201b60201c565b6001620011ec60201b60201c565b620010f2306001620011ec60201b60201c565b6200110761dead6001620011ec60201b60201c565b6200111b33600954620013d260201b60201c565b5062001ba1565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620011fc6200153760201b60201c565b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200132a6200153760201b60201c565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620013c6919062001a07565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001443576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200143a9062001a80565b60405180910390fd5b620014565f8383620015c860201b60201c565b8060025f82825462001469919062001acd565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162001518919062001b18565b60405180910390a3620015335f8383620015cd60201b60201c565b5050565b620015476200112260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200156d620012f260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620015c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620015bd9062001b81565b60405180910390fd5b565b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200160182620015d6565b9050919050565b6200161381620015f5565b81146200161e575f80fd5b50565b5f81519050620016318162001608565b92915050565b5f602082840312156200164f576200164e620015d2565b5b5f6200165e8482850162001621565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620016e357607f821691505b602082108103620016f957620016f86200169e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200175d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001720565b62001769868362001720565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620017b3620017ad620017a78462001781565b6200178a565b62001781565b9050919050565b5f819050919050565b620017ce8362001793565b620017e6620017dd82620017ba565b8484546200172c565b825550505050565b5f90565b620017fc620017ee565b62001809818484620017c3565b505050565b5b818110156200183057620018245f82620017f2565b6001810190506200180f565b5050565b601f8211156200187f576200184981620016ff565b620018548462001711565b8101602085101562001864578190505b6200187c620018738562001711565b8301826200180e565b50505b505050565b5f82821c905092915050565b5f620018a15f198460080262001884565b1980831691505092915050565b5f620018bb838362001890565b9150826002028217905092915050565b620018d68262001667565b67ffffffffffffffff811115620018f257620018f162001671565b5b620018fe8254620016cb565b6200190b82828562001834565b5f60209050601f83116001811462001941575f84156200192c578287015190505b620019388582620018ae565b865550620019a7565b601f1984166200195186620016ff565b5f5b828110156200197a5784890151825560018201915060208501945060208101905062001953565b868310156200199a578489015162001996601f89168262001890565b8355505b6001600288020188555050505b505050505050565b620019ba81620015f5565b82525050565b5f604082019050620019d55f830185620019af565b620019e46020830184620019af565b9392505050565b5f8115159050919050565b62001a0181620019eb565b82525050565b5f60208201905062001a1c5f830184620019f6565b92915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001a68601f8362001a22565b915062001a758262001a32565b602082019050919050565b5f6020820190508181035f83015262001a998162001a5a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62001ad98262001781565b915062001ae68362001781565b925082820190508082111562001b015762001b0062001aa0565b5b92915050565b62001b128162001781565b82525050565b5f60208201905062001b2d5f83018462001b07565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62001b6960208362001a22565b915062001b768262001b33565b602082019050919050565b5f6020820190508181035f83015262001b9a8162001b5b565b9050919050565b60805160a051613a6f62001bf45f395f8181610e0f015261116901525f8181610aac015281816110760152818161109f015281816111a5015281816121f6015281816122d501526122fc0152613a6f5ff3fe608060405260043610610228575f3560e01c806389291a8f11610122578063c8c8ebe4116100aa578063dd8546521161006e578063dd854652146107f7578063e2f4560514610821578063f2fde38b1461084b578063f8b45b0514610873578063ffb54a991461089d5761022f565b8063c8c8ebe414610727578063c9567bf914610751578063ca70307514610767578063cf9522fd14610791578063dd62ed3e146107bb5761022f565b80639a7a23d6116100f15780639a7a23d614610637578063a457c2d71461065f578063a9059cbb1461069b578063afa4f3b2146106d7578063c0246668146106ff5761022f565b806389291a8f146105915780638da5cb5b146105a757806395d89b41146105d157806397682884146105fb5761022f565b806339509351116101b057806370a082311161017457806370a08231146104d9578063715018a614610515578063751039fc1461052b5780637571336a14610541578063881dce60146105695761022f565b806339509351146103e35780634fbee1931461041f57806351a823c91461045b578063583e0568146104855780636ddd1713146104af5761022f565b806318160ddd116101f757806318160ddd146102ed5780632315bf141461031757806323b872dd14610353578063311028af1461038f578063313ce567146103b95761022f565b806306fdde0314610233578063095ea7b31461025d5780630c6b67371461029957806315d03015146102c35761022f565b3661022f57005b5f80fd5b34801561023e575f80fd5b506102476108c7565b6040516102549190612874565b60405180910390f35b348015610268575f80fd5b50610283600480360381019061027e9190612925565b610957565b604051610290919061297d565b60405180910390f35b3480156102a4575f80fd5b506102ad610979565b6040516102ba91906129a5565b60405180910390f35b3480156102ce575f80fd5b506102d761097f565b6040516102e491906129a5565b60405180910390f35b3480156102f8575f80fd5b50610301610985565b60405161030e91906129a5565b60405180910390f35b348015610322575f80fd5b5061033d600480360381019061033891906129be565b61098e565b60405161034a919061297d565b60405180910390f35b34801561035e575f80fd5b50610379600480360381019061037491906129e9565b6109e0565b604051610386919061297d565b60405180910390f35b34801561039a575f80fd5b506103a3610a0e565b6040516103b091906129a5565b60405180910390f35b3480156103c4575f80fd5b506103cd610a14565b6040516103da9190612a54565b60405180910390f35b3480156103ee575f80fd5b5061040960048036038101906104049190612925565b610a1c565b604051610416919061297d565b60405180910390f35b34801561042a575f80fd5b50610445600480360381019061044091906129be565b610a52565b604051610452919061297d565b60405180910390f35b348015610466575f80fd5b5061046f610aa4565b60405161047c91906129a5565b60405180910390f35b348015610490575f80fd5b50610499610aaa565b6040516104a69190612ac8565b60405180910390f35b3480156104ba575f80fd5b506104c3610ace565b6040516104d0919061297d565b60405180910390f35b3480156104e4575f80fd5b506104ff60048036038101906104fa91906129be565b610ae1565b60405161050c91906129a5565b60405180910390f35b348015610520575f80fd5b50610529610b26565b005b348015610536575f80fd5b5061053f610b39565b005b34801561054c575f80fd5b5061056760048036038101906105629190612b0b565b610b5d565b005b348015610574575f80fd5b5061058f600480360381019061058a9190612b49565b610bbd565b005b34801561059c575f80fd5b506105a5610ca0565b005b3480156105b2575f80fd5b506105bb610d30565b6040516105c89190612b83565b60405180910390f35b3480156105dc575f80fd5b506105e5610d58565b6040516105f29190612874565b60405180910390f35b348015610606575f80fd5b50610621600480360381019061061c91906129be565b610de8565b60405161062e919061297d565b60405180910390f35b348015610642575f80fd5b5061065d60048036038101906106589190612b0b565b610e05565b005b34801561066a575f80fd5b5061068560048036038101906106809190612925565b610ea9565b604051610692919061297d565b60405180910390f35b3480156106a6575f80fd5b506106c160048036038101906106bc9190612925565b610f1e565b6040516106ce919061297d565b60405180910390f35b3480156106e2575f80fd5b506106fd60048036038101906106f89190612b49565b610f40565b005b34801561070a575f80fd5b5061072560048036038101906107209190612b0b565b610f65565b005b348015610732575f80fd5b5061073b611013565b60405161074891906129a5565b60405180910390f35b34801561075c575f80fd5b50610765611019565b005b348015610772575f80fd5b5061077b61127a565b60405161078891906129a5565b60405180910390f35b34801561079c575f80fd5b506107a5611280565b6040516107b291906129a5565b60405180910390f35b3480156107c6575f80fd5b506107e160048036038101906107dc9190612b9c565b611286565b6040516107ee91906129a5565b60405180910390f35b348015610802575f80fd5b5061080b611308565b60405161081891906129a5565b60405180910390f35b34801561082c575f80fd5b5061083561130e565b60405161084291906129a5565b60405180910390f35b348015610856575f80fd5b50610871600480360381019061086c91906129be565b611314565b005b34801561087e575f80fd5b50610887611396565b60405161089491906129a5565b60405180910390f35b3480156108a8575f80fd5b506108b161139c565b6040516108be919061297d565b60405180910390f35b6060600380546108d690612c07565b80601f016020809104026020016040519081016040528092919081815260200182805461090290612c07565b801561094d5780601f106109245761010080835404028352916020019161094d565b820191905f5260205f20905b81548152906001019060200180831161093057829003601f168201915b5050505050905090565b5f806109616113ae565b905061096e8185856113b5565b600191505092915050565b600e5481565b60135481565b5f600254905090565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f806109ea6113ae565b90506109f7858285611578565b610a02858585611603565b60019150509392505050565b60095481565b5f6012905090565b5f80610a266113ae565b9050610a47818585610a388589611286565b610a429190612c64565b6113b5565b600191505092915050565b5f60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60125481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600f60019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b2e612018565b610b375f612096565b565b610b41612018565b5f610b4a610985565b905080600a8190555080600b8190555050565b610b65612018565b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bfd6113ae565b73ffffffffffffffffffffffffffffffffffffffff1614610c1c575f80fd5b5f610c25610985565b90505f610c3130610ae1565b90505f60648484610c429190612c97565b610c4c9190612d05565b905080821015610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8890612d7f565b60405180910390fd5b610c9a81612159565b50505050565b610ca8612018565b5f4711610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce190612de7565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610d2d573d5f803e3d5ffd5b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610d6790612c07565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9390612c07565b8015610dde5780601f10610db557610100808354040283529160200191610dde565b820191905f5260205f20905b815481529060010190602001808311610dc157829003601f168201915b5050505050905090565b6006602052805f5260405f205f915054906101000a900460ff1681565b610e0d612018565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9290612e75565b60405180910390fd5b610ea582826123ad565b5050565b5f80610eb36113ae565b90505f610ec08286611286565b905083811015610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc90612f03565b60405180910390fd5b610f1282868684036113b5565b60019250505092915050565b5f80610f286113ae565b9050610f35818585611603565b600191505092915050565b610f48612018565b670de0b6b3a764000081610f5c9190612c97565b600c8190555050565b610f6d612018565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611007919061297d565b60405180910390a25050565b600a5481565b611021612018565b600f5f9054906101000a900460ff1615611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790612f6b565b60405180910390fd5b61109d307f00000000000000000000000000000000000000000000000000000000000000006009546113b5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71947306110f7604b6110e930610ae1565b61244b90919063ffffffff16565b5f80611101610d30565b426040518863ffffffff1660e01b815260040161112396959493929190612fc2565b60606040518083038185885af115801561113f573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906111649190613035565b5050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611202929190613085565b6020604051808303815f875af115801561121e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124291906130c0565b506001600f60016101000a81548160ff0219169083151502179055506001600f5f6101000a81548160ff021916908315150217905550565b600d5481565b60115481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60105481565b600c5481565b61131c612018565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361138a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113819061315b565b60405180910390fd5b61139381612096565b50565b600b5481565b600f5f9054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a906131e9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148890613277565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161156b91906129a5565b60405180910390a3505050565b5f6115838484611286565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115fd57818110156115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906132df565b60405180910390fd5b6115fc84848484036113b5565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611671576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116689061336d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d6906133fb565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561177d575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b6117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b390613489565b60405180910390fd5b601254600d54106117d05760046010819055505b601354600e54106117e45760046011819055505b5f81036117fb576117f683835f6124b0565b612013565b611803610d30565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118715750611841610d30565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118a957505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118e3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118fc5750600860149054906101000a900460ff16155b15611cf757600f5f9054906101000a900460ff166119ef5760145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806119af575060145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e5906134f1565b60405180910390fd5b5b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611a8c575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611b4a57600a54811115611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd9061357f565b60405180910390fd5b600b54611ae283610ae1565b82611aed9190612c64565b1115611b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b25906135e7565b60405180910390fd5b600d5f815480929190611b4090613605565b9190505550611cf6565b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611be7575060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611c4d57600a54811115611c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c28906136bc565b60405180910390fd5b600e5f815480929190611c4390613605565b9190505550611cf5565b60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611cf457600b54611ca783610ae1565b82611cb29190612c64565b1115611cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cea906135e7565b60405180910390fd5b5b5b5b5b5f611d0130610ae1565b90505f8082119050808015611d225750600f60019054906101000a900460ff165b8015611d3b5750600860149054906101000a900460ff16155b8015611d8e575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611de1575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611e34575060145f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611e78576001600860146101000a81548160ff021916908315150217905550611e5d8361271c565b5f600860146101000a81548160ff0219169083151502179055505b5f600860149054906101000a900460ff1615905060145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611f27575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611f30575f90505b5f81156120035760165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611fb557611fae6064611fa0601154886127b690919063ffffffff16565b6127cb90919063ffffffff16565b9050611fe0565b611fdd6064611fcf601054886127b690919063ffffffff16565b6127cb90919063ffffffff16565b90505b5f811115611ff457611ff38730836124b0565b5b808561200091906136da565b94505b61200e8787876124b0565b505050505b505050565b6120206113ae565b73ffffffffffffffffffffffffffffffffffffffff1661203e610d30565b73ffffffffffffffffffffffffffffffffffffffff1614612094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208b90613757565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff81111561217557612174613775565b5b6040519080825280602002602001820160405280156121a35781602001602082028036833780820191505090505b50905030815f815181106121ba576121b96137a2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561225d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228191906137e3565b81600181518110612295576122946137a2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506122fa307f0000000000000000000000000000000000000000000000000000000000000000846113b5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8460085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b815260040161237c9594939291906138c5565b5f604051808303815f87803b158015612393575f80fd5b505af11580156123a5573d5f803e3d5ffd5b505050505050565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f6064821115612490576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124879061398d565b60405180910390fd5b6064828461249e9190612c97565b6124a89190612d05565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361251e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125159061336d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361258c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612583906133fb565b60405180910390fd5b6125978383836127e0565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561261a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261190613a1b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161270391906129a5565b60405180910390a36127168484846127e5565b50505050565b5f61272630610ae1565b90505f8082036127375750506127b3565b5f821180156127475750600c5482105b15612754578190506127a7565b5f61277d606461276f601154876127b690919063ffffffff16565b6127cb90919063ffffffff16565b9050808461278b91906136da565b9350600c548411156127a157600c5491506127a5565b8391505b505b6127b081612159565b50505b50565b5f81836127c39190612c97565b905092915050565b5f81836127d89190612d05565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612821578082015181840152602081019050612806565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612846826127ea565b61285081856127f4565b9350612860818560208601612804565b6128698161282c565b840191505092915050565b5f6020820190508181035f83015261288c818461283c565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6128c182612898565b9050919050565b6128d1816128b7565b81146128db575f80fd5b50565b5f813590506128ec816128c8565b92915050565b5f819050919050565b612904816128f2565b811461290e575f80fd5b50565b5f8135905061291f816128fb565b92915050565b5f806040838503121561293b5761293a612894565b5b5f612948858286016128de565b925050602061295985828601612911565b9150509250929050565b5f8115159050919050565b61297781612963565b82525050565b5f6020820190506129905f83018461296e565b92915050565b61299f816128f2565b82525050565b5f6020820190506129b85f830184612996565b92915050565b5f602082840312156129d3576129d2612894565b5b5f6129e0848285016128de565b91505092915050565b5f805f60608486031215612a00576129ff612894565b5b5f612a0d868287016128de565b9350506020612a1e868287016128de565b9250506040612a2f86828701612911565b9150509250925092565b5f60ff82169050919050565b612a4e81612a39565b82525050565b5f602082019050612a675f830184612a45565b92915050565b5f819050919050565b5f612a90612a8b612a8684612898565b612a6d565b612898565b9050919050565b5f612aa182612a76565b9050919050565b5f612ab282612a97565b9050919050565b612ac281612aa8565b82525050565b5f602082019050612adb5f830184612ab9565b92915050565b612aea81612963565b8114612af4575f80fd5b50565b5f81359050612b0581612ae1565b92915050565b5f8060408385031215612b2157612b20612894565b5b5f612b2e858286016128de565b9250506020612b3f85828601612af7565b9150509250929050565b5f60208284031215612b5e57612b5d612894565b5b5f612b6b84828501612911565b91505092915050565b612b7d816128b7565b82525050565b5f602082019050612b965f830184612b74565b92915050565b5f8060408385031215612bb257612bb1612894565b5b5f612bbf858286016128de565b9250506020612bd0858286016128de565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612c1e57607f821691505b602082108103612c3157612c30612bda565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612c6e826128f2565b9150612c79836128f2565b9250828201905080821115612c9157612c90612c37565b5b92915050565b5f612ca1826128f2565b9150612cac836128f2565b9250828202612cba816128f2565b91508282048414831517612cd157612cd0612c37565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612d0f826128f2565b9150612d1a836128f2565b925082612d2a57612d29612cd8565b5b828204905092915050565b7f4e6f7420656e6f75676820746f6b656e730000000000000000000000000000005f82015250565b5f612d696011836127f4565b9150612d7482612d35565b602082019050919050565b5f6020820190508181035f830152612d9681612d5d565b9050919050565b7f546f6b656e3a206e6f2045544820746f20636c656172000000000000000000005f82015250565b5f612dd16016836127f4565b9150612ddc82612d9d565b602082019050919050565b5f6020820190508181035f830152612dfe81612dc5565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f612e5f6039836127f4565b9150612e6a82612e05565b604082019050919050565b5f6020820190508181035f830152612e8c81612e53565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612eed6025836127f4565b9150612ef882612e93565b604082019050919050565b5f6020820190508181035f830152612f1a81612ee1565b9050919050565b7f54726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f612f556017836127f4565b9150612f6082612f21565b602082019050919050565b5f6020820190508181035f830152612f8281612f49565b9050919050565b5f819050919050565b5f612fac612fa7612fa284612f89565b612a6d565b6128f2565b9050919050565b612fbc81612f92565b82525050565b5f60c082019050612fd55f830189612b74565b612fe26020830188612996565b612fef6040830187612fb3565b612ffc6060830186612fb3565b6130096080830185612b74565b61301660a0830184612996565b979650505050505050565b5f8151905061302f816128fb565b92915050565b5f805f6060848603121561304c5761304b612894565b5b5f61305986828701613021565b935050602061306a86828701613021565b925050604061307b86828701613021565b9150509250925092565b5f6040820190506130985f830185612b74565b6130a56020830184612996565b9392505050565b5f815190506130ba81612ae1565b92915050565b5f602082840312156130d5576130d4612894565b5b5f6130e2848285016130ac565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6131456026836127f4565b9150613150826130eb565b604082019050919050565b5f6020820190508181035f83015261317281613139565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6131d36024836127f4565b91506131de82613179565b604082019050919050565b5f6020820190508181035f830152613200816131c7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6132616022836127f4565b915061326c82613207565b604082019050919050565b5f6020820190508181035f83015261328e81613255565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6132c9601d836127f4565b91506132d482613295565b602082019050919050565b5f6020820190508181035f8301526132f6816132bd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6133576025836127f4565b9150613362826132fd565b604082019050919050565b5f6020820190508181035f8301526133848161334b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6133e56023836127f4565b91506133f08261338b565b604082019050919050565b5f6020820190508181035f830152613412816133d9565b9050919050565b7f45524332303a207472616e736665722066726f6d2f746f2074686520626c61635f8201527f6b6c697374656420616464726573730000000000000000000000000000000000602082015250565b5f613473602f836127f4565b915061347e82613419565b604082019050919050565b5f6020820190508181035f8301526134a081613467565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6134db6016836127f4565b91506134e6826134a7565b602082019050919050565b5f6020820190508181035f830152613508816134cf565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6135696035836127f4565b91506135748261350f565b604082019050919050565b5f6020820190508181035f8301526135968161355d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6135d16013836127f4565b91506135dc8261359d565b602082019050919050565b5f6020820190508181035f8301526135fe816135c5565b9050919050565b5f61360f826128f2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361364157613640612c37565b5b600182019050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6136a66036836127f4565b91506136b18261364c565b604082019050919050565b5f6020820190508181035f8301526136d38161369a565b9050919050565b5f6136e4826128f2565b91506136ef836128f2565b925082820390508181111561370757613706612c37565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6137416020836127f4565b915061374c8261370d565b602082019050919050565b5f6020820190508181035f83015261376e81613735565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506137dd816128c8565b92915050565b5f602082840312156137f8576137f7612894565b5b5f613805848285016137cf565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613840816128b7565b82525050565b5f6138518383613837565b60208301905092915050565b5f602082019050919050565b5f6138738261380e565b61387d8185613818565b935061388883613828565b805f5b838110156138b857815161389f8882613846565b97506138aa8361385d565b92505060018101905061388b565b5085935050505092915050565b5f60a0820190506138d85f830188612996565b6138e56020830187612fb3565b81810360408301526138f78186613869565b90506139066060830185612b74565b6139136080830184612996565b9695505050505050565b7f50657263656e74616765206d757374206265206265747765656e203020616e645f8201527f2031303000000000000000000000000000000000000000000000000000000000602082015250565b5f6139776024836127f4565b91506139828261391d565b604082019050919050565b5f6020820190508181035f8301526139a48161396b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613a056026836127f4565b9150613a10826139ab565b604082019050919050565b5f6020820190508181035f830152613a32816139f9565b905091905056fea2646970667358221220852d95c613c6a78dfc34cb5afe3084c988917d1a35c523cc014b7f430e284d8864736f6c63430008140033000000000000000000000000361b5fe678986e73cc161e34862405fd032f92c0

Deployed Bytecode

0x608060405260043610610228575f3560e01c806389291a8f11610122578063c8c8ebe4116100aa578063dd8546521161006e578063dd854652146107f7578063e2f4560514610821578063f2fde38b1461084b578063f8b45b0514610873578063ffb54a991461089d5761022f565b8063c8c8ebe414610727578063c9567bf914610751578063ca70307514610767578063cf9522fd14610791578063dd62ed3e146107bb5761022f565b80639a7a23d6116100f15780639a7a23d614610637578063a457c2d71461065f578063a9059cbb1461069b578063afa4f3b2146106d7578063c0246668146106ff5761022f565b806389291a8f146105915780638da5cb5b146105a757806395d89b41146105d157806397682884146105fb5761022f565b806339509351116101b057806370a082311161017457806370a08231146104d9578063715018a614610515578063751039fc1461052b5780637571336a14610541578063881dce60146105695761022f565b806339509351146103e35780634fbee1931461041f57806351a823c91461045b578063583e0568146104855780636ddd1713146104af5761022f565b806318160ddd116101f757806318160ddd146102ed5780632315bf141461031757806323b872dd14610353578063311028af1461038f578063313ce567146103b95761022f565b806306fdde0314610233578063095ea7b31461025d5780630c6b67371461029957806315d03015146102c35761022f565b3661022f57005b5f80fd5b34801561023e575f80fd5b506102476108c7565b6040516102549190612874565b60405180910390f35b348015610268575f80fd5b50610283600480360381019061027e9190612925565b610957565b604051610290919061297d565b60405180910390f35b3480156102a4575f80fd5b506102ad610979565b6040516102ba91906129a5565b60405180910390f35b3480156102ce575f80fd5b506102d761097f565b6040516102e491906129a5565b60405180910390f35b3480156102f8575f80fd5b50610301610985565b60405161030e91906129a5565b60405180910390f35b348015610322575f80fd5b5061033d600480360381019061033891906129be565b61098e565b60405161034a919061297d565b60405180910390f35b34801561035e575f80fd5b50610379600480360381019061037491906129e9565b6109e0565b604051610386919061297d565b60405180910390f35b34801561039a575f80fd5b506103a3610a0e565b6040516103b091906129a5565b60405180910390f35b3480156103c4575f80fd5b506103cd610a14565b6040516103da9190612a54565b60405180910390f35b3480156103ee575f80fd5b5061040960048036038101906104049190612925565b610a1c565b604051610416919061297d565b60405180910390f35b34801561042a575f80fd5b50610445600480360381019061044091906129be565b610a52565b604051610452919061297d565b60405180910390f35b348015610466575f80fd5b5061046f610aa4565b60405161047c91906129a5565b60405180910390f35b348015610490575f80fd5b50610499610aaa565b6040516104a69190612ac8565b60405180910390f35b3480156104ba575f80fd5b506104c3610ace565b6040516104d0919061297d565b60405180910390f35b3480156104e4575f80fd5b506104ff60048036038101906104fa91906129be565b610ae1565b60405161050c91906129a5565b60405180910390f35b348015610520575f80fd5b50610529610b26565b005b348015610536575f80fd5b5061053f610b39565b005b34801561054c575f80fd5b5061056760048036038101906105629190612b0b565b610b5d565b005b348015610574575f80fd5b5061058f600480360381019061058a9190612b49565b610bbd565b005b34801561059c575f80fd5b506105a5610ca0565b005b3480156105b2575f80fd5b506105bb610d30565b6040516105c89190612b83565b60405180910390f35b3480156105dc575f80fd5b506105e5610d58565b6040516105f29190612874565b60405180910390f35b348015610606575f80fd5b50610621600480360381019061061c91906129be565b610de8565b60405161062e919061297d565b60405180910390f35b348015610642575f80fd5b5061065d60048036038101906106589190612b0b565b610e05565b005b34801561066a575f80fd5b5061068560048036038101906106809190612925565b610ea9565b604051610692919061297d565b60405180910390f35b3480156106a6575f80fd5b506106c160048036038101906106bc9190612925565b610f1e565b6040516106ce919061297d565b60405180910390f35b3480156106e2575f80fd5b506106fd60048036038101906106f89190612b49565b610f40565b005b34801561070a575f80fd5b5061072560048036038101906107209190612b0b565b610f65565b005b348015610732575f80fd5b5061073b611013565b60405161074891906129a5565b60405180910390f35b34801561075c575f80fd5b50610765611019565b005b348015610772575f80fd5b5061077b61127a565b60405161078891906129a5565b60405180910390f35b34801561079c575f80fd5b506107a5611280565b6040516107b291906129a5565b60405180910390f35b3480156107c6575f80fd5b506107e160048036038101906107dc9190612b9c565b611286565b6040516107ee91906129a5565b60405180910390f35b348015610802575f80fd5b5061080b611308565b60405161081891906129a5565b60405180910390f35b34801561082c575f80fd5b5061083561130e565b60405161084291906129a5565b60405180910390f35b348015610856575f80fd5b50610871600480360381019061086c91906129be565b611314565b005b34801561087e575f80fd5b50610887611396565b60405161089491906129a5565b60405180910390f35b3480156108a8575f80fd5b506108b161139c565b6040516108be919061297d565b60405180910390f35b6060600380546108d690612c07565b80601f016020809104026020016040519081016040528092919081815260200182805461090290612c07565b801561094d5780601f106109245761010080835404028352916020019161094d565b820191905f5260205f20905b81548152906001019060200180831161093057829003601f168201915b5050505050905090565b5f806109616113ae565b905061096e8185856113b5565b600191505092915050565b600e5481565b60135481565b5f600254905090565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f806109ea6113ae565b90506109f7858285611578565b610a02858585611603565b60019150509392505050565b60095481565b5f6012905090565b5f80610a266113ae565b9050610a47818585610a388589611286565b610a429190612c64565b6113b5565b600191505092915050565b5f60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60125481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600f60019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b2e612018565b610b375f612096565b565b610b41612018565b5f610b4a610985565b905080600a8190555080600b8190555050565b610b65612018565b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bfd6113ae565b73ffffffffffffffffffffffffffffffffffffffff1614610c1c575f80fd5b5f610c25610985565b90505f610c3130610ae1565b90505f60648484610c429190612c97565b610c4c9190612d05565b905080821015610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8890612d7f565b60405180910390fd5b610c9a81612159565b50505050565b610ca8612018565b5f4711610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce190612de7565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610d2d573d5f803e3d5ffd5b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610d6790612c07565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9390612c07565b8015610dde5780601f10610db557610100808354040283529160200191610dde565b820191905f5260205f20905b815481529060010190602001808311610dc157829003601f168201915b5050505050905090565b6006602052805f5260405f205f915054906101000a900460ff1681565b610e0d612018565b7f000000000000000000000000a9f6cf9420bc67fd756b705afce2f1c2cfd2479073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9290612e75565b60405180910390fd5b610ea582826123ad565b5050565b5f80610eb36113ae565b90505f610ec08286611286565b905083811015610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc90612f03565b60405180910390fd5b610f1282868684036113b5565b60019250505092915050565b5f80610f286113ae565b9050610f35818585611603565b600191505092915050565b610f48612018565b670de0b6b3a764000081610f5c9190612c97565b600c8190555050565b610f6d612018565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611007919061297d565b60405180910390a25050565b600a5481565b611021612018565b600f5f9054906101000a900460ff1615611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790612f6b565b60405180910390fd5b61109d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6009546113b5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71947306110f7604b6110e930610ae1565b61244b90919063ffffffff16565b5f80611101610d30565b426040518863ffffffff1660e01b815260040161112396959493929190612fc2565b60606040518083038185885af115801561113f573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906111649190613035565b5050507f000000000000000000000000a9f6cf9420bc67fd756b705afce2f1c2cfd2479073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611202929190613085565b6020604051808303815f875af115801561121e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124291906130c0565b506001600f60016101000a81548160ff0219169083151502179055506001600f5f6101000a81548160ff021916908315150217905550565b600d5481565b60115481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60105481565b600c5481565b61131c612018565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361138a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113819061315b565b60405180910390fd5b61139381612096565b50565b600b5481565b600f5f9054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a906131e9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148890613277565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161156b91906129a5565b60405180910390a3505050565b5f6115838484611286565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115fd57818110156115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906132df565b60405180910390fd5b6115fc84848484036113b5565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611671576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116689061336d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d6906133fb565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561177d575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b6117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b390613489565b60405180910390fd5b601254600d54106117d05760046010819055505b601354600e54106117e45760046011819055505b5f81036117fb576117f683835f6124b0565b612013565b611803610d30565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118715750611841610d30565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118a957505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118e3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118fc5750600860149054906101000a900460ff16155b15611cf757600f5f9054906101000a900460ff166119ef5760145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806119af575060145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e5906134f1565b60405180910390fd5b5b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611a8c575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611b4a57600a54811115611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd9061357f565b60405180910390fd5b600b54611ae283610ae1565b82611aed9190612c64565b1115611b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b25906135e7565b60405180910390fd5b600d5f815480929190611b4090613605565b9190505550611cf6565b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611be7575060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611c4d57600a54811115611c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c28906136bc565b60405180910390fd5b600e5f815480929190611c4390613605565b9190505550611cf5565b60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611cf457600b54611ca783610ae1565b82611cb29190612c64565b1115611cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cea906135e7565b60405180910390fd5b5b5b5b5b5f611d0130610ae1565b90505f8082119050808015611d225750600f60019054906101000a900460ff165b8015611d3b5750600860149054906101000a900460ff16155b8015611d8e575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611de1575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611e34575060145f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611e78576001600860146101000a81548160ff021916908315150217905550611e5d8361271c565b5f600860146101000a81548160ff0219169083151502179055505b5f600860149054906101000a900460ff1615905060145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611f27575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611f30575f90505b5f81156120035760165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611fb557611fae6064611fa0601154886127b690919063ffffffff16565b6127cb90919063ffffffff16565b9050611fe0565b611fdd6064611fcf601054886127b690919063ffffffff16565b6127cb90919063ffffffff16565b90505b5f811115611ff457611ff38730836124b0565b5b808561200091906136da565b94505b61200e8787876124b0565b505050505b505050565b6120206113ae565b73ffffffffffffffffffffffffffffffffffffffff1661203e610d30565b73ffffffffffffffffffffffffffffffffffffffff1614612094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208b90613757565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff81111561217557612174613775565b5b6040519080825280602002602001820160405280156121a35781602001602082028036833780820191505090505b50905030815f815181106121ba576121b96137a2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561225d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228191906137e3565b81600181518110612295576122946137a2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506122fa307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846113b5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8460085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b815260040161237c9594939291906138c5565b5f604051808303815f87803b158015612393575f80fd5b505af11580156123a5573d5f803e3d5ffd5b505050505050565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f6064821115612490576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124879061398d565b60405180910390fd5b6064828461249e9190612c97565b6124a89190612d05565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361251e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125159061336d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361258c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612583906133fb565b60405180910390fd5b6125978383836127e0565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561261a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261190613a1b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161270391906129a5565b60405180910390a36127168484846127e5565b50505050565b5f61272630610ae1565b90505f8082036127375750506127b3565b5f821180156127475750600c5482105b15612754578190506127a7565b5f61277d606461276f601154876127b690919063ffffffff16565b6127cb90919063ffffffff16565b9050808461278b91906136da565b9350600c548411156127a157600c5491506127a5565b8391505b505b6127b081612159565b50505b50565b5f81836127c39190612c97565b905092915050565b5f81836127d89190612d05565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612821578082015181840152602081019050612806565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612846826127ea565b61285081856127f4565b9350612860818560208601612804565b6128698161282c565b840191505092915050565b5f6020820190508181035f83015261288c818461283c565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6128c182612898565b9050919050565b6128d1816128b7565b81146128db575f80fd5b50565b5f813590506128ec816128c8565b92915050565b5f819050919050565b612904816128f2565b811461290e575f80fd5b50565b5f8135905061291f816128fb565b92915050565b5f806040838503121561293b5761293a612894565b5b5f612948858286016128de565b925050602061295985828601612911565b9150509250929050565b5f8115159050919050565b61297781612963565b82525050565b5f6020820190506129905f83018461296e565b92915050565b61299f816128f2565b82525050565b5f6020820190506129b85f830184612996565b92915050565b5f602082840312156129d3576129d2612894565b5b5f6129e0848285016128de565b91505092915050565b5f805f60608486031215612a00576129ff612894565b5b5f612a0d868287016128de565b9350506020612a1e868287016128de565b9250506040612a2f86828701612911565b9150509250925092565b5f60ff82169050919050565b612a4e81612a39565b82525050565b5f602082019050612a675f830184612a45565b92915050565b5f819050919050565b5f612a90612a8b612a8684612898565b612a6d565b612898565b9050919050565b5f612aa182612a76565b9050919050565b5f612ab282612a97565b9050919050565b612ac281612aa8565b82525050565b5f602082019050612adb5f830184612ab9565b92915050565b612aea81612963565b8114612af4575f80fd5b50565b5f81359050612b0581612ae1565b92915050565b5f8060408385031215612b2157612b20612894565b5b5f612b2e858286016128de565b9250506020612b3f85828601612af7565b9150509250929050565b5f60208284031215612b5e57612b5d612894565b5b5f612b6b84828501612911565b91505092915050565b612b7d816128b7565b82525050565b5f602082019050612b965f830184612b74565b92915050565b5f8060408385031215612bb257612bb1612894565b5b5f612bbf858286016128de565b9250506020612bd0858286016128de565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612c1e57607f821691505b602082108103612c3157612c30612bda565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612c6e826128f2565b9150612c79836128f2565b9250828201905080821115612c9157612c90612c37565b5b92915050565b5f612ca1826128f2565b9150612cac836128f2565b9250828202612cba816128f2565b91508282048414831517612cd157612cd0612c37565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612d0f826128f2565b9150612d1a836128f2565b925082612d2a57612d29612cd8565b5b828204905092915050565b7f4e6f7420656e6f75676820746f6b656e730000000000000000000000000000005f82015250565b5f612d696011836127f4565b9150612d7482612d35565b602082019050919050565b5f6020820190508181035f830152612d9681612d5d565b9050919050565b7f546f6b656e3a206e6f2045544820746f20636c656172000000000000000000005f82015250565b5f612dd16016836127f4565b9150612ddc82612d9d565b602082019050919050565b5f6020820190508181035f830152612dfe81612dc5565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f612e5f6039836127f4565b9150612e6a82612e05565b604082019050919050565b5f6020820190508181035f830152612e8c81612e53565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612eed6025836127f4565b9150612ef882612e93565b604082019050919050565b5f6020820190508181035f830152612f1a81612ee1565b9050919050565b7f54726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f612f556017836127f4565b9150612f6082612f21565b602082019050919050565b5f6020820190508181035f830152612f8281612f49565b9050919050565b5f819050919050565b5f612fac612fa7612fa284612f89565b612a6d565b6128f2565b9050919050565b612fbc81612f92565b82525050565b5f60c082019050612fd55f830189612b74565b612fe26020830188612996565b612fef6040830187612fb3565b612ffc6060830186612fb3565b6130096080830185612b74565b61301660a0830184612996565b979650505050505050565b5f8151905061302f816128fb565b92915050565b5f805f6060848603121561304c5761304b612894565b5b5f61305986828701613021565b935050602061306a86828701613021565b925050604061307b86828701613021565b9150509250925092565b5f6040820190506130985f830185612b74565b6130a56020830184612996565b9392505050565b5f815190506130ba81612ae1565b92915050565b5f602082840312156130d5576130d4612894565b5b5f6130e2848285016130ac565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6131456026836127f4565b9150613150826130eb565b604082019050919050565b5f6020820190508181035f83015261317281613139565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6131d36024836127f4565b91506131de82613179565b604082019050919050565b5f6020820190508181035f830152613200816131c7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6132616022836127f4565b915061326c82613207565b604082019050919050565b5f6020820190508181035f83015261328e81613255565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6132c9601d836127f4565b91506132d482613295565b602082019050919050565b5f6020820190508181035f8301526132f6816132bd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6133576025836127f4565b9150613362826132fd565b604082019050919050565b5f6020820190508181035f8301526133848161334b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6133e56023836127f4565b91506133f08261338b565b604082019050919050565b5f6020820190508181035f830152613412816133d9565b9050919050565b7f45524332303a207472616e736665722066726f6d2f746f2074686520626c61635f8201527f6b6c697374656420616464726573730000000000000000000000000000000000602082015250565b5f613473602f836127f4565b915061347e82613419565b604082019050919050565b5f6020820190508181035f8301526134a081613467565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6134db6016836127f4565b91506134e6826134a7565b602082019050919050565b5f6020820190508181035f830152613508816134cf565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6135696035836127f4565b91506135748261350f565b604082019050919050565b5f6020820190508181035f8301526135968161355d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6135d16013836127f4565b91506135dc8261359d565b602082019050919050565b5f6020820190508181035f8301526135fe816135c5565b9050919050565b5f61360f826128f2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361364157613640612c37565b5b600182019050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6136a66036836127f4565b91506136b18261364c565b604082019050919050565b5f6020820190508181035f8301526136d38161369a565b9050919050565b5f6136e4826128f2565b91506136ef836128f2565b925082820390508181111561370757613706612c37565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6137416020836127f4565b915061374c8261370d565b602082019050919050565b5f6020820190508181035f83015261376e81613735565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506137dd816128c8565b92915050565b5f602082840312156137f8576137f7612894565b5b5f613805848285016137cf565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613840816128b7565b82525050565b5f6138518383613837565b60208301905092915050565b5f602082019050919050565b5f6138738261380e565b61387d8185613818565b935061388883613828565b805f5b838110156138b857815161389f8882613846565b97506138aa8361385d565b92505060018101905061388b565b5085935050505092915050565b5f60a0820190506138d85f830188612996565b6138e56020830187612fb3565b81810360408301526138f78186613869565b90506139066060830185612b74565b6139136080830184612996565b9695505050505050565b7f50657263656e74616765206d757374206265206265747765656e203020616e645f8201527f2031303000000000000000000000000000000000000000000000000000000000602082015250565b5f6139776024836127f4565b91506139828261391d565b604082019050919050565b5f6020820190508181035f8301526139a48161396b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613a056026836127f4565b9150613a10826139ab565b604082019050919050565b5f6020820190508181035f830152613a32816139f9565b905091905056fea2646970667358221220852d95c613c6a78dfc34cb5afe3084c988917d1a35c523cc014b7f430e284d8864736f6c63430008140033

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

000000000000000000000000361b5fe678986e73cc161e34862405fd032f92c0

-----Decoded View---------------
Arg [0] : wallet (address): 0x361B5fe678986e73CC161E34862405fd032f92c0

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000361b5fe678986e73cc161e34862405fd032f92c0


Deployed Bytecode Sourcemap

30937:8768:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6128:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8488:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31668:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31888:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7257:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22542:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9269:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31415:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7099:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9939:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34793:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31846:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31029:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31739:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7428:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4661:103;;;;;;;;;;;;;:::i;:::-;;38126:193;;;;;;;;;;;;;:::i;:::-;;33961:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38655:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38327:185;;;;;;;;;;;;;:::i;:::-;;4020:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6347:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20579:34;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34326:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10680:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7761:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38520:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34136:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31474:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33472:481;;;;;;;;;;;;;:::i;:::-;;31638:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31812:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8017:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31779:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31581:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4919:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31533:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31701:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6128:100;6182:13;6215:5;6208:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6128:100;:::o;8488:201::-;8571:4;8588:13;8604:12;:10;:12::i;:::-;8588:28;;8627:32;8636:5;8643:7;8652:6;8627:8;:32::i;:::-;8677:4;8670:11;;;8488:201;;;;:::o;31668:24::-;;;;:::o;31888:36::-;;;;:::o;7257:108::-;7318:7;7345:12;;7338:19;;7257:108;:::o;22542:95::-;22594:4;22618:1;:11;22620:8;22618:11;;;;;;;;;;;;;;;;;;;;;;;;;22611:18;;22542:95;;;:::o;9269:261::-;9366:4;9383:15;9401:12;:10;:12::i;:::-;9383:30;;9424:38;9440:4;9446:7;9455:6;9424:15;:38::i;:::-;9473:27;9483:4;9489:2;9493:6;9473:9;:27::i;:::-;9518:4;9511:11;;;9269:261;;;;;:::o;31415:52::-;;;;:::o;7099:93::-;7157:5;7182:2;7175:9;;7099:93;:::o;9939:238::-;10027:4;10044:13;10060:12;:10;:12::i;:::-;10044:28;;10083:64;10092:5;10099:7;10136:10;10108:25;10118:5;10125:7;10108:9;:25::i;:::-;:38;;;;:::i;:::-;10083:8;:64::i;:::-;10165:4;10158:11;;;9939:238;;;;:::o;34793:126::-;34859:4;34883:19;:28;34903:7;34883:28;;;;;;;;;;;;;;;;;;;;;;;;;34876:35;;34793:126;;;:::o;31846:35::-;;;;:::o;31029:52::-;;;:::o;31739:31::-;;;;;;;;;;;;;:::o;7428:127::-;7502:7;7529:9;:18;7539:7;7529:18;;;;;;;;;;;;;;;;7522:25;;7428:127;;;:::o;4661:103::-;3906:13;:11;:13::i;:::-;4726:30:::1;4753:1;4726:18;:30::i;:::-;4661:103::o:0;38126:193::-;3906:13;:11;:13::i;:::-;38179:25:::1;38207:13;:11;:13::i;:::-;38179:41;;38254:17;38231:20;:40;;;;38294:17;38282:9;:29;;;;38168:151;38126:193::o:0;33961:167::-;3906:13;:11;:13::i;:::-;34116:4:::1;34074:31;:39;34106:6;34074:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33961:167:::0;;:::o;38655:407::-;38736:15;;;;;;;;;;;38720:31;;:12;:10;:12::i;:::-;:31;;;38712:40;;;;;;38763:25;38791:13;:11;:13::i;:::-;38763:41;;38815:23;38841:24;38859:4;38841:9;:24::i;:::-;38815:50;;38876:23;38932:3;38922:7;38902:17;:27;;;;:::i;:::-;:33;;;;:::i;:::-;38876:59;;38973:15;38954;:34;;38946:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39021:33;39038:15;39021:16;:33::i;:::-;38701:361;;;38655:407;:::o;38327:185::-;3906:13;:11;:13::i;:::-;38414:1:::1;38390:21;:25;38382:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38461:10;38453:28;;:51;38482:21;38453:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38327:185::o:0;4020:87::-;4066:7;4093:6;;;;;;;;;;;4086:13;;4020:87;:::o;6347:104::-;6403:13;6436:7;6429:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6347:104;:::o;20579:34::-;;;;;;;;;;;;;;;;;;;;;;:::o;34326:265::-;3906:13;:11;:13::i;:::-;34456::::1;34448:21;;:4;:21;;::::0;34440:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34542:41;34571:4;34577:5;34542:28;:41::i;:::-;34326:265:::0;;:::o;10680:436::-;10773:4;10790:13;10806:12;:10;:12::i;:::-;10790:28;;10829:24;10856:25;10866:5;10873:7;10856:9;:25::i;:::-;10829:52;;10920:15;10900:16;:35;;10892:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11013:60;11022:5;11029:7;11057:15;11038:16;:34;11013:8;:60::i;:::-;11104:4;11097:11;;;;10680:436;;;;:::o;7761:193::-;7840:4;7857:13;7873:12;:10;:12::i;:::-;7857:28;;7896;7906:5;7913:2;7917:6;7896:9;:28::i;:::-;7942:4;7935:11;;;7761:193;;;;:::o;38520:127::-;3906:13;:11;:13::i;:::-;38630:8:::1;38619:7;:20;;;;:::i;:::-;38598:18;:41;;;;38520:127:::0;:::o;34136:182::-;3906:13;:11;:13::i;:::-;34252:8:::1;34221:19;:28;34241:7;34221:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34292:7;34276:34;;;34301:8;34276:34;;;;;;:::i;:::-;;;;;;;;34136:182:::0;;:::o;31474:52::-;;;;:::o;33472:481::-;3906:13;:11;:13::i;:::-;33536:11:::1;;;;;;;;;;;33535:12;33527:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;33585:70;33602:4;33617:16;33636:18;;33585:8;:70::i;:::-;33666:16;:32;;;33706:21;33737:4;33743:32;33772:2;33743:24;33761:4;33743:9;:24::i;:::-;:28;;:32;;;;:::i;:::-;33776:1;33778::::0;33780:7:::1;:5;:7::i;:::-;33788:15;33666:138;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33822:13;33815:29;;;33853:16;33872:14;33815:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33912:4;33898:11;;:18;;;;;;;;;;;;;;;;;;33941:4;33927:11;;:18;;;;;;;;;;;;;;;;;;33472:481::o:0;31638:23::-;;;;:::o;31812:27::-;;;;:::o;8017:151::-;8106:7;8133:11;:18;8145:5;8133:18;;;;;;;;;;;;;;;:27;8152:7;8133:27;;;;;;;;;;;;;;;;8126:34;;8017:151;;;;:::o;31779:26::-;;;;:::o;31581:50::-;;;;:::o;4919:201::-;3906:13;:11;:13::i;:::-;5028:1:::1;5008:22;;:8;:22;;::::0;5000:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5084:28;5103:8;5084:18;:28::i;:::-;4919:201:::0;:::o;31533:41::-;;;;:::o;31701:31::-;;;;;;;;;;;;;:::o;3238:98::-;3291:7;3318:10;3311:17;;3238:98;:::o;14673:346::-;14792:1;14775:19;;:5;:19;;;14767:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14873:1;14854:21;;:7;:21;;;14846:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14957:6;14927:11;:18;14939:5;14927:18;;;;;;;;;;;;;;;:27;14946:7;14927:27;;;;;;;;;;;;;;;:36;;;;14995:7;14979:32;;14988:5;14979:32;;;15004:6;14979:32;;;;;;:::i;:::-;;;;;;;;14673:346;;;:::o;15310:419::-;15411:24;15438:25;15448:5;15455:7;15438:9;:25::i;:::-;15411:52;;15498:17;15478:16;:37;15474:248;;15560:6;15540:16;:26;;15532:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15644:51;15653:5;15660:7;15688:6;15669:16;:25;15644:8;:51::i;:::-;15474:248;15400:329;15310:419;;;:::o;34927:2706::-;35043:1;35027:18;;:4;:18;;;35019:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35120:1;35106:16;;:2;:16;;;35098:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35182:1;:7;35184:4;35182:7;;;;;;;;;;;;;;;;;;;;;;;;;35181:8;:18;;;;;35194:1;:5;35196:2;35194:5;;;;;;;;;;;;;;;;;;;;;;;;;35193:6;35181:18;35173:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;35279:15;;35267:8;;:27;35264:68;;35319:1;35310:6;:10;;;;35264:68;35360:16;;35347:9;;:29;35344:71;;35402:1;35392:7;:11;;;;35344:71;35449:1;35439:6;:11;35435:93;;35467:28;35483:4;35489:2;35493:1;35467:15;:28::i;:::-;35510:7;;35435:93;35558:7;:5;:7::i;:::-;35550:15;;:4;:15;;;;:32;;;;;35575:7;:5;:7::i;:::-;35569:13;;:2;:13;;;;35550:32;:52;;;;;35600:1;35586:16;;:2;:16;;;;35550:52;:77;;;;;35620:6;35606:21;;:2;:21;;;;35550:77;:90;;;;;35632:8;;;;;;;;;;;35631:9;35550:90;35546:1127;;;35668:11;;;;;;;;;;;35663:148;;35712:19;:25;35732:4;35712:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35741:19;:23;35761:2;35741:23;;;;;;;;;;;;;;;;;;;;;;;;;35712:52;35704:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35663:148;35835:25;:31;35861:4;35835:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;35871:31;:35;35903:2;35871:35;;;;;;;;;;;;;;;;;;;;;;;;;35870:36;35835:71;35831:827;;;35967:20;;35957:6;:30;;35949:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;36102:9;;36085:13;36095:2;36085:9;:13::i;:::-;36076:6;:22;;;;:::i;:::-;:35;;36068:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36158:8;;:10;;;;;;;;;:::i;:::-;;;;;;35831:827;;;36217:25;:29;36243:2;36217:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;36251:31;:37;36283:4;36251:37;;;;;;;;;;;;;;;;;;;;;;;;;36250:38;36217:71;36213:445;;;36331:20;;36321:6;:30;;36313:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;36433:9;;:11;;;;;;;;;:::i;:::-;;;;;;36213:445;;;36511:31;:35;36543:2;36511:35;;;;;;;;;;;;;;;;;;;;;;;;;36506:152;;36605:9;;36588:13;36598:2;36588:9;:13::i;:::-;36579:6;:22;;;;:::i;:::-;:35;;36571:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36506:152;36213:445;35831:827;35546:1127;36685:28;36716:24;36734:4;36716:9;:24::i;:::-;36685:55;;36753:12;36791:1;36768:20;:24;36753:39;;36809:7;:22;;;;;36820:11;;;;;;;;;;;36809:22;:35;;;;;36836:8;;;;;;;;;;;36835:9;36809:35;:71;;;;;36849:25;:31;36875:4;36849:31;;;;;;;;;;;;;;;;;;;;;;;;;36848:32;36809:71;:101;;;;;36885:19;:25;36905:4;36885:25;;;;;;;;;;;;;;;;;;;;;;;;;36884:26;36809:101;:129;;;;;36915:19;:23;36935:2;36915:23;;;;;;;;;;;;;;;;;;;;;;;;;36914:24;36809:129;36805:239;;;36966:4;36955:8;;:15;;;;;;;;;;;;;;;;;;36985:16;36994:6;36985:8;:16::i;:::-;37027:5;37016:8;;:16;;;;;;;;;;;;;;;;;;36805:239;37056:12;37072:8;;;;;;;;;;;37071:9;37056:24;;37097:19;:25;37117:4;37097:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37126:19;:23;37146:2;37126:23;;;;;;;;;;;;;;;;;;;;;;;;;37097:52;37093:100;;;37176:5;37166:15;;37093:100;37205:12;37238:7;37234:348;;;37266:25;:29;37292:2;37266:29;;;;;;;;;;;;;;;;;;;;;;;;;37262:193;;;37323:28;37347:3;37323:19;37334:7;;37323:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;37316:35;;37262:193;;;37412:27;37435:3;37412:18;37423:6;;37412;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;37405:34;;37262:193;37478:1;37471:4;:8;37467:83;;;37496:42;37512:4;37526;37533;37496:15;:42::i;:::-;37467:83;37570:4;37560:14;;;;;:::i;:::-;;;37234:348;37592:33;37608:4;37614:2;37618:6;37592:15;:33::i;:::-;35006:2627;;;;34927:2706;;;;:::o;4185:132::-;4260:12;:10;:12::i;:::-;4249:23;;:7;:5;:7::i;:::-;:23;;;4241:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4185:132::o;5280:191::-;5354:16;5373:6;;;;;;;;;;;5354:25;;5399:8;5390:6;;:17;;;;;;;;;;;;;;;;;;5454:8;5423:40;;5444:8;5423:40;;;;;;;;;;;;5343:128;5280:191;:::o;37641:478::-;37709:21;37747:1;37733:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37709:40;;37778:4;37760;37765:1;37760:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37804:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37794:4;37799:1;37794:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;37838:63;37855:4;37870:16;37889:11;37838:8;:63::i;:::-;37912:16;:67;;;37994:11;38020:1;38036:4;38055:15;;;;;;;;;;;38085;37912:199;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37696:423;37641:478;:::o;34599:186::-;34716:5;34682:25;:31;34708:4;34682:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34771:5;34737:40;;34765:4;34737:40;;;;;;;;;;;;34599:186;;:::o;29187:172::-;29245:7;29278:3;29273:1;:8;;29265:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29348:3;29344:1;29340;:5;;;;:::i;:::-;:11;;;;:::i;:::-;29333:18;;29187:172;;;;:::o;11586:806::-;11699:1;11683:18;;:4;:18;;;11675:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11776:1;11762:16;;:2;:16;;;11754:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;11831:38;11852:4;11858:2;11862:6;11831:20;:38::i;:::-;11882:19;11904:9;:15;11914:4;11904:15;;;;;;;;;;;;;;;;11882:37;;11953:6;11938:11;:21;;11930:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12070:6;12056:11;:20;12038:9;:15;12048:4;12038:15;;;;;;;;;;;;;;;:38;;;;12273:6;12256:9;:13;12266:2;12256:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12323:2;12308:26;;12317:4;12308:26;;;12327:6;12308:26;;;;;;:::i;:::-;;;;;;;;12347:37;12367:4;12373:2;12377:6;12347:19;:37::i;:::-;11664:728;11586:806;;;:::o;39070:632::-;39123:23;39149:24;39167:4;39149:9;:24::i;:::-;39123:50;;39184:20;39234:1;39215:15;:20;39211:449;;39248:7;;;;39211:449;39295:1;39277:15;:19;:59;;;;;39318:18;;39300:15;:36;39277:59;39274:386;;;39364:15;39349:30;;39274:386;;;39409:21;39433:28;39457:3;39433:19;39444:7;;39433:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;39409:52;;39482:13;39472:23;;;;;:::i;:::-;;;39519:18;;39510:6;:27;39506:147;;;39569:18;;39554:33;;39506:147;;;39635:6;39620:21;;39506:147;39398:262;39274:386;39666:30;39683:12;39666:16;:30::i;:::-;39112:590;;39070:632;;:::o;26875:98::-;26933:7;26964:1;26960;:5;;;;:::i;:::-;26953:12;;26875:98;;;;:::o;27274:::-;27332:7;27363:1;27359;:5;;;;:::i;:::-;27352:12;;27274:98;;;;:::o;16329:91::-;;;;:::o;17024:90::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:60::-;5216:3;5237:5;5230:12;;5188:60;;;:::o;5254:142::-;5304:9;5337:53;5355:34;5364:24;5382:5;5364:24;:::i;:::-;5355:34;:::i;:::-;5337:53;:::i;:::-;5324:66;;5254:142;;;:::o;5402:126::-;5452:9;5485:37;5516:5;5485:37;:::i;:::-;5472:50;;5402:126;;;:::o;5534:153::-;5611:9;5644:37;5675:5;5644:37;:::i;:::-;5631:50;;5534:153;;;:::o;5693:185::-;5807:64;5865:5;5807:64;:::i;:::-;5802:3;5795:77;5693:185;;:::o;5884:276::-;6004:4;6042:2;6031:9;6027:18;6019:26;;6055:98;6150:1;6139:9;6135:17;6126:6;6055:98;:::i;:::-;5884:276;;;;:::o;6166:116::-;6236:21;6251:5;6236:21;:::i;:::-;6229:5;6226:32;6216:60;;6272:1;6269;6262:12;6216:60;6166:116;:::o;6288:133::-;6331:5;6369:6;6356:20;6347:29;;6385:30;6409:5;6385:30;:::i;:::-;6288:133;;;;:::o;6427:468::-;6492:6;6500;6549:2;6537:9;6528:7;6524:23;6520:32;6517:119;;;6555:79;;:::i;:::-;6517:119;6675:1;6700:53;6745:7;6736:6;6725:9;6721:22;6700:53;:::i;:::-;6690:63;;6646:117;6802:2;6828:50;6870:7;6861:6;6850:9;6846:22;6828:50;:::i;:::-;6818:60;;6773:115;6427:468;;;;;:::o;6901:329::-;6960:6;7009:2;6997:9;6988:7;6984:23;6980:32;6977:119;;;7015:79;;:::i;:::-;6977:119;7135:1;7160:53;7205:7;7196:6;7185:9;7181:22;7160:53;:::i;:::-;7150:63;;7106:117;6901:329;;;;:::o;7236:118::-;7323:24;7341:5;7323:24;:::i;:::-;7318:3;7311:37;7236:118;;:::o;7360:222::-;7453:4;7491:2;7480:9;7476:18;7468:26;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7360:222;;;;:::o;7588:474::-;7656:6;7664;7713:2;7701:9;7692:7;7688:23;7684:32;7681:119;;;7719:79;;:::i;:::-;7681:119;7839:1;7864:53;7909:7;7900:6;7889:9;7885:22;7864:53;:::i;:::-;7854:63;;7810:117;7966:2;7992:53;8037:7;8028:6;8017:9;8013:22;7992:53;:::i;:::-;7982:63;;7937:118;7588:474;;;;;:::o;8068:180::-;8116:77;8113:1;8106:88;8213:4;8210:1;8203:15;8237:4;8234:1;8227:15;8254:320;8298:6;8335:1;8329:4;8325:12;8315:22;;8382:1;8376:4;8372:12;8403:18;8393:81;;8459:4;8451:6;8447:17;8437:27;;8393:81;8521:2;8513:6;8510:14;8490:18;8487:38;8484:84;;8540:18;;:::i;:::-;8484:84;8305:269;8254:320;;;:::o;8580:180::-;8628:77;8625:1;8618:88;8725:4;8722:1;8715:15;8749:4;8746:1;8739:15;8766:191;8806:3;8825:20;8843:1;8825:20;:::i;:::-;8820:25;;8859:20;8877:1;8859:20;:::i;:::-;8854:25;;8902:1;8899;8895:9;8888:16;;8923:3;8920:1;8917:10;8914:36;;;8930:18;;:::i;:::-;8914:36;8766:191;;;;:::o;8963:410::-;9003:7;9026:20;9044:1;9026:20;:::i;:::-;9021:25;;9060:20;9078:1;9060:20;:::i;:::-;9055:25;;9115:1;9112;9108:9;9137:30;9155:11;9137:30;:::i;:::-;9126:41;;9316:1;9307:7;9303:15;9300:1;9297:22;9277:1;9270:9;9250:83;9227:139;;9346:18;;:::i;:::-;9227:139;9011:362;8963:410;;;;:::o;9379:180::-;9427:77;9424:1;9417:88;9524:4;9521:1;9514:15;9548:4;9545:1;9538:15;9565:185;9605:1;9622:20;9640:1;9622:20;:::i;:::-;9617:25;;9656:20;9674:1;9656:20;:::i;:::-;9651:25;;9695:1;9685:35;;9700:18;;:::i;:::-;9685:35;9742:1;9739;9735:9;9730:14;;9565:185;;;;:::o;9756:167::-;9896:19;9892:1;9884:6;9880:14;9873:43;9756:167;:::o;9929:366::-;10071:3;10092:67;10156:2;10151:3;10092:67;:::i;:::-;10085:74;;10168:93;10257:3;10168:93;:::i;:::-;10286:2;10281:3;10277:12;10270:19;;9929:366;;;:::o;10301:419::-;10467:4;10505:2;10494:9;10490:18;10482:26;;10554:9;10548:4;10544:20;10540:1;10529:9;10525:17;10518:47;10582:131;10708:4;10582:131;:::i;:::-;10574:139;;10301:419;;;:::o;10726:172::-;10866:24;10862:1;10854:6;10850:14;10843:48;10726:172;:::o;10904:366::-;11046:3;11067:67;11131:2;11126:3;11067:67;:::i;:::-;11060:74;;11143:93;11232:3;11143:93;:::i;:::-;11261:2;11256:3;11252:12;11245:19;;10904:366;;;:::o;11276:419::-;11442:4;11480:2;11469:9;11465:18;11457:26;;11529:9;11523:4;11519:20;11515:1;11504:9;11500:17;11493:47;11557:131;11683:4;11557:131;:::i;:::-;11549:139;;11276:419;;;:::o;11701:244::-;11841:34;11837:1;11829:6;11825:14;11818:58;11910:27;11905:2;11897:6;11893:15;11886:52;11701:244;:::o;11951:366::-;12093:3;12114:67;12178:2;12173:3;12114:67;:::i;:::-;12107:74;;12190:93;12279:3;12190:93;:::i;:::-;12308:2;12303:3;12299:12;12292:19;;11951:366;;;:::o;12323:419::-;12489:4;12527:2;12516:9;12512:18;12504:26;;12576:9;12570:4;12566:20;12562:1;12551:9;12547:17;12540:47;12604:131;12730:4;12604:131;:::i;:::-;12596:139;;12323:419;;;:::o;12748:224::-;12888:34;12884:1;12876:6;12872:14;12865:58;12957:7;12952:2;12944:6;12940:15;12933:32;12748:224;:::o;12978:366::-;13120:3;13141:67;13205:2;13200:3;13141:67;:::i;:::-;13134:74;;13217:93;13306:3;13217:93;:::i;:::-;13335:2;13330:3;13326:12;13319:19;;12978:366;;;:::o;13350:419::-;13516:4;13554:2;13543:9;13539:18;13531:26;;13603:9;13597:4;13593:20;13589:1;13578:9;13574:17;13567:47;13631:131;13757:4;13631:131;:::i;:::-;13623:139;;13350:419;;;:::o;13775:173::-;13915:25;13911:1;13903:6;13899:14;13892:49;13775:173;:::o;13954:366::-;14096:3;14117:67;14181:2;14176:3;14117:67;:::i;:::-;14110:74;;14193:93;14282:3;14193:93;:::i;:::-;14311:2;14306:3;14302:12;14295:19;;13954:366;;;:::o;14326:419::-;14492:4;14530:2;14519:9;14515:18;14507:26;;14579:9;14573:4;14569:20;14565:1;14554:9;14550:17;14543:47;14607:131;14733:4;14607:131;:::i;:::-;14599:139;;14326:419;;;:::o;14751:85::-;14796:7;14825:5;14814:16;;14751:85;;;:::o;14842:158::-;14900:9;14933:61;14951:42;14960:32;14986:5;14960:32;:::i;:::-;14951:42;:::i;:::-;14933:61;:::i;:::-;14920:74;;14842:158;;;:::o;15006:147::-;15101:45;15140:5;15101:45;:::i;:::-;15096:3;15089:58;15006:147;;:::o;15159:807::-;15408:4;15446:3;15435:9;15431:19;15423:27;;15460:71;15528:1;15517:9;15513:17;15504:6;15460:71;:::i;:::-;15541:72;15609:2;15598:9;15594:18;15585:6;15541:72;:::i;:::-;15623:80;15699:2;15688:9;15684:18;15675:6;15623:80;:::i;:::-;15713;15789:2;15778:9;15774:18;15765:6;15713:80;:::i;:::-;15803:73;15871:3;15860:9;15856:19;15847:6;15803:73;:::i;:::-;15886;15954:3;15943:9;15939:19;15930:6;15886:73;:::i;:::-;15159:807;;;;;;;;;:::o;15972:143::-;16029:5;16060:6;16054:13;16045:22;;16076:33;16103:5;16076:33;:::i;:::-;15972:143;;;;:::o;16121:663::-;16209:6;16217;16225;16274:2;16262:9;16253:7;16249:23;16245:32;16242:119;;;16280:79;;:::i;:::-;16242:119;16400:1;16425:64;16481:7;16472:6;16461:9;16457:22;16425:64;:::i;:::-;16415:74;;16371:128;16538:2;16564:64;16620:7;16611:6;16600:9;16596:22;16564:64;:::i;:::-;16554:74;;16509:129;16677:2;16703:64;16759:7;16750:6;16739:9;16735:22;16703:64;:::i;:::-;16693:74;;16648:129;16121:663;;;;;:::o;16790:332::-;16911:4;16949:2;16938:9;16934:18;16926:26;;16962:71;17030:1;17019:9;17015:17;17006:6;16962:71;:::i;:::-;17043:72;17111:2;17100:9;17096:18;17087:6;17043:72;:::i;:::-;16790:332;;;;;:::o;17128:137::-;17182:5;17213:6;17207:13;17198:22;;17229:30;17253:5;17229:30;:::i;:::-;17128:137;;;;:::o;17271:345::-;17338:6;17387:2;17375:9;17366:7;17362:23;17358:32;17355:119;;;17393:79;;:::i;:::-;17355:119;17513:1;17538:61;17591:7;17582:6;17571:9;17567:22;17538:61;:::i;:::-;17528:71;;17484:125;17271:345;;;;:::o;17622:225::-;17762:34;17758:1;17750:6;17746:14;17739:58;17831:8;17826:2;17818:6;17814:15;17807:33;17622:225;:::o;17853:366::-;17995:3;18016:67;18080:2;18075:3;18016:67;:::i;:::-;18009:74;;18092:93;18181:3;18092:93;:::i;:::-;18210:2;18205:3;18201:12;18194:19;;17853:366;;;:::o;18225:419::-;18391:4;18429:2;18418:9;18414:18;18406:26;;18478:9;18472:4;18468:20;18464:1;18453:9;18449:17;18442:47;18506:131;18632:4;18506:131;:::i;:::-;18498:139;;18225:419;;;:::o;18650:223::-;18790:34;18786:1;18778:6;18774:14;18767:58;18859:6;18854:2;18846:6;18842:15;18835:31;18650:223;:::o;18879:366::-;19021:3;19042:67;19106:2;19101:3;19042:67;:::i;:::-;19035:74;;19118:93;19207:3;19118:93;:::i;:::-;19236:2;19231:3;19227:12;19220:19;;18879:366;;;:::o;19251:419::-;19417:4;19455:2;19444:9;19440:18;19432:26;;19504:9;19498:4;19494:20;19490:1;19479:9;19475:17;19468:47;19532:131;19658:4;19532:131;:::i;:::-;19524:139;;19251:419;;;:::o;19676:221::-;19816:34;19812:1;19804:6;19800:14;19793:58;19885:4;19880:2;19872:6;19868:15;19861:29;19676:221;:::o;19903:366::-;20045:3;20066:67;20130:2;20125:3;20066:67;:::i;:::-;20059:74;;20142:93;20231:3;20142:93;:::i;:::-;20260:2;20255:3;20251:12;20244:19;;19903:366;;;:::o;20275:419::-;20441:4;20479:2;20468:9;20464:18;20456:26;;20528:9;20522:4;20518:20;20514:1;20503:9;20499:17;20492:47;20556:131;20682:4;20556:131;:::i;:::-;20548:139;;20275:419;;;:::o;20700:179::-;20840:31;20836:1;20828:6;20824:14;20817:55;20700:179;:::o;20885:366::-;21027:3;21048:67;21112:2;21107:3;21048:67;:::i;:::-;21041:74;;21124:93;21213:3;21124:93;:::i;:::-;21242:2;21237:3;21233:12;21226:19;;20885:366;;;:::o;21257:419::-;21423:4;21461:2;21450:9;21446:18;21438:26;;21510:9;21504:4;21500:20;21496:1;21485:9;21481:17;21474:47;21538:131;21664:4;21538:131;:::i;:::-;21530:139;;21257:419;;;:::o;21682:224::-;21822:34;21818:1;21810:6;21806:14;21799:58;21891:7;21886:2;21878:6;21874:15;21867:32;21682:224;:::o;21912:366::-;22054:3;22075:67;22139:2;22134:3;22075:67;:::i;:::-;22068:74;;22151:93;22240:3;22151:93;:::i;:::-;22269:2;22264:3;22260:12;22253:19;;21912:366;;;:::o;22284:419::-;22450:4;22488:2;22477:9;22473:18;22465:26;;22537:9;22531:4;22527:20;22523:1;22512:9;22508:17;22501:47;22565:131;22691:4;22565:131;:::i;:::-;22557:139;;22284:419;;;:::o;22709:222::-;22849:34;22845:1;22837:6;22833:14;22826:58;22918:5;22913:2;22905:6;22901:15;22894:30;22709:222;:::o;22937:366::-;23079:3;23100:67;23164:2;23159:3;23100:67;:::i;:::-;23093:74;;23176:93;23265:3;23176:93;:::i;:::-;23294:2;23289:3;23285:12;23278:19;;22937:366;;;:::o;23309:419::-;23475:4;23513:2;23502:9;23498:18;23490:26;;23562:9;23556:4;23552:20;23548:1;23537:9;23533:17;23526:47;23590:131;23716:4;23590:131;:::i;:::-;23582:139;;23309:419;;;:::o;23734:234::-;23874:34;23870:1;23862:6;23858:14;23851:58;23943:17;23938:2;23930:6;23926:15;23919:42;23734:234;:::o;23974:366::-;24116:3;24137:67;24201:2;24196:3;24137:67;:::i;:::-;24130:74;;24213:93;24302:3;24213:93;:::i;:::-;24331:2;24326:3;24322:12;24315:19;;23974:366;;;:::o;24346:419::-;24512:4;24550:2;24539:9;24535:18;24527:26;;24599:9;24593:4;24589:20;24585:1;24574:9;24570:17;24563:47;24627:131;24753:4;24627:131;:::i;:::-;24619:139;;24346:419;;;:::o;24771:172::-;24911:24;24907:1;24899:6;24895:14;24888:48;24771:172;:::o;24949:366::-;25091:3;25112:67;25176:2;25171:3;25112:67;:::i;:::-;25105:74;;25188:93;25277:3;25188:93;:::i;:::-;25306:2;25301:3;25297:12;25290:19;;24949:366;;;:::o;25321:419::-;25487:4;25525:2;25514:9;25510:18;25502:26;;25574:9;25568:4;25564:20;25560:1;25549:9;25545:17;25538:47;25602:131;25728:4;25602:131;:::i;:::-;25594:139;;25321:419;;;:::o;25746:240::-;25886:34;25882:1;25874:6;25870:14;25863:58;25955:23;25950:2;25942:6;25938:15;25931:48;25746:240;:::o;25992:366::-;26134:3;26155:67;26219:2;26214:3;26155:67;:::i;:::-;26148:74;;26231:93;26320:3;26231:93;:::i;:::-;26349:2;26344:3;26340:12;26333:19;;25992:366;;;:::o;26364:419::-;26530:4;26568:2;26557:9;26553:18;26545:26;;26617:9;26611:4;26607:20;26603:1;26592:9;26588:17;26581:47;26645:131;26771:4;26645:131;:::i;:::-;26637:139;;26364:419;;;:::o;26789:169::-;26929:21;26925:1;26917:6;26913:14;26906:45;26789:169;:::o;26964:366::-;27106:3;27127:67;27191:2;27186:3;27127:67;:::i;:::-;27120:74;;27203:93;27292:3;27203:93;:::i;:::-;27321:2;27316:3;27312:12;27305:19;;26964:366;;;:::o;27336:419::-;27502:4;27540:2;27529:9;27525:18;27517:26;;27589:9;27583:4;27579:20;27575:1;27564:9;27560:17;27553:47;27617:131;27743:4;27617:131;:::i;:::-;27609:139;;27336:419;;;:::o;27761:233::-;27800:3;27823:24;27841:5;27823:24;:::i;:::-;27814:33;;27869:66;27862:5;27859:77;27856:103;;27939:18;;:::i;:::-;27856:103;27986:1;27979:5;27975:13;27968:20;;27761:233;;;:::o;28000:241::-;28140:34;28136:1;28128:6;28124:14;28117:58;28209:24;28204:2;28196:6;28192:15;28185:49;28000:241;:::o;28247:366::-;28389:3;28410:67;28474:2;28469:3;28410:67;:::i;:::-;28403:74;;28486:93;28575:3;28486:93;:::i;:::-;28604:2;28599:3;28595:12;28588:19;;28247:366;;;:::o;28619:419::-;28785:4;28823:2;28812:9;28808:18;28800:26;;28872:9;28866:4;28862:20;28858:1;28847:9;28843:17;28836:47;28900:131;29026:4;28900:131;:::i;:::-;28892:139;;28619:419;;;:::o;29044:194::-;29084:4;29104:20;29122:1;29104:20;:::i;:::-;29099:25;;29138:20;29156:1;29138:20;:::i;:::-;29133:25;;29182:1;29179;29175:9;29167:17;;29206:1;29200:4;29197:11;29194:37;;;29211:18;;:::i;:::-;29194:37;29044:194;;;;:::o;29244:182::-;29384:34;29380:1;29372:6;29368:14;29361:58;29244:182;:::o;29432:366::-;29574:3;29595:67;29659:2;29654:3;29595:67;:::i;:::-;29588:74;;29671:93;29760:3;29671:93;:::i;:::-;29789:2;29784:3;29780:12;29773:19;;29432:366;;;:::o;29804:419::-;29970:4;30008:2;29997:9;29993:18;29985:26;;30057:9;30051:4;30047:20;30043:1;30032:9;30028:17;30021:47;30085:131;30211:4;30085:131;:::i;:::-;30077:139;;29804:419;;;:::o;30229:180::-;30277:77;30274:1;30267:88;30374:4;30371:1;30364:15;30398:4;30395:1;30388:15;30415:180;30463:77;30460:1;30453:88;30560:4;30557:1;30550:15;30584:4;30581:1;30574:15;30601:143;30658:5;30689:6;30683:13;30674:22;;30705:33;30732:5;30705:33;:::i;:::-;30601:143;;;;:::o;30750:351::-;30820:6;30869:2;30857:9;30848:7;30844:23;30840:32;30837:119;;;30875:79;;:::i;:::-;30837:119;30995:1;31020:64;31076:7;31067:6;31056:9;31052:22;31020:64;:::i;:::-;31010:74;;30966:128;30750:351;;;;:::o;31107:114::-;31174:6;31208:5;31202:12;31192:22;;31107:114;;;:::o;31227:184::-;31326:11;31360:6;31355:3;31348:19;31400:4;31395:3;31391:14;31376:29;;31227:184;;;;:::o;31417:132::-;31484:4;31507:3;31499:11;;31537:4;31532:3;31528:14;31520:22;;31417:132;;;:::o;31555:108::-;31632:24;31650:5;31632:24;:::i;:::-;31627:3;31620:37;31555:108;;:::o;31669:179::-;31738:10;31759:46;31801:3;31793:6;31759:46;:::i;:::-;31837:4;31832:3;31828:14;31814:28;;31669:179;;;;:::o;31854:113::-;31924:4;31956;31951:3;31947:14;31939:22;;31854:113;;;:::o;32003:732::-;32122:3;32151:54;32199:5;32151:54;:::i;:::-;32221:86;32300:6;32295:3;32221:86;:::i;:::-;32214:93;;32331:56;32381:5;32331:56;:::i;:::-;32410:7;32441:1;32426:284;32451:6;32448:1;32445:13;32426:284;;;32527:6;32521:13;32554:63;32613:3;32598:13;32554:63;:::i;:::-;32547:70;;32640:60;32693:6;32640:60;:::i;:::-;32630:70;;32486:224;32473:1;32470;32466:9;32461:14;;32426:284;;;32430:14;32726:3;32719:10;;32127:608;;;32003:732;;;;:::o;32741:831::-;33004:4;33042:3;33031:9;33027:19;33019:27;;33056:71;33124:1;33113:9;33109:17;33100:6;33056:71;:::i;:::-;33137:80;33213:2;33202:9;33198:18;33189:6;33137:80;:::i;:::-;33264:9;33258:4;33254:20;33249:2;33238:9;33234:18;33227:48;33292:108;33395:4;33386:6;33292:108;:::i;:::-;33284:116;;33410:72;33478:2;33467:9;33463:18;33454:6;33410:72;:::i;:::-;33492:73;33560:3;33549:9;33545:19;33536:6;33492:73;:::i;:::-;32741:831;;;;;;;;:::o;33578:223::-;33718:34;33714:1;33706:6;33702:14;33695:58;33787:6;33782:2;33774:6;33770:15;33763:31;33578:223;:::o;33807:366::-;33949:3;33970:67;34034:2;34029:3;33970:67;:::i;:::-;33963:74;;34046:93;34135:3;34046:93;:::i;:::-;34164:2;34159:3;34155:12;34148:19;;33807:366;;;:::o;34179:419::-;34345:4;34383:2;34372:9;34368:18;34360:26;;34432:9;34426:4;34422:20;34418:1;34407:9;34403:17;34396:47;34460:131;34586:4;34460:131;:::i;:::-;34452:139;;34179:419;;;:::o;34604:225::-;34744:34;34740:1;34732:6;34728:14;34721:58;34813:8;34808:2;34800:6;34796:15;34789:33;34604:225;:::o;34835:366::-;34977:3;34998:67;35062:2;35057:3;34998:67;:::i;:::-;34991:74;;35074:93;35163:3;35074:93;:::i;:::-;35192:2;35187:3;35183:12;35176:19;;34835:366;;;:::o;35207:419::-;35373:4;35411:2;35400:9;35396:18;35388:26;;35460:9;35454:4;35450:20;35446:1;35435:9;35431:17;35424:47;35488:131;35614:4;35488:131;:::i;:::-;35480:139;;35207:419;;;:::o

Swarm Source

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