ETH Price: $3,236.91 (+2.65%)
Gas: 3 Gwei

Token

BobbleBats (BB)
 

Overview

Max Total Supply

450 BB

Holders

24

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
despicably.eth
Balance
60 BB
0x1be3bb226a8b60d101c973ffbeec66b3669de3d4
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:
BobbleBats

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-09
*/

/**
 *Submitted for verification at Etherscan.io on 2022-04-19
*/

// SPDX-License-Identifier: GPL-3.0
// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: contracts/ERC721A.sol
pragma solidity ^0.8.0;

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128.
 *
 * Does not support burning tokens to address(0).
 */
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 1;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

  // Mapping from token ID to ownership details
  // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
  mapping(uint256 => TokenOwnership) private _ownerships;

  // Mapping owner address to address data
  mapping(address => AddressData) private _addressData;

  // Mapping from token ID to approved address
  mapping(uint256 => address) private _tokenApprovals;

  // Mapping from owner to operator approvals
  mapping(address => mapping(address => bool)) private _operatorApprovals;

  /**
   * @dev
   * `maxBatchSize` refers to how much a minter can mint at a time.
   * `collectionSize_` refers to how many tokens are in the collection.
   */
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
  }

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

  /**
   * @dev See {IERC721Enumerable-tokenByIndex}.
   */
  function tokenByIndex(uint256 index) public view override returns (uint256) {
    require(index <= totalSupply(), "ERC721A: global index out of bounds");
    return index;
  }

  /**
   * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
   * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first.
   * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
   */
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  }

  /**
   * @dev See {IERC165-supportsInterface}.
   */
  function supportsInterface(bytes4 interfaceId)
    public
    view
    virtual
    override(ERC165, IERC165)
    returns (bool)
  {
    return
      interfaceId == type(IERC721).interfaceId ||
      interfaceId == type(IERC721Metadata).interfaceId ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  }

  /**
   * @dev See {IERC721-balanceOf}.
   */
  function balanceOf(address owner) public view override returns (uint256) {
    require(owner != address(0), "ERC721A: balance query for the zero address");
    return uint256(_addressData[owner].balance);
  }

  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721A: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }

  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }

    for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
      TokenOwnership memory ownership = _ownerships[curr];
      if (ownership.addr != address(0)) {
        return ownership;
      }
    }

    revert("ERC721A: unable to determine the owner of token");
  }

  /**
   * @dev See {IERC721-ownerOf}.
   */
  function ownerOf(uint256 tokenId) public view override returns (address) {
    return ownershipOf(tokenId).addr;
  }

  /**
   * @dev See {IERC721Metadata-name}.
   */
  function name() public view virtual override returns (string memory) {
    return _name;
  }

  /**
   * @dev See {IERC721Metadata-symbol}.
   */
  function symbol() public view virtual override returns (string memory) {
    return _symbol;
  }

  /**
   * @dev See {IERC721Metadata-tokenURI}.
   */
  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString()))
        : "";
  }

  /**
   * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
   * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
   * by default, can be overriden in child contracts.
   */
  function _baseURI() internal view virtual returns (string memory) {
    return "";
  }

  /**
   * @dev See {IERC721-approve}.
   */
  function approve(address to, uint256 tokenId) public override {
    address owner = ERC721A.ownerOf(tokenId);
    require(to != owner, "ERC721A: approval to current owner");

    require(
      _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
      "ERC721A: approve caller is not owner nor approved for all"
    );

    _approve(to, tokenId, owner);
  }

  /**
   * @dev See {IERC721-getApproved}.
   */
  function getApproved(uint256 tokenId) public view override returns (address) {
    require(_exists(tokenId), "ERC721A: approved query for nonexistent token");

    return _tokenApprovals[tokenId];
  }

  /**
   * @dev See {IERC721-setApprovalForAll}.
   */
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: approve to caller");

    _operatorApprovals[_msgSender()][operator] = approved;
    emit ApprovalForAll(_msgSender(), operator, approved);
  }

  /**
   * @dev See {IERC721-isApprovedForAll}.
   */
  function isApprovedForAll(address owner, address operator)
    public
    view
    virtual
    override
    returns (bool)
  {
    return _operatorApprovals[owner][operator];
  }

  /**
   * @dev See {IERC721-transferFrom}.
   */
  function transferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    _transfer(from, to, tokenId);
  }

  /**
   * @dev See {IERC721-safeTransferFrom}.
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    safeTransferFrom(from, to, tokenId, "");
  }

  /**
   * @dev See {IERC721-safeTransferFrom}.
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: transfer to non ERC721Receiver implementer"
    );
  }

  /**
   * @dev Returns whether `tokenId` exists.
   *
   * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
   *
   * Tokens start existing when they are minted (`_mint`),
   */
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }

  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  }

  /**
   * @dev Mints `quantity` tokens and transfers them to `to`.
   *
   * Requirements:
   *
   * - there must be `quantity` tokens remaining unminted in the total collection.
   * - `to` cannot be the zero address.
   * - `quantity` cannot be larger than the max batch size.
   *
   * Emits a {Transfer} event.
   */
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address");
    // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
    require(!_exists(startTokenId), "ERC721A: token already minted");
    require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

    _beforeTokenTransfers(address(0), to, startTokenId, quantity);

    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

    uint256 updatedIndex = startTokenId;

    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
    }

    currentIndex = updatedIndex;
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  }

  /**
   * @dev Transfers `tokenId` from `from` to `to`.
   *
   * Requirements:
   *
   * - `to` cannot be the zero address.
   * - `tokenId` token must be owned by `from`.
   *
   * Emits a {Transfer} event.
   */
  function _transfer(
    address from,
    address to,
    uint256 tokenId
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));

    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );

    require(
      prevOwnership.addr == from,
      "ERC721A: transfer from incorrect owner"
    );
    require(to != address(0), "ERC721A: transfer to the zero address");

    _beforeTokenTransfers(from, to, tokenId, 1);

    // Clear approvals from the previous owner
    _approve(address(0), tokenId, prevOwnership.addr);

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

    // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
    // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }

    emit Transfer(from, to, tokenId);
    _afterTokenTransfers(from, to, tokenId, 1);
  }

  /**
   * @dev Approve `to` to operate on `tokenId`
   *
   * Emits a {Approval} event.
   */
  function _approve(
    address to,
    uint256 tokenId,
    address owner
  ) private {
    _tokenApprovals[tokenId] = to;
    emit Approval(owner, to, tokenId);
  }

  uint256 public nextOwnerToExplicitlySet = 0;

  /**
   * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf().
   */
  function _setOwnersExplicit(uint256 quantity) internal {
    uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
    require(quantity > 0, "quantity must be nonzero");
    uint256 endIndex = oldNextOwnerToSet + quantity - 1;
    if (endIndex > collectionSize - 1) {
      endIndex = collectionSize - 1;
    }
    // We know if the last one in the group exists, all in the group exist, due to serial ordering.
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  }

  /**
   * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
   * The call is not executed if the target address is not a contract.
   *
   * @param from address representing the previous owner of the given token ID
   * @param to target address that will receive the tokens
   * @param tokenId uint256 ID of the token to be transferred
   * @param _data bytes optional data to send along with the call
   * @return bool whether the call correctly returned the expected magic value
   */
  function _checkOnERC721Received(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) private returns (bool) {
    if (to.isContract()) {
      try
        IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data)
      returns (bytes4 retval) {
        return retval == IERC721Receiver(to).onERC721Received.selector;
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721A: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  }

  /**
   * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * Calling conditions:
   *
   * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
   * transferred to `to`.
   * - When `from` is zero, `tokenId` will be minted for `to`.
   */
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}

  /**
   * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
   * minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * Calling conditions:
   *
   * - when `from` and `to` are both non-zero.
   * - `from` and `to` are never both zero.
   */
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}
// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

pragma solidity >=0.7.0 <0.9.0;
contract BobbleBats is ERC721A, Ownable, ReentrancyGuard {
	using Strings for uint256;
	string baseURI;
	string baseExtension = ".json";
	uint256 public cost = .03 ether;
	uint256 public maxSupply = 2000;
	uint256 public maxMintPerBatch = 10;
	mapping(address => uint256) public addressFreeMintBalance;
	uint256 public freeMintSupply = 444;
	uint256 public freeMintsClaimed = 0;

	constructor(
		string memory _name,
		string memory _symbol
  ) ERC721A(_name, _symbol, maxMintPerBatch, maxSupply) {}

	// internal
	function _baseURI() internal view virtual override returns (string memory) {
		return baseURI;
	}

	function freeMintsRemaining() public view returns (uint256) {
		return freeMintSupply - freeMintsClaimed;
	}

  /*
   * Mint Logic
   *   General
   *     1. max 10 mints per batch
   *     2. supply + _mintAmount must not exceed total NFT supply (2,000)
   *   Free Mint
   *     1. total free mints claimed capped at 444
   *   Regular Mint
   *     1. cost per NFT must be covered 
   */
	function mint(uint256 _mintAmount)
		public
		payable
        nonReentrant
	{
		require(_mintAmount <= maxMintPerBatch, "10 mint max per txn");
		require(totalSupply() + _mintAmount <= maxSupply, "not enough NFTs remaining");
    if (msg.sender != owner()) {
        if (msg.value == 0) {
            require(freeMintsClaimed + _mintAmount <= freeMintSupply, "not enough free mints remaining");
            freeMintsClaimed += _mintAmount;
        } else {
            if (msg.sender != owner()) {
                    require(msg.value >= cost * _mintAmount, "insufficient funds");
            }
        }
    }

		_safeMint(msg.sender, _mintAmount);
	}

	function tokenURI(uint256 tokenId)
			public
			view
			virtual
			override
			returns (string memory)
		{
			require(
				_exists(tokenId),
				"ERC721Metadata: URI query for nonexistent token"
			);

			string memory currentBaseURI = _baseURI();
			return
				bytes(currentBaseURI).length > 0
					? string(
						abi.encodePacked(
							currentBaseURI,
							tokenId.toString(),
							baseExtension
						)
					)
					: "";
	}

	//cost in Wei
	function setCost(uint256 _newCost) public onlyOwner {
		cost = _newCost;
	}

	function setBaseURI(string memory _newBaseURI) public onlyOwner {
		baseURI = _newBaseURI;
	}

	function setBaseExtension(string memory _newBaseExtension)
	  public
	  onlyOwner
	{
		baseExtension = _newBaseExtension;
	}

	function withdraw() public onlyOwner nonReentrant {
        uint256 balance = address(this).balance;
        payable(0xD9462637CBe909BD96bBB56e7dd66AB782C7551E).transfer(balance * 60 / 100);
        payable(owner()).transfer(balance * 40 / 100);
  	}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressFreeMintBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMintSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMintsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMintsRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052600160005560006007556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b90805190602001906200005b92919062000288565b50666a94d74f430000600c556107d0600d55600a600e556101bc60105560006011553480156200008a57600080fd5b5060405162004d8038038062004d808339818101604052810190620000b09190620003b6565b8181600e54600d5460008111620000fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000f590620004ab565b60405180910390fd5b6000821162000144576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200013b9062000489565b60405180910390fd5b83600190805190602001906200015c92919062000288565b5082600290805190602001906200017592919062000288565b508160a08181525050806080818152505050505050620001aa6200019e620001ba60201b60201c565b620001c260201b60201c565b6001600981905550505062000700565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002969062000573565b90600052602060002090601f016020900481019282620002ba576000855562000306565b82601f10620002d557805160ff191683800117855562000306565b8280016001018555821562000306579182015b8281111562000305578251825591602001919060010190620002e8565b5b50905062000315919062000319565b5090565b5b80821115620003345760008160009055506001016200031a565b5090565b60006200034f6200034984620004f6565b620004cd565b9050828152602081018484840111156200036e576200036d62000642565b5b6200037b8482856200053d565b509392505050565b600082601f8301126200039b576200039a6200063d565b5b8151620003ad84826020860162000338565b91505092915050565b60008060408385031215620003d057620003cf6200064c565b5b600083015167ffffffffffffffff811115620003f157620003f062000647565b5b620003ff8582860162000383565b925050602083015167ffffffffffffffff81111562000423576200042262000647565b5b620004318582860162000383565b9150509250929050565b60006200044a6027836200052c565b9150620004578262000662565b604082019050919050565b600062000471602e836200052c565b91506200047e82620006b1565b604082019050919050565b60006020820190508181036000830152620004a4816200043b565b9050919050565b60006020820190508181036000830152620004c68162000462565b9050919050565b6000620004d9620004ec565b9050620004e78282620005a9565b919050565b6000604051905090565b600067ffffffffffffffff8211156200051457620005136200060e565b5b6200051f8262000651565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200055d57808201518184015260208101905062000540565b838111156200056d576000848401525b50505050565b600060028204905060018216806200058c57607f821691505b60208210811415620005a357620005a2620005df565b5b50919050565b620005b48262000651565b810181811067ffffffffffffffff82111715620005d657620005d56200060e565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a05161464f62000731600039600081816121310152818161215a015261281b01526000505061464f6000f3fe6080604052600436106101e35760003560e01c8063715018a611610102578063c87b56dd11610095578063e150007e11610064578063e150007e146106e5578063e626302614610710578063e985e9c51461073b578063f2fde38b14610778576101e3565b8063c87b56dd14610629578063d5abeb0114610666578063d7224ba014610691578063da3ef23f146106bc576101e3565b8063a0712d68116100d1578063a0712d681461057e578063a22cb4651461059a578063a506a2c5146105c3578063b88d4fde14610600576101e3565b8063715018a6146104e65780638868b9ff146104fd5780638da5cb5b1461052857806395d89b4114610553576101e3565b80633ccfd60b1161017a5780634f6ccce7116101495780634f6ccce71461040657806355f804b3146104435780636352211e1461046c57806370a08231146104a9576101e3565b80633ccfd60b1461037257806342842e0e1461038957806344a0d68a146103b25780634cae5973146103db576101e3565b806313faede6116101b657806313faede6146102b657806318160ddd146102e157806323b872dd1461030c5780632f745c5914610335576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190613045565b6107a1565b60405161021c9190613667565b60405180910390f35b34801561023157600080fd5b5061023a6108eb565b6040516102479190613682565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906130e8565b61097d565b6040516102849190613600565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190613005565b610a02565b005b3480156102c257600080fd5b506102cb610b1b565b6040516102d891906139c4565b60405180910390f35b3480156102ed57600080fd5b506102f6610b21565b60405161030391906139c4565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190612eef565b610b2a565b005b34801561034157600080fd5b5061035c60048036038101906103579190613005565b610b3a565b60405161036991906139c4565b60405180910390f35b34801561037e57600080fd5b50610387610d38565b005b34801561039557600080fd5b506103b060048036038101906103ab9190612eef565b610eeb565b005b3480156103be57600080fd5b506103d960048036038101906103d491906130e8565b610f0b565b005b3480156103e757600080fd5b506103f0610f91565b6040516103fd91906139c4565b60405180910390f35b34801561041257600080fd5b5061042d600480360381019061042891906130e8565b610f97565b60405161043a91906139c4565b60405180910390f35b34801561044f57600080fd5b5061046a6004803603810190610465919061309f565b610feb565b005b34801561047857600080fd5b50610493600480360381019061048e91906130e8565b611081565b6040516104a09190613600565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb9190612e82565b611097565b6040516104dd91906139c4565b60405180910390f35b3480156104f257600080fd5b506104fb611180565b005b34801561050957600080fd5b50610512611208565b60405161051f91906139c4565b60405180910390f35b34801561053457600080fd5b5061053d61121f565b60405161054a9190613600565b60405180910390f35b34801561055f57600080fd5b50610568611249565b6040516105759190613682565b60405180910390f35b610598600480360381019061059391906130e8565b6112db565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190612fc5565b61151a565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190612e82565b61169b565b6040516105f791906139c4565b60405180910390f35b34801561060c57600080fd5b5061062760048036038101906106229190612f42565b6116b3565b005b34801561063557600080fd5b50610650600480360381019061064b91906130e8565b61170f565b60405161065d9190613682565b60405180910390f35b34801561067257600080fd5b5061067b6117b9565b60405161068891906139c4565b60405180910390f35b34801561069d57600080fd5b506106a66117bf565b6040516106b391906139c4565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de919061309f565b6117c5565b005b3480156106f157600080fd5b506106fa61185b565b60405161070791906139c4565b60405180910390f35b34801561071c57600080fd5b50610725611861565b60405161073291906139c4565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190612eaf565b611867565b60405161076f9190613667565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a9190612e82565b6118fb565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108d457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108e457506108e3826119f3565b5b9050919050565b6060600180546108fa90613d49565b80601f016020809104026020016040519081016040528092919081815260200182805461092690613d49565b80156109735780601f1061094857610100808354040283529160200191610973565b820191906000526020600020905b81548152906001019060200180831161095657829003601f168201915b5050505050905090565b600061098882611a5d565b6109c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109be90613984565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a0d82611081565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7590613864565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a9d611a6a565b73ffffffffffffffffffffffffffffffffffffffff161480610acc5750610acb81610ac6611a6a565b611867565b5b610b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0290613784565b60405180910390fd5b610b16838383611a72565b505050565b600c5481565b60008054905090565b610b35838383611b24565b505050565b6000610b4583611097565b8210610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d906136a4565b60405180910390fd5b6000610b90610b21565b905060008060005b83811015610cf6576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610c8a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ce25786841415610cd3578195505050505050610d32565b8380610cde90613dac565b9450505b508080610cee90613dac565b915050610b98565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990613924565b60405180910390fd5b92915050565b610d40611a6a565b73ffffffffffffffffffffffffffffffffffffffff16610d5e61121f565b73ffffffffffffffffffffffffffffffffffffffff1614610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab906137e4565b60405180910390fd5b60026009541415610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df190613944565b60405180910390fd5b6002600981905550600047905073d9462637cbe909bd96bbb56e7dd66ab782c7551e73ffffffffffffffffffffffffffffffffffffffff166108fc6064603c84610e449190613b8b565b610e4e9190613b5a565b9081150290604051600060405180830381858888f19350505050158015610e79573d6000803e3d6000fd5b50610e8261121f565b73ffffffffffffffffffffffffffffffffffffffff166108fc6064602884610eaa9190613b8b565b610eb49190613b5a565b9081150290604051600060405180830381858888f19350505050158015610edf573d6000803e3d6000fd5b50506001600981905550565b610f06838383604051806020016040528060008152506116b3565b505050565b610f13611a6a565b73ffffffffffffffffffffffffffffffffffffffff16610f3161121f565b73ffffffffffffffffffffffffffffffffffffffff1614610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e906137e4565b60405180910390fd5b80600c8190555050565b60115481565b6000610fa1610b21565b821115610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda90613724565b60405180910390fd5b819050919050565b610ff3611a6a565b73ffffffffffffffffffffffffffffffffffffffff1661101161121f565b73ffffffffffffffffffffffffffffffffffffffff1614611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e906137e4565b60405180910390fd5b80600a908051906020019061107d929190612c5c565b5050565b600061108c826120dd565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ff906137a4565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611188611a6a565b73ffffffffffffffffffffffffffffffffffffffff166111a661121f565b73ffffffffffffffffffffffffffffffffffffffff16146111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f3906137e4565b60405180910390fd5b61120660006122e0565b565b600060115460105461121a9190613c19565b905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461125890613d49565b80601f016020809104026020016040519081016040528092919081815260200182805461128490613d49565b80156112d15780601f106112a6576101008083540402835291602001916112d1565b820191906000526020600020905b8154815290600101906020018083116112b457829003601f168201915b5050505050905090565b60026009541415611321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131890613944565b60405180910390fd5b6002600981905550600e5481111561136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136590613884565b60405180910390fd5b600d548161137a610b21565b6113849190613b04565b11156113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90613764565b60405180910390fd5b6113cd61121f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461150557600034141561147857601054816011546114199190613b04565b111561145a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611451906136c4565b60405180910390fd5b806011600082825461146c9190613b04565b92505081905550611504565b61148061121f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115035780600c546114c09190613b8b565b341015611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f9906138a4565b60405180910390fd5b5b5b5b61150f33826123a6565b600160098190555050565b611522611a6a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790613824565b60405180910390fd5b806006600061159d611a6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661164a611a6a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161168f9190613667565b60405180910390a35050565b600f6020528060005260406000206000915090505481565b6116be848484611b24565b6116ca848484846123c4565b611709576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611700906138c4565b60405180910390fd5b50505050565b606061171a82611a5d565b611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175090613804565b60405180910390fd5b600061176361255b565b9050600081511161178357604051806020016040528060008152506117b1565b8061178d846125ed565b600b6040516020016117a1939291906135cf565b6040516020818303038152906040525b915050919050565b600d5481565b60075481565b6117cd611a6a565b73ffffffffffffffffffffffffffffffffffffffff166117eb61121f565b73ffffffffffffffffffffffffffffffffffffffff1614611841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611838906137e4565b60405180910390fd5b80600b9080519060200190611857929190612c5c565b5050565b60105481565b600e5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611903611a6a565b73ffffffffffffffffffffffffffffffffffffffff1661192161121f565b73ffffffffffffffffffffffffffffffffffffffff1614611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196e906137e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de906136e4565b60405180910390fd5b6119f0816122e0565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611b2f826120dd565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611b56611a6a565b73ffffffffffffffffffffffffffffffffffffffff161480611bb25750611b7b611a6a565b73ffffffffffffffffffffffffffffffffffffffff16611b9a8461097d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611bce5750611bcd8260000151611bc8611a6a565b611867565b5b905080611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0790613844565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c79906137c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990613744565b60405180910390fd5b611cff858585600161274e565b611d0f6000848460000151611a72565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611d7d9190613be5565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611e219190613abe565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611f279190613b04565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561206d57611f9d81611a5d565b1561206c576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120d58686866001612754565b505050505050565b6120e5612ce2565b6120ee82611a5d565b61212d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212490613704565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106121915760017f0000000000000000000000000000000000000000000000000000000000000000846121849190613c19565b61218e9190613b04565b90505b60008390505b81811061229f576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461228b578093505050506122db565b50808061229790613d1f565b915050612197565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290613964565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123c082826040518060200160405280600081525061275a565b5050565b60006123e58473ffffffffffffffffffffffffffffffffffffffff16612c39565b1561254e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261240e611a6a565b8786866040518563ffffffff1660e01b8152600401612430949392919061361b565b602060405180830381600087803b15801561244a57600080fd5b505af192505050801561247b57506040513d601f19601f820116820180604052508101906124789190613072565b60015b6124fe573d80600081146124ab576040519150601f19603f3d011682016040523d82523d6000602084013e6124b0565b606091505b506000815114156124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed906138c4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612553565b600190505b949350505050565b6060600a805461256a90613d49565b80601f016020809104026020016040519081016040528092919081815260200182805461259690613d49565b80156125e35780601f106125b8576101008083540402835291602001916125e3565b820191906000526020600020905b8154815290600101906020018083116125c657829003601f168201915b5050505050905090565b60606000821415612635576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612749565b600082905060005b6000821461266757808061265090613dac565b915050600a826126609190613b5a565b915061263d565b60008167ffffffffffffffff81111561268357612682613ee2565b5b6040519080825280601f01601f1916602001820160405280156126b55781602001600182028036833780820191505090505b5090505b60008514612742576001826126ce9190613c19565b9150600a856126dd9190613df5565b60306126e99190613b04565b60f81b8183815181106126ff576126fe613eb3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561273b9190613b5a565b94506126b9565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156127d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c790613904565b60405180910390fd5b6127d981611a5d565b15612819576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612810906138e4565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000083111561287c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612873906139a4565b60405180910390fd5b612889600085838661274e565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516129869190613abe565b6fffffffffffffffffffffffffffffffff1681526020018583602001516129ad9190613abe565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612c1c57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bbc60008884886123c4565b612bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf2906138c4565b60405180910390fd5b8180612c0690613dac565b9250508080612c1490613dac565b915050612b4b565b5080600081905550612c316000878588612754565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612c6890613d49565b90600052602060002090601f016020900481019282612c8a5760008555612cd1565b82601f10612ca357805160ff1916838001178555612cd1565b82800160010185558215612cd1579182015b82811115612cd0578251825591602001919060010190612cb5565b5b509050612cde9190612d1c565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612d35576000816000905550600101612d1d565b5090565b6000612d4c612d4784613a04565b6139df565b905082815260208101848484011115612d6857612d67613f16565b5b612d73848285613cdd565b509392505050565b6000612d8e612d8984613a35565b6139df565b905082815260208101848484011115612daa57612da9613f16565b5b612db5848285613cdd565b509392505050565b600081359050612dcc816145bd565b92915050565b600081359050612de1816145d4565b92915050565b600081359050612df6816145eb565b92915050565b600081519050612e0b816145eb565b92915050565b600082601f830112612e2657612e25613f11565b5b8135612e36848260208601612d39565b91505092915050565b600082601f830112612e5457612e53613f11565b5b8135612e64848260208601612d7b565b91505092915050565b600081359050612e7c81614602565b92915050565b600060208284031215612e9857612e97613f20565b5b6000612ea684828501612dbd565b91505092915050565b60008060408385031215612ec657612ec5613f20565b5b6000612ed485828601612dbd565b9250506020612ee585828601612dbd565b9150509250929050565b600080600060608486031215612f0857612f07613f20565b5b6000612f1686828701612dbd565b9350506020612f2786828701612dbd565b9250506040612f3886828701612e6d565b9150509250925092565b60008060008060808587031215612f5c57612f5b613f20565b5b6000612f6a87828801612dbd565b9450506020612f7b87828801612dbd565b9350506040612f8c87828801612e6d565b925050606085013567ffffffffffffffff811115612fad57612fac613f1b565b5b612fb987828801612e11565b91505092959194509250565b60008060408385031215612fdc57612fdb613f20565b5b6000612fea85828601612dbd565b9250506020612ffb85828601612dd2565b9150509250929050565b6000806040838503121561301c5761301b613f20565b5b600061302a85828601612dbd565b925050602061303b85828601612e6d565b9150509250929050565b60006020828403121561305b5761305a613f20565b5b600061306984828501612de7565b91505092915050565b60006020828403121561308857613087613f20565b5b600061309684828501612dfc565b91505092915050565b6000602082840312156130b5576130b4613f20565b5b600082013567ffffffffffffffff8111156130d3576130d2613f1b565b5b6130df84828501612e3f565b91505092915050565b6000602082840312156130fe576130fd613f20565b5b600061310c84828501612e6d565b91505092915050565b61311e81613c4d565b82525050565b61312d81613c5f565b82525050565b600061313e82613a7b565b6131488185613a91565b9350613158818560208601613cec565b61316181613f25565b840191505092915050565b600061317782613a86565b6131818185613aa2565b9350613191818560208601613cec565b61319a81613f25565b840191505092915050565b60006131b082613a86565b6131ba8185613ab3565b93506131ca818560208601613cec565b80840191505092915050565b600081546131e381613d49565b6131ed8186613ab3565b9450600182166000811461320857600181146132195761324c565b60ff1983168652818601935061324c565b61322285613a66565b60005b8381101561324457815481890152600182019150602081019050613225565b838801955050505b50505092915050565b6000613262602283613aa2565b915061326d82613f36565b604082019050919050565b6000613285601f83613aa2565b915061329082613f85565b602082019050919050565b60006132a8602683613aa2565b91506132b382613fae565b604082019050919050565b60006132cb602a83613aa2565b91506132d682613ffd565b604082019050919050565b60006132ee602383613aa2565b91506132f98261404c565b604082019050919050565b6000613311602583613aa2565b915061331c8261409b565b604082019050919050565b6000613334601983613aa2565b915061333f826140ea565b602082019050919050565b6000613357603983613aa2565b915061336282614113565b604082019050919050565b600061337a602b83613aa2565b915061338582614162565b604082019050919050565b600061339d602683613aa2565b91506133a8826141b1565b604082019050919050565b60006133c0602083613aa2565b91506133cb82614200565b602082019050919050565b60006133e3602f83613aa2565b91506133ee82614229565b604082019050919050565b6000613406601a83613aa2565b915061341182614278565b602082019050919050565b6000613429603283613aa2565b9150613434826142a1565b604082019050919050565b600061344c602283613aa2565b9150613457826142f0565b604082019050919050565b600061346f601383613aa2565b915061347a8261433f565b602082019050919050565b6000613492601283613aa2565b915061349d82614368565b602082019050919050565b60006134b5603383613aa2565b91506134c082614391565b604082019050919050565b60006134d8601d83613aa2565b91506134e3826143e0565b602082019050919050565b60006134fb602183613aa2565b915061350682614409565b604082019050919050565b600061351e602e83613aa2565b915061352982614458565b604082019050919050565b6000613541601f83613aa2565b915061354c826144a7565b602082019050919050565b6000613564602f83613aa2565b915061356f826144d0565b604082019050919050565b6000613587602d83613aa2565b91506135928261451f565b604082019050919050565b60006135aa602283613aa2565b91506135b58261456e565b604082019050919050565b6135c981613cd3565b82525050565b60006135db82866131a5565b91506135e782856131a5565b91506135f382846131d6565b9150819050949350505050565b60006020820190506136156000830184613115565b92915050565b60006080820190506136306000830187613115565b61363d6020830186613115565b61364a60408301856135c0565b818103606083015261365c8184613133565b905095945050505050565b600060208201905061367c6000830184613124565b92915050565b6000602082019050818103600083015261369c818461316c565b905092915050565b600060208201905081810360008301526136bd81613255565b9050919050565b600060208201905081810360008301526136dd81613278565b9050919050565b600060208201905081810360008301526136fd8161329b565b9050919050565b6000602082019050818103600083015261371d816132be565b9050919050565b6000602082019050818103600083015261373d816132e1565b9050919050565b6000602082019050818103600083015261375d81613304565b9050919050565b6000602082019050818103600083015261377d81613327565b9050919050565b6000602082019050818103600083015261379d8161334a565b9050919050565b600060208201905081810360008301526137bd8161336d565b9050919050565b600060208201905081810360008301526137dd81613390565b9050919050565b600060208201905081810360008301526137fd816133b3565b9050919050565b6000602082019050818103600083015261381d816133d6565b9050919050565b6000602082019050818103600083015261383d816133f9565b9050919050565b6000602082019050818103600083015261385d8161341c565b9050919050565b6000602082019050818103600083015261387d8161343f565b9050919050565b6000602082019050818103600083015261389d81613462565b9050919050565b600060208201905081810360008301526138bd81613485565b9050919050565b600060208201905081810360008301526138dd816134a8565b9050919050565b600060208201905081810360008301526138fd816134cb565b9050919050565b6000602082019050818103600083015261391d816134ee565b9050919050565b6000602082019050818103600083015261393d81613511565b9050919050565b6000602082019050818103600083015261395d81613534565b9050919050565b6000602082019050818103600083015261397d81613557565b9050919050565b6000602082019050818103600083015261399d8161357a565b9050919050565b600060208201905081810360008301526139bd8161359d565b9050919050565b60006020820190506139d960008301846135c0565b92915050565b60006139e96139fa565b90506139f58282613d7b565b919050565b6000604051905090565b600067ffffffffffffffff821115613a1f57613a1e613ee2565b5b613a2882613f25565b9050602081019050919050565b600067ffffffffffffffff821115613a5057613a4f613ee2565b5b613a5982613f25565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ac982613c97565b9150613ad483613c97565b9250826fffffffffffffffffffffffffffffffff03821115613af957613af8613e26565b5b828201905092915050565b6000613b0f82613cd3565b9150613b1a83613cd3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b4f57613b4e613e26565b5b828201905092915050565b6000613b6582613cd3565b9150613b7083613cd3565b925082613b8057613b7f613e55565b5b828204905092915050565b6000613b9682613cd3565b9150613ba183613cd3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bda57613bd9613e26565b5b828202905092915050565b6000613bf082613c97565b9150613bfb83613c97565b925082821015613c0e57613c0d613e26565b5b828203905092915050565b6000613c2482613cd3565b9150613c2f83613cd3565b925082821015613c4257613c41613e26565b5b828203905092915050565b6000613c5882613cb3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d0a578082015181840152602081019050613cef565b83811115613d19576000848401525b50505050565b6000613d2a82613cd3565b91506000821415613d3e57613d3d613e26565b5b600182039050919050565b60006002820490506001821680613d6157607f821691505b60208210811415613d7557613d74613e84565b5b50919050565b613d8482613f25565b810181811067ffffffffffffffff82111715613da357613da2613ee2565b5b80604052505050565b6000613db782613cd3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dea57613de9613e26565b5b600182019050919050565b6000613e0082613cd3565b9150613e0b83613cd3565b925082613e1b57613e1a613e55565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f7567682066726565206d696e74732072656d61696e696e6700600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768204e4654732072656d61696e696e6700000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f3130206d696e74206d6178207065722074786e00000000000000000000000000600082015250565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6145c681613c4d565b81146145d157600080fd5b50565b6145dd81613c5f565b81146145e857600080fd5b50565b6145f481613c6b565b81146145ff57600080fd5b50565b61460b81613cd3565b811461461657600080fd5b5056fea26469706673582212205bcbe997e4f8d045f11ba192f2cc2541bf3d623c1c5a0f69e8387325cdad26b564736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a426f62626c65426174730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024242000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101e35760003560e01c8063715018a611610102578063c87b56dd11610095578063e150007e11610064578063e150007e146106e5578063e626302614610710578063e985e9c51461073b578063f2fde38b14610778576101e3565b8063c87b56dd14610629578063d5abeb0114610666578063d7224ba014610691578063da3ef23f146106bc576101e3565b8063a0712d68116100d1578063a0712d681461057e578063a22cb4651461059a578063a506a2c5146105c3578063b88d4fde14610600576101e3565b8063715018a6146104e65780638868b9ff146104fd5780638da5cb5b1461052857806395d89b4114610553576101e3565b80633ccfd60b1161017a5780634f6ccce7116101495780634f6ccce71461040657806355f804b3146104435780636352211e1461046c57806370a08231146104a9576101e3565b80633ccfd60b1461037257806342842e0e1461038957806344a0d68a146103b25780634cae5973146103db576101e3565b806313faede6116101b657806313faede6146102b657806318160ddd146102e157806323b872dd1461030c5780632f745c5914610335576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190613045565b6107a1565b60405161021c9190613667565b60405180910390f35b34801561023157600080fd5b5061023a6108eb565b6040516102479190613682565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906130e8565b61097d565b6040516102849190613600565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190613005565b610a02565b005b3480156102c257600080fd5b506102cb610b1b565b6040516102d891906139c4565b60405180910390f35b3480156102ed57600080fd5b506102f6610b21565b60405161030391906139c4565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190612eef565b610b2a565b005b34801561034157600080fd5b5061035c60048036038101906103579190613005565b610b3a565b60405161036991906139c4565b60405180910390f35b34801561037e57600080fd5b50610387610d38565b005b34801561039557600080fd5b506103b060048036038101906103ab9190612eef565b610eeb565b005b3480156103be57600080fd5b506103d960048036038101906103d491906130e8565b610f0b565b005b3480156103e757600080fd5b506103f0610f91565b6040516103fd91906139c4565b60405180910390f35b34801561041257600080fd5b5061042d600480360381019061042891906130e8565b610f97565b60405161043a91906139c4565b60405180910390f35b34801561044f57600080fd5b5061046a6004803603810190610465919061309f565b610feb565b005b34801561047857600080fd5b50610493600480360381019061048e91906130e8565b611081565b6040516104a09190613600565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb9190612e82565b611097565b6040516104dd91906139c4565b60405180910390f35b3480156104f257600080fd5b506104fb611180565b005b34801561050957600080fd5b50610512611208565b60405161051f91906139c4565b60405180910390f35b34801561053457600080fd5b5061053d61121f565b60405161054a9190613600565b60405180910390f35b34801561055f57600080fd5b50610568611249565b6040516105759190613682565b60405180910390f35b610598600480360381019061059391906130e8565b6112db565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190612fc5565b61151a565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190612e82565b61169b565b6040516105f791906139c4565b60405180910390f35b34801561060c57600080fd5b5061062760048036038101906106229190612f42565b6116b3565b005b34801561063557600080fd5b50610650600480360381019061064b91906130e8565b61170f565b60405161065d9190613682565b60405180910390f35b34801561067257600080fd5b5061067b6117b9565b60405161068891906139c4565b60405180910390f35b34801561069d57600080fd5b506106a66117bf565b6040516106b391906139c4565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de919061309f565b6117c5565b005b3480156106f157600080fd5b506106fa61185b565b60405161070791906139c4565b60405180910390f35b34801561071c57600080fd5b50610725611861565b60405161073291906139c4565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190612eaf565b611867565b60405161076f9190613667565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a9190612e82565b6118fb565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108d457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108e457506108e3826119f3565b5b9050919050565b6060600180546108fa90613d49565b80601f016020809104026020016040519081016040528092919081815260200182805461092690613d49565b80156109735780601f1061094857610100808354040283529160200191610973565b820191906000526020600020905b81548152906001019060200180831161095657829003601f168201915b5050505050905090565b600061098882611a5d565b6109c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109be90613984565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a0d82611081565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7590613864565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a9d611a6a565b73ffffffffffffffffffffffffffffffffffffffff161480610acc5750610acb81610ac6611a6a565b611867565b5b610b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0290613784565b60405180910390fd5b610b16838383611a72565b505050565b600c5481565b60008054905090565b610b35838383611b24565b505050565b6000610b4583611097565b8210610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d906136a4565b60405180910390fd5b6000610b90610b21565b905060008060005b83811015610cf6576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610c8a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ce25786841415610cd3578195505050505050610d32565b8380610cde90613dac565b9450505b508080610cee90613dac565b915050610b98565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990613924565b60405180910390fd5b92915050565b610d40611a6a565b73ffffffffffffffffffffffffffffffffffffffff16610d5e61121f565b73ffffffffffffffffffffffffffffffffffffffff1614610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab906137e4565b60405180910390fd5b60026009541415610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df190613944565b60405180910390fd5b6002600981905550600047905073d9462637cbe909bd96bbb56e7dd66ab782c7551e73ffffffffffffffffffffffffffffffffffffffff166108fc6064603c84610e449190613b8b565b610e4e9190613b5a565b9081150290604051600060405180830381858888f19350505050158015610e79573d6000803e3d6000fd5b50610e8261121f565b73ffffffffffffffffffffffffffffffffffffffff166108fc6064602884610eaa9190613b8b565b610eb49190613b5a565b9081150290604051600060405180830381858888f19350505050158015610edf573d6000803e3d6000fd5b50506001600981905550565b610f06838383604051806020016040528060008152506116b3565b505050565b610f13611a6a565b73ffffffffffffffffffffffffffffffffffffffff16610f3161121f565b73ffffffffffffffffffffffffffffffffffffffff1614610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e906137e4565b60405180910390fd5b80600c8190555050565b60115481565b6000610fa1610b21565b821115610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda90613724565b60405180910390fd5b819050919050565b610ff3611a6a565b73ffffffffffffffffffffffffffffffffffffffff1661101161121f565b73ffffffffffffffffffffffffffffffffffffffff1614611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e906137e4565b60405180910390fd5b80600a908051906020019061107d929190612c5c565b5050565b600061108c826120dd565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ff906137a4565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611188611a6a565b73ffffffffffffffffffffffffffffffffffffffff166111a661121f565b73ffffffffffffffffffffffffffffffffffffffff16146111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f3906137e4565b60405180910390fd5b61120660006122e0565b565b600060115460105461121a9190613c19565b905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461125890613d49565b80601f016020809104026020016040519081016040528092919081815260200182805461128490613d49565b80156112d15780601f106112a6576101008083540402835291602001916112d1565b820191906000526020600020905b8154815290600101906020018083116112b457829003601f168201915b5050505050905090565b60026009541415611321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131890613944565b60405180910390fd5b6002600981905550600e5481111561136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136590613884565b60405180910390fd5b600d548161137a610b21565b6113849190613b04565b11156113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90613764565b60405180910390fd5b6113cd61121f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461150557600034141561147857601054816011546114199190613b04565b111561145a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611451906136c4565b60405180910390fd5b806011600082825461146c9190613b04565b92505081905550611504565b61148061121f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115035780600c546114c09190613b8b565b341015611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f9906138a4565b60405180910390fd5b5b5b5b61150f33826123a6565b600160098190555050565b611522611a6a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790613824565b60405180910390fd5b806006600061159d611a6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661164a611a6a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161168f9190613667565b60405180910390a35050565b600f6020528060005260406000206000915090505481565b6116be848484611b24565b6116ca848484846123c4565b611709576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611700906138c4565b60405180910390fd5b50505050565b606061171a82611a5d565b611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175090613804565b60405180910390fd5b600061176361255b565b9050600081511161178357604051806020016040528060008152506117b1565b8061178d846125ed565b600b6040516020016117a1939291906135cf565b6040516020818303038152906040525b915050919050565b600d5481565b60075481565b6117cd611a6a565b73ffffffffffffffffffffffffffffffffffffffff166117eb61121f565b73ffffffffffffffffffffffffffffffffffffffff1614611841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611838906137e4565b60405180910390fd5b80600b9080519060200190611857929190612c5c565b5050565b60105481565b600e5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611903611a6a565b73ffffffffffffffffffffffffffffffffffffffff1661192161121f565b73ffffffffffffffffffffffffffffffffffffffff1614611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196e906137e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de906136e4565b60405180910390fd5b6119f0816122e0565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611b2f826120dd565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611b56611a6a565b73ffffffffffffffffffffffffffffffffffffffff161480611bb25750611b7b611a6a565b73ffffffffffffffffffffffffffffffffffffffff16611b9a8461097d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611bce5750611bcd8260000151611bc8611a6a565b611867565b5b905080611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0790613844565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c79906137c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990613744565b60405180910390fd5b611cff858585600161274e565b611d0f6000848460000151611a72565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611d7d9190613be5565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611e219190613abe565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611f279190613b04565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561206d57611f9d81611a5d565b1561206c576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120d58686866001612754565b505050505050565b6120e5612ce2565b6120ee82611a5d565b61212d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212490613704565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a83106121915760017f000000000000000000000000000000000000000000000000000000000000000a846121849190613c19565b61218e9190613b04565b90505b60008390505b81811061229f576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461228b578093505050506122db565b50808061229790613d1f565b915050612197565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290613964565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123c082826040518060200160405280600081525061275a565b5050565b60006123e58473ffffffffffffffffffffffffffffffffffffffff16612c39565b1561254e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261240e611a6a565b8786866040518563ffffffff1660e01b8152600401612430949392919061361b565b602060405180830381600087803b15801561244a57600080fd5b505af192505050801561247b57506040513d601f19601f820116820180604052508101906124789190613072565b60015b6124fe573d80600081146124ab576040519150601f19603f3d011682016040523d82523d6000602084013e6124b0565b606091505b506000815114156124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed906138c4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612553565b600190505b949350505050565b6060600a805461256a90613d49565b80601f016020809104026020016040519081016040528092919081815260200182805461259690613d49565b80156125e35780601f106125b8576101008083540402835291602001916125e3565b820191906000526020600020905b8154815290600101906020018083116125c657829003601f168201915b5050505050905090565b60606000821415612635576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612749565b600082905060005b6000821461266757808061265090613dac565b915050600a826126609190613b5a565b915061263d565b60008167ffffffffffffffff81111561268357612682613ee2565b5b6040519080825280601f01601f1916602001820160405280156126b55781602001600182028036833780820191505090505b5090505b60008514612742576001826126ce9190613c19565b9150600a856126dd9190613df5565b60306126e99190613b04565b60f81b8183815181106126ff576126fe613eb3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561273b9190613b5a565b94506126b9565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156127d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c790613904565b60405180910390fd5b6127d981611a5d565b15612819576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612810906138e4565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a83111561287c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612873906139a4565b60405180910390fd5b612889600085838661274e565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516129869190613abe565b6fffffffffffffffffffffffffffffffff1681526020018583602001516129ad9190613abe565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612c1c57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bbc60008884886123c4565b612bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf2906138c4565b60405180910390fd5b8180612c0690613dac565b9250508080612c1490613dac565b915050612b4b565b5080600081905550612c316000878588612754565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612c6890613d49565b90600052602060002090601f016020900481019282612c8a5760008555612cd1565b82601f10612ca357805160ff1916838001178555612cd1565b82800160010185558215612cd1579182015b82811115612cd0578251825591602001919060010190612cb5565b5b509050612cde9190612d1c565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612d35576000816000905550600101612d1d565b5090565b6000612d4c612d4784613a04565b6139df565b905082815260208101848484011115612d6857612d67613f16565b5b612d73848285613cdd565b509392505050565b6000612d8e612d8984613a35565b6139df565b905082815260208101848484011115612daa57612da9613f16565b5b612db5848285613cdd565b509392505050565b600081359050612dcc816145bd565b92915050565b600081359050612de1816145d4565b92915050565b600081359050612df6816145eb565b92915050565b600081519050612e0b816145eb565b92915050565b600082601f830112612e2657612e25613f11565b5b8135612e36848260208601612d39565b91505092915050565b600082601f830112612e5457612e53613f11565b5b8135612e64848260208601612d7b565b91505092915050565b600081359050612e7c81614602565b92915050565b600060208284031215612e9857612e97613f20565b5b6000612ea684828501612dbd565b91505092915050565b60008060408385031215612ec657612ec5613f20565b5b6000612ed485828601612dbd565b9250506020612ee585828601612dbd565b9150509250929050565b600080600060608486031215612f0857612f07613f20565b5b6000612f1686828701612dbd565b9350506020612f2786828701612dbd565b9250506040612f3886828701612e6d565b9150509250925092565b60008060008060808587031215612f5c57612f5b613f20565b5b6000612f6a87828801612dbd565b9450506020612f7b87828801612dbd565b9350506040612f8c87828801612e6d565b925050606085013567ffffffffffffffff811115612fad57612fac613f1b565b5b612fb987828801612e11565b91505092959194509250565b60008060408385031215612fdc57612fdb613f20565b5b6000612fea85828601612dbd565b9250506020612ffb85828601612dd2565b9150509250929050565b6000806040838503121561301c5761301b613f20565b5b600061302a85828601612dbd565b925050602061303b85828601612e6d565b9150509250929050565b60006020828403121561305b5761305a613f20565b5b600061306984828501612de7565b91505092915050565b60006020828403121561308857613087613f20565b5b600061309684828501612dfc565b91505092915050565b6000602082840312156130b5576130b4613f20565b5b600082013567ffffffffffffffff8111156130d3576130d2613f1b565b5b6130df84828501612e3f565b91505092915050565b6000602082840312156130fe576130fd613f20565b5b600061310c84828501612e6d565b91505092915050565b61311e81613c4d565b82525050565b61312d81613c5f565b82525050565b600061313e82613a7b565b6131488185613a91565b9350613158818560208601613cec565b61316181613f25565b840191505092915050565b600061317782613a86565b6131818185613aa2565b9350613191818560208601613cec565b61319a81613f25565b840191505092915050565b60006131b082613a86565b6131ba8185613ab3565b93506131ca818560208601613cec565b80840191505092915050565b600081546131e381613d49565b6131ed8186613ab3565b9450600182166000811461320857600181146132195761324c565b60ff1983168652818601935061324c565b61322285613a66565b60005b8381101561324457815481890152600182019150602081019050613225565b838801955050505b50505092915050565b6000613262602283613aa2565b915061326d82613f36565b604082019050919050565b6000613285601f83613aa2565b915061329082613f85565b602082019050919050565b60006132a8602683613aa2565b91506132b382613fae565b604082019050919050565b60006132cb602a83613aa2565b91506132d682613ffd565b604082019050919050565b60006132ee602383613aa2565b91506132f98261404c565b604082019050919050565b6000613311602583613aa2565b915061331c8261409b565b604082019050919050565b6000613334601983613aa2565b915061333f826140ea565b602082019050919050565b6000613357603983613aa2565b915061336282614113565b604082019050919050565b600061337a602b83613aa2565b915061338582614162565b604082019050919050565b600061339d602683613aa2565b91506133a8826141b1565b604082019050919050565b60006133c0602083613aa2565b91506133cb82614200565b602082019050919050565b60006133e3602f83613aa2565b91506133ee82614229565b604082019050919050565b6000613406601a83613aa2565b915061341182614278565b602082019050919050565b6000613429603283613aa2565b9150613434826142a1565b604082019050919050565b600061344c602283613aa2565b9150613457826142f0565b604082019050919050565b600061346f601383613aa2565b915061347a8261433f565b602082019050919050565b6000613492601283613aa2565b915061349d82614368565b602082019050919050565b60006134b5603383613aa2565b91506134c082614391565b604082019050919050565b60006134d8601d83613aa2565b91506134e3826143e0565b602082019050919050565b60006134fb602183613aa2565b915061350682614409565b604082019050919050565b600061351e602e83613aa2565b915061352982614458565b604082019050919050565b6000613541601f83613aa2565b915061354c826144a7565b602082019050919050565b6000613564602f83613aa2565b915061356f826144d0565b604082019050919050565b6000613587602d83613aa2565b91506135928261451f565b604082019050919050565b60006135aa602283613aa2565b91506135b58261456e565b604082019050919050565b6135c981613cd3565b82525050565b60006135db82866131a5565b91506135e782856131a5565b91506135f382846131d6565b9150819050949350505050565b60006020820190506136156000830184613115565b92915050565b60006080820190506136306000830187613115565b61363d6020830186613115565b61364a60408301856135c0565b818103606083015261365c8184613133565b905095945050505050565b600060208201905061367c6000830184613124565b92915050565b6000602082019050818103600083015261369c818461316c565b905092915050565b600060208201905081810360008301526136bd81613255565b9050919050565b600060208201905081810360008301526136dd81613278565b9050919050565b600060208201905081810360008301526136fd8161329b565b9050919050565b6000602082019050818103600083015261371d816132be565b9050919050565b6000602082019050818103600083015261373d816132e1565b9050919050565b6000602082019050818103600083015261375d81613304565b9050919050565b6000602082019050818103600083015261377d81613327565b9050919050565b6000602082019050818103600083015261379d8161334a565b9050919050565b600060208201905081810360008301526137bd8161336d565b9050919050565b600060208201905081810360008301526137dd81613390565b9050919050565b600060208201905081810360008301526137fd816133b3565b9050919050565b6000602082019050818103600083015261381d816133d6565b9050919050565b6000602082019050818103600083015261383d816133f9565b9050919050565b6000602082019050818103600083015261385d8161341c565b9050919050565b6000602082019050818103600083015261387d8161343f565b9050919050565b6000602082019050818103600083015261389d81613462565b9050919050565b600060208201905081810360008301526138bd81613485565b9050919050565b600060208201905081810360008301526138dd816134a8565b9050919050565b600060208201905081810360008301526138fd816134cb565b9050919050565b6000602082019050818103600083015261391d816134ee565b9050919050565b6000602082019050818103600083015261393d81613511565b9050919050565b6000602082019050818103600083015261395d81613534565b9050919050565b6000602082019050818103600083015261397d81613557565b9050919050565b6000602082019050818103600083015261399d8161357a565b9050919050565b600060208201905081810360008301526139bd8161359d565b9050919050565b60006020820190506139d960008301846135c0565b92915050565b60006139e96139fa565b90506139f58282613d7b565b919050565b6000604051905090565b600067ffffffffffffffff821115613a1f57613a1e613ee2565b5b613a2882613f25565b9050602081019050919050565b600067ffffffffffffffff821115613a5057613a4f613ee2565b5b613a5982613f25565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ac982613c97565b9150613ad483613c97565b9250826fffffffffffffffffffffffffffffffff03821115613af957613af8613e26565b5b828201905092915050565b6000613b0f82613cd3565b9150613b1a83613cd3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b4f57613b4e613e26565b5b828201905092915050565b6000613b6582613cd3565b9150613b7083613cd3565b925082613b8057613b7f613e55565b5b828204905092915050565b6000613b9682613cd3565b9150613ba183613cd3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bda57613bd9613e26565b5b828202905092915050565b6000613bf082613c97565b9150613bfb83613c97565b925082821015613c0e57613c0d613e26565b5b828203905092915050565b6000613c2482613cd3565b9150613c2f83613cd3565b925082821015613c4257613c41613e26565b5b828203905092915050565b6000613c5882613cb3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d0a578082015181840152602081019050613cef565b83811115613d19576000848401525b50505050565b6000613d2a82613cd3565b91506000821415613d3e57613d3d613e26565b5b600182039050919050565b60006002820490506001821680613d6157607f821691505b60208210811415613d7557613d74613e84565b5b50919050565b613d8482613f25565b810181811067ffffffffffffffff82111715613da357613da2613ee2565b5b80604052505050565b6000613db782613cd3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dea57613de9613e26565b5b600182019050919050565b6000613e0082613cd3565b9150613e0b83613cd3565b925082613e1b57613e1a613e55565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f7567682066726565206d696e74732072656d61696e696e6700600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768204e4654732072656d61696e696e6700000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f3130206d696e74206d6178207065722074786e00000000000000000000000000600082015250565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6145c681613c4d565b81146145d157600080fd5b50565b6145dd81613c5f565b81146145e857600080fd5b50565b6145f481613c6b565b81146145ff57600080fd5b50565b61460b81613cd3565b811461461657600080fd5b5056fea26469706673582212205bcbe997e4f8d045f11ba192f2cc2541bf3d623c1c5a0f69e8387325cdad26b564736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a426f62626c65426174730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024242000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): BobbleBats
Arg [1] : _symbol (string): BB

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [3] : 426f62626c654261747300000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [5] : 4242000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

42718:2769:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27853:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29579:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31104:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30667:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42860:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26413:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31954:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27045:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45230:254;;;;;;;;;;;;;:::i;:::-;;32159:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44914:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43069:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26576:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44996:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29402:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28279:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41868:103;;;;;;;;;;;;;:::i;:::-;;43354:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41217:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29734:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43760:672;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31372:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42969:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32379:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44437:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42895:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36794:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45096:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43030:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42930;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31709:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42126:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27853:370;27980:4;28025:25;28010:40;;;:11;:40;;;;:99;;;;28076:33;28061:48;;;:11;:48;;;;28010:99;:160;;;;28135:35;28120:50;;;:11;:50;;;;28010:160;:207;;;;28181:36;28205:11;28181:23;:36::i;:::-;28010:207;27996:221;;27853:370;;;:::o;29579:94::-;29633:13;29662:5;29655:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29579:94;:::o;31104:204::-;31172:7;31196:16;31204:7;31196;:16::i;:::-;31188:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31278:15;:24;31294:7;31278:24;;;;;;;;;;;;;;;;;;;;;31271:31;;31104:204;;;:::o;30667:379::-;30736:13;30752:24;30768:7;30752:15;:24::i;:::-;30736:40;;30797:5;30791:11;;:2;:11;;;;30783:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30882:5;30866:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30891:37;30908:5;30915:12;:10;:12::i;:::-;30891:16;:37::i;:::-;30866:62;30850:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;31012:28;31021:2;31025:7;31034:5;31012:8;:28::i;:::-;30729:317;30667:379;;:::o;42860:31::-;;;;:::o;26413:94::-;26466:7;26489:12;;26482:19;;26413:94;:::o;31954:142::-;32062:28;32072:4;32078:2;32082:7;32062:9;:28::i;:::-;31954:142;;;:::o;27045:744::-;27154:7;27189:16;27199:5;27189:9;:16::i;:::-;27181:5;:24;27173:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27251:22;27276:13;:11;:13::i;:::-;27251:38;;27296:19;27326:25;27376:9;27371:350;27395:14;27391:1;:18;27371:350;;;27425:31;27459:11;:14;27471:1;27459:14;;;;;;;;;;;27425:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27512:1;27486:28;;:9;:14;;;:28;;;27482:89;;27547:9;:14;;;27527:34;;27482:89;27604:5;27583:26;;:17;:26;;;27579:135;;;27641:5;27626:11;:20;27622:59;;;27668:1;27661:8;;;;;;;;;27622:59;27691:13;;;;;:::i;:::-;;;;27579:135;27416:305;27411:3;;;;;:::i;:::-;;;;27371:350;;;;27727:56;;;;;;;;;;:::i;:::-;;;;;;;;27045:744;;;;;:::o;45230:254::-;41448:12;:10;:12::i;:::-;41437:23;;:7;:5;:7::i;:::-;:23;;;41429:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22279:1:::1;22877:7;;:19;;22869:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22279:1;23010:7;:18;;;;45291:15:::2;45309:21;45291:39;;45349:42;45341:60;;:80;45417:3;45412:2;45402:7;:12;;;;:::i;:::-;:18;;;;:::i;:::-;45341:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;45440:7;:5;:7::i;:::-;45432:25;;:45;45473:3;45468:2;45458:7;:12;;;;:::i;:::-;:18;;;;:::i;:::-;45432:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;45280:204;22235:1:::1;23189:7;:22;;;;45230:254::o:0;32159:157::-;32271:39;32288:4;32294:2;32298:7;32271:39;;;;;;;;;;;;:16;:39::i;:::-;32159:157;;;:::o;44914:77::-;41448:12;:10;:12::i;:::-;41437:23;;:7;:5;:7::i;:::-;:23;;;41429:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44978:8:::1;44971:4;:15;;;;44914:77:::0;:::o;43069:35::-;;;;:::o;26576:178::-;26643:7;26676:13;:11;:13::i;:::-;26667:5;:22;;26659:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26743:5;26736:12;;26576:178;;;:::o;44996:95::-;41448:12;:10;:12::i;:::-;41437:23;;:7;:5;:7::i;:::-;:23;;;41429:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45075:11:::1;45065:7;:21;;;;;;;;;;;;:::i;:::-;;44996:95:::0;:::o;29402:118::-;29466:7;29489:20;29501:7;29489:11;:20::i;:::-;:25;;;29482:32;;29402:118;;;:::o;28279:211::-;28343:7;28384:1;28367:19;;:5;:19;;;;28359:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28456:12;:19;28469:5;28456:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;28448:36;;28441:43;;28279:211;;;:::o;41868:103::-;41448:12;:10;:12::i;:::-;41437:23;;:7;:5;:7::i;:::-;:23;;;41429:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41933:30:::1;41960:1;41933:18;:30::i;:::-;41868:103::o:0;43354:110::-;43405:7;43443:16;;43426:14;;:33;;;;:::i;:::-;43419:40;;43354:110;:::o;41217:87::-;41263:7;41290:6;;;;;;;;;;;41283:13;;41217:87;:::o;29734:98::-;29790:13;29819:7;29812:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29734:98;:::o;43760:672::-;22279:1;22877:7;;:19;;22869:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22279:1;23010:7;:18;;;;43868:15:::1;;43853:11;:30;;43845:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43951:9;;43936:11;43920:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;43912:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44015:7;:5;:7::i;:::-;44001:21;;:10;:21;;;43997:390;;44052:1;44039:9;:14;44035:345;;;44112:14;;44097:11;44078:16;;:30;;;;:::i;:::-;:48;;44070:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;44197:11;44177:16;;:31;;;;;;;:::i;:::-;;;;;;;;44035:345;;;44259:7;:5;:7::i;:::-;44245:21;;:10;:21;;;44241:128;;44319:11;44312:4;;:18;;;;:::i;:::-;44299:9;:31;;44291:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44241:128;44035:345;43997:390;44393:34;44403:10;44415:11;44393:9;:34::i;:::-;22235:1:::0;23189:7;:22;;;;43760:672;:::o;31372:274::-;31475:12;:10;:12::i;:::-;31463:24;;:8;:24;;;;31455:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31572:8;31527:18;:32;31546:12;:10;:12::i;:::-;31527:32;;;;;;;;;;;;;;;:42;31560:8;31527:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31621:8;31592:48;;31607:12;:10;:12::i;:::-;31592:48;;;31631:8;31592:48;;;;;;:::i;:::-;;;;;;;;31372:274;;:::o;42969:57::-;;;;;;;;;;;;;;;;;:::o;32379:311::-;32516:28;32526:4;32532:2;32536:7;32516:9;:28::i;:::-;32567:48;32590:4;32596:2;32600:7;32609:5;32567:22;:48::i;:::-;32551:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;32379:311;;;;:::o;44437:456::-;44530:13;44568:16;44576:7;44568;:16::i;:::-;44554:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;44654:28;44685:10;:8;:10::i;:::-;44654:41;;44744:1;44719:14;44713:28;:32;:175;;;;;;;;;;;;;;;;;44795:14;44819:18;:7;:16;:18::i;:::-;44847:13;44769:100;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44713:175;44701:187;;;44437:456;;;:::o;42895:31::-;;;;:::o;36794:43::-;;;;:::o;45096:129::-;41448:12;:10;:12::i;:::-;41437:23;;:7;:5;:7::i;:::-;:23;;;41429:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45203:17:::1;45187:13;:33;;;;;;;;;;;;:::i;:::-;;45096:129:::0;:::o;43030:35::-;;;;:::o;42930:::-;;;;:::o;31709:186::-;31831:4;31854:18;:25;31873:5;31854:25;;;;;;;;;;;;;;;:35;31880:8;31854:35;;;;;;;;;;;;;;;;;;;;;;;;;31847:42;;31709:186;;;;:::o;42126:201::-;41448:12;:10;:12::i;:::-;41437:23;;:7;:5;:7::i;:::-;:23;;;41429:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42235:1:::1;42215:22;;:8;:22;;;;42207:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42291:28;42310:8;42291:18;:28::i;:::-;42126:201:::0;:::o;13548:157::-;13633:4;13672:25;13657:40;;;:11;:40;;;;13650:47;;13548:157;;;:::o;32929:105::-;32986:4;33016:12;;33006:7;:22;32999:29;;32929:105;;;:::o;23905:98::-;23958:7;23985:10;23978:17;;23905:98;:::o;36616:172::-;36740:2;36713:15;:24;36729:7;36713:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36774:7;36770:2;36754:28;;36763:5;36754:28;;;;;;;;;;;;36616:172;;;:::o;34981:1529::-;35078:35;35116:20;35128:7;35116:11;:20::i;:::-;35078:58;;35145:22;35187:13;:18;;;35171:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;35240:12;:10;:12::i;:::-;35216:36;;:20;35228:7;35216:11;:20::i;:::-;:36;;;35171:81;:142;;;;35263:50;35280:13;:18;;;35300:12;:10;:12::i;:::-;35263:16;:50::i;:::-;35171:142;35145:169;;35339:17;35323:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35471:4;35449:26;;:13;:18;;;:26;;;35433:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;35560:1;35546:16;;:2;:16;;;;35538:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35613:43;35635:4;35641:2;35645:7;35654:1;35613:21;:43::i;:::-;35713:49;35730:1;35734:7;35743:13;:18;;;35713:8;:49::i;:::-;35801:1;35771:12;:18;35784:4;35771:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35837:1;35809:12;:16;35822:2;35809:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35868:43;;;;;;;;35883:2;35868:43;;;;;;35894:15;35868:43;;;;;35845:11;:20;35857:7;35845:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36139:19;36171:1;36161:7;:11;;;;:::i;:::-;36139:33;;36224:1;36183:43;;:11;:24;36195:11;36183:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;36179:236;;;36241:20;36249:11;36241:7;:20::i;:::-;36237:171;;;36301:97;;;;;;;;36328:13;:18;;;36301:97;;;;;;36359:13;:28;;;36301:97;;;;;36274:11;:24;36286:11;36274:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36237:171;36179:236;36447:7;36443:2;36428:27;;36437:4;36428:27;;;;;;;;;;;;36462:42;36483:4;36489:2;36493:7;36502:1;36462:20;:42::i;:::-;35071:1439;;;34981:1529;;;:::o;28742:606::-;28818:21;;:::i;:::-;28859:16;28867:7;28859;:16::i;:::-;28851:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28931:26;28979:12;28968:7;:23;28964:93;;29048:1;29033:12;29023:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;29002:47;;28964:93;29070:12;29085:7;29070:22;;29065:212;29102:18;29094:4;:26;29065:212;;29139:31;29173:11;:17;29185:4;29173:17;;;;;;;;;;;29139:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29229:1;29203:28;;:9;:14;;;:28;;;29199:71;;29251:9;29244:16;;;;;;;29199:71;29130:147;29122:6;;;;;:::i;:::-;;;;29065:212;;;;29285:57;;;;;;;;;;:::i;:::-;;;;;;;;28742:606;;;;:::o;42487:191::-;42561:16;42580:6;;;;;;;;;;;42561:25;;42606:8;42597:6;;:17;;;;;;;;;;;;;;;;;;42661:8;42630:40;;42651:8;42630:40;;;;;;;;;;;;42550:128;42487:191;:::o;33040:98::-;33105:27;33115:2;33119:8;33105:27;;;;;;;;;;;;:9;:27::i;:::-;33040:98;;:::o;38331:690::-;38468:4;38485:15;:2;:13;;;:15::i;:::-;38481:535;;;38540:2;38524:36;;;38561:12;:10;:12::i;:::-;38575:4;38581:7;38590:5;38524:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38511:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38772:1;38755:6;:13;:18;38751:215;;;38788:61;;;;;;;;;;:::i;:::-;;;;;;;;38751:215;38934:6;38928:13;38919:6;38915:2;38911:15;38904:38;38511:464;38656:45;;;38646:55;;;:6;:55;;;;38639:62;;;;;38481:535;39004:4;38997:11;;38331:690;;;;;;;:::o;43250:99::-;43310:13;43337:7;43330:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43250:99;:::o;473:723::-;529:13;759:1;750:5;:10;746:53;;;777:10;;;;;;;;;;;;;;;;;;;;;746:53;809:12;824:5;809:20;;840:14;865:78;880:1;872:4;:9;865:78;;898:8;;;;;:::i;:::-;;;;929:2;921:10;;;;;:::i;:::-;;;865:78;;;953:19;985:6;975:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;953:39;;1003:154;1019:1;1010:5;:10;1003:154;;1047:1;1037:11;;;;;:::i;:::-;;;1114:2;1106:5;:10;;;;:::i;:::-;1093:2;:24;;;;:::i;:::-;1080:39;;1063:6;1070;1063:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1143:2;1134:11;;;;;:::i;:::-;;;1003:154;;;1181:6;1167:21;;;;;473:723;;;;:::o;39483:141::-;;;;;:::o;40010:140::-;;;;;:::o;33477:1272::-;33582:20;33605:12;;33582:35;;33646:1;33632:16;;:2;:16;;;;33624:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33823:21;33831:12;33823:7;:21::i;:::-;33822:22;33814:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33905:12;33893:8;:24;;33885:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33965:61;33995:1;33999:2;34003:12;34017:8;33965:21;:61::i;:::-;34035:30;34068:12;:16;34081:2;34068:16;;;;;;;;;;;;;;;34035:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34110:119;;;;;;;;34160:8;34130:11;:19;;;:39;;;;:::i;:::-;34110:119;;;;;;34213:8;34178:11;:24;;;:44;;;;:::i;:::-;34110:119;;;;;34091:12;:16;34104:2;34091:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34264:43;;;;;;;;34279:2;34264:43;;;;;;34290:15;34264:43;;;;;34236:11;:25;34248:12;34236:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34316:20;34339:12;34316:35;;34365:9;34360:281;34384:8;34380:1;:12;34360:281;;;34438:12;34434:2;34413:38;;34430:1;34413:38;;;;;;;;;;;;34478:59;34509:1;34513:2;34517:12;34531:5;34478:22;:59::i;:::-;34460:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;34619:14;;;;;:::i;:::-;;;;34394:3;;;;;:::i;:::-;;;;34360:281;;;;34664:12;34649;:27;;;;34683:60;34712:1;34716:2;34720:12;34734:8;34683:20;:60::i;:::-;33575:1174;;;33477:1272;;;:::o;3465:326::-;3525:4;3782:1;3760:7;:19;;;:23;3753:30;;3465:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7158:118;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7282:109;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;7397:360;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;7763:364;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;8133:377;;;;:::o;8540:845::-;8643:3;8680:5;8674:12;8709:36;8735:9;8709:36;:::i;:::-;8761:89;8843:6;8838:3;8761:89;:::i;:::-;8754:96;;8881:1;8870:9;8866:17;8897:1;8892:137;;;;9043:1;9038:341;;;;8859:520;;8892:137;8976:4;8972:9;8961;8957:25;8952:3;8945:38;9012:6;9007:3;9003:16;8996:23;;8892:137;;9038:341;9105:38;9137:5;9105:38;:::i;:::-;9165:1;9179:154;9193:6;9190:1;9187:13;9179:154;;;9267:7;9261:14;9257:1;9252:3;9248:11;9241:35;9317:1;9308:7;9304:15;9293:26;;9215:4;9212:1;9208:12;9203:17;;9179:154;;;9362:6;9357:3;9353:16;9346:23;;9045:334;;8859:520;;8647:738;;8540:845;;;;:::o;9391:366::-;9533:3;9554:67;9618:2;9613:3;9554:67;:::i;:::-;9547:74;;9630:93;9719:3;9630:93;:::i;:::-;9748:2;9743:3;9739:12;9732:19;;9391:366;;;:::o;9763:::-;9905:3;9926:67;9990:2;9985:3;9926:67;:::i;:::-;9919:74;;10002:93;10091:3;10002:93;:::i;:::-;10120:2;10115:3;10111:12;10104:19;;9763:366;;;:::o;10135:::-;10277:3;10298:67;10362:2;10357:3;10298:67;:::i;:::-;10291:74;;10374:93;10463:3;10374:93;:::i;:::-;10492:2;10487:3;10483:12;10476:19;;10135:366;;;:::o;10507:::-;10649:3;10670:67;10734:2;10729:3;10670:67;:::i;:::-;10663:74;;10746:93;10835:3;10746:93;:::i;:::-;10864:2;10859:3;10855:12;10848:19;;10507:366;;;:::o;10879:::-;11021:3;11042:67;11106:2;11101:3;11042:67;:::i;:::-;11035:74;;11118:93;11207:3;11118:93;:::i;:::-;11236:2;11231:3;11227:12;11220:19;;10879:366;;;:::o;11251:::-;11393:3;11414:67;11478:2;11473:3;11414:67;:::i;:::-;11407:74;;11490:93;11579:3;11490:93;:::i;:::-;11608:2;11603:3;11599:12;11592:19;;11251:366;;;:::o;11623:::-;11765:3;11786:67;11850:2;11845:3;11786:67;:::i;:::-;11779:74;;11862:93;11951:3;11862:93;:::i;:::-;11980:2;11975:3;11971:12;11964:19;;11623:366;;;:::o;11995:::-;12137:3;12158:67;12222:2;12217:3;12158:67;:::i;:::-;12151:74;;12234:93;12323:3;12234:93;:::i;:::-;12352:2;12347:3;12343:12;12336:19;;11995:366;;;:::o;12367:::-;12509:3;12530:67;12594:2;12589:3;12530:67;:::i;:::-;12523:74;;12606:93;12695:3;12606:93;:::i;:::-;12724:2;12719:3;12715:12;12708:19;;12367:366;;;:::o;12739:::-;12881:3;12902:67;12966:2;12961:3;12902:67;:::i;:::-;12895:74;;12978:93;13067:3;12978:93;:::i;:::-;13096:2;13091:3;13087:12;13080:19;;12739:366;;;:::o;13111:::-;13253:3;13274:67;13338:2;13333:3;13274:67;:::i;:::-;13267:74;;13350:93;13439:3;13350:93;:::i;:::-;13468:2;13463:3;13459:12;13452:19;;13111:366;;;:::o;13483:::-;13625:3;13646:67;13710:2;13705:3;13646:67;:::i;:::-;13639:74;;13722:93;13811:3;13722:93;:::i;:::-;13840:2;13835:3;13831:12;13824:19;;13483:366;;;:::o;13855:::-;13997:3;14018:67;14082:2;14077:3;14018:67;:::i;:::-;14011:74;;14094:93;14183:3;14094:93;:::i;:::-;14212:2;14207:3;14203:12;14196:19;;13855:366;;;:::o;14227:::-;14369:3;14390:67;14454:2;14449:3;14390:67;:::i;:::-;14383:74;;14466:93;14555:3;14466:93;:::i;:::-;14584:2;14579:3;14575:12;14568:19;;14227:366;;;:::o;14599:::-;14741:3;14762:67;14826:2;14821:3;14762:67;:::i;:::-;14755:74;;14838:93;14927:3;14838:93;:::i;:::-;14956:2;14951:3;14947:12;14940:19;;14599:366;;;:::o;14971:::-;15113:3;15134:67;15198:2;15193:3;15134:67;:::i;:::-;15127:74;;15210:93;15299:3;15210:93;:::i;:::-;15328:2;15323:3;15319:12;15312:19;;14971:366;;;:::o;15343:::-;15485:3;15506:67;15570:2;15565:3;15506:67;:::i;:::-;15499:74;;15582:93;15671:3;15582:93;:::i;:::-;15700:2;15695:3;15691:12;15684:19;;15343:366;;;:::o;15715:::-;15857:3;15878:67;15942:2;15937:3;15878:67;:::i;:::-;15871:74;;15954:93;16043:3;15954:93;:::i;:::-;16072:2;16067:3;16063:12;16056:19;;15715:366;;;:::o;16087:::-;16229:3;16250:67;16314:2;16309:3;16250:67;:::i;:::-;16243:74;;16326:93;16415:3;16326:93;:::i;:::-;16444:2;16439:3;16435:12;16428:19;;16087:366;;;:::o;16459:::-;16601:3;16622:67;16686:2;16681:3;16622:67;:::i;:::-;16615:74;;16698:93;16787:3;16698:93;:::i;:::-;16816:2;16811:3;16807:12;16800:19;;16459:366;;;:::o;16831:::-;16973:3;16994:67;17058:2;17053:3;16994:67;:::i;:::-;16987:74;;17070:93;17159:3;17070:93;:::i;:::-;17188:2;17183:3;17179:12;17172:19;;16831:366;;;:::o;17203:::-;17345:3;17366:67;17430:2;17425:3;17366:67;:::i;:::-;17359:74;;17442:93;17531:3;17442:93;:::i;:::-;17560:2;17555:3;17551:12;17544:19;;17203:366;;;:::o;17575:::-;17717:3;17738:67;17802:2;17797:3;17738:67;:::i;:::-;17731:74;;17814:93;17903:3;17814:93;:::i;:::-;17932:2;17927:3;17923:12;17916:19;;17575:366;;;:::o;17947:::-;18089:3;18110:67;18174:2;18169:3;18110:67;:::i;:::-;18103:74;;18186:93;18275:3;18186:93;:::i;:::-;18304:2;18299:3;18295:12;18288:19;;17947:366;;;:::o;18319:::-;18461:3;18482:67;18546:2;18541:3;18482:67;:::i;:::-;18475:74;;18558:93;18647:3;18558:93;:::i;:::-;18676:2;18671:3;18667:12;18660:19;;18319:366;;;:::o;18691:118::-;18778:24;18796:5;18778:24;:::i;:::-;18773:3;18766:37;18691:118;;:::o;18815:589::-;19040:3;19062:95;19153:3;19144:6;19062:95;:::i;:::-;19055:102;;19174:95;19265:3;19256:6;19174:95;:::i;:::-;19167:102;;19286:92;19374:3;19365:6;19286:92;:::i;:::-;19279:99;;19395:3;19388:10;;18815:589;;;;;;:::o;19410:222::-;19503:4;19541:2;19530:9;19526:18;19518:26;;19554:71;19622:1;19611:9;19607:17;19598:6;19554:71;:::i;:::-;19410:222;;;;:::o;19638:640::-;19833:4;19871:3;19860:9;19856:19;19848:27;;19885:71;19953:1;19942:9;19938:17;19929:6;19885:71;:::i;:::-;19966:72;20034:2;20023:9;20019:18;20010:6;19966:72;:::i;:::-;20048;20116:2;20105:9;20101:18;20092:6;20048:72;:::i;:::-;20167:9;20161:4;20157:20;20152:2;20141:9;20137:18;20130:48;20195:76;20266:4;20257:6;20195:76;:::i;:::-;20187:84;;19638:640;;;;;;;:::o;20284:210::-;20371:4;20409:2;20398:9;20394:18;20386:26;;20422:65;20484:1;20473:9;20469:17;20460:6;20422:65;:::i;:::-;20284:210;;;;:::o;20500:313::-;20613:4;20651:2;20640:9;20636:18;20628:26;;20700:9;20694:4;20690:20;20686:1;20675:9;20671:17;20664:47;20728:78;20801:4;20792:6;20728:78;:::i;:::-;20720:86;;20500:313;;;;:::o;20819:419::-;20985:4;21023:2;21012:9;21008:18;21000:26;;21072:9;21066:4;21062:20;21058:1;21047:9;21043:17;21036:47;21100:131;21226:4;21100:131;:::i;:::-;21092:139;;20819:419;;;:::o;21244:::-;21410:4;21448:2;21437:9;21433:18;21425:26;;21497:9;21491:4;21487:20;21483:1;21472:9;21468:17;21461:47;21525:131;21651:4;21525:131;:::i;:::-;21517:139;;21244:419;;;:::o;21669:::-;21835:4;21873:2;21862:9;21858:18;21850:26;;21922:9;21916:4;21912:20;21908:1;21897:9;21893:17;21886:47;21950:131;22076:4;21950:131;:::i;:::-;21942:139;;21669:419;;;:::o;22094:::-;22260:4;22298:2;22287:9;22283:18;22275:26;;22347:9;22341:4;22337:20;22333:1;22322:9;22318:17;22311:47;22375:131;22501:4;22375:131;:::i;:::-;22367:139;;22094:419;;;:::o;22519:::-;22685:4;22723:2;22712:9;22708:18;22700:26;;22772:9;22766:4;22762:20;22758:1;22747:9;22743:17;22736:47;22800:131;22926:4;22800:131;:::i;:::-;22792:139;;22519:419;;;:::o;22944:::-;23110:4;23148:2;23137:9;23133:18;23125:26;;23197:9;23191:4;23187:20;23183:1;23172:9;23168:17;23161:47;23225:131;23351:4;23225:131;:::i;:::-;23217:139;;22944:419;;;:::o;23369:::-;23535:4;23573:2;23562:9;23558:18;23550:26;;23622:9;23616:4;23612:20;23608:1;23597:9;23593:17;23586:47;23650:131;23776:4;23650:131;:::i;:::-;23642:139;;23369:419;;;:::o;23794:::-;23960:4;23998:2;23987:9;23983:18;23975:26;;24047:9;24041:4;24037:20;24033:1;24022:9;24018:17;24011:47;24075:131;24201:4;24075:131;:::i;:::-;24067:139;;23794:419;;;:::o;24219:::-;24385:4;24423:2;24412:9;24408:18;24400:26;;24472:9;24466:4;24462:20;24458:1;24447:9;24443:17;24436:47;24500:131;24626:4;24500:131;:::i;:::-;24492:139;;24219:419;;;:::o;24644:::-;24810:4;24848:2;24837:9;24833:18;24825:26;;24897:9;24891:4;24887:20;24883:1;24872:9;24868:17;24861:47;24925:131;25051:4;24925:131;:::i;:::-;24917:139;;24644:419;;;:::o;25069:::-;25235:4;25273:2;25262:9;25258:18;25250:26;;25322:9;25316:4;25312:20;25308:1;25297:9;25293:17;25286:47;25350:131;25476:4;25350:131;:::i;:::-;25342:139;;25069:419;;;:::o;25494:::-;25660:4;25698:2;25687:9;25683:18;25675:26;;25747:9;25741:4;25737:20;25733:1;25722:9;25718:17;25711:47;25775:131;25901:4;25775:131;:::i;:::-;25767:139;;25494:419;;;:::o;25919:::-;26085:4;26123:2;26112:9;26108:18;26100:26;;26172:9;26166:4;26162:20;26158:1;26147:9;26143:17;26136:47;26200:131;26326:4;26200:131;:::i;:::-;26192:139;;25919:419;;;:::o;26344:::-;26510:4;26548:2;26537:9;26533:18;26525:26;;26597:9;26591:4;26587:20;26583:1;26572:9;26568:17;26561:47;26625:131;26751:4;26625:131;:::i;:::-;26617:139;;26344:419;;;:::o;26769:::-;26935:4;26973:2;26962:9;26958:18;26950:26;;27022:9;27016:4;27012:20;27008:1;26997:9;26993:17;26986:47;27050:131;27176:4;27050:131;:::i;:::-;27042:139;;26769:419;;;:::o;27194:::-;27360:4;27398:2;27387:9;27383:18;27375:26;;27447:9;27441:4;27437:20;27433:1;27422:9;27418:17;27411:47;27475:131;27601:4;27475:131;:::i;:::-;27467:139;;27194:419;;;:::o;27619:::-;27785:4;27823:2;27812:9;27808:18;27800:26;;27872:9;27866:4;27862:20;27858:1;27847:9;27843:17;27836:47;27900:131;28026:4;27900:131;:::i;:::-;27892:139;;27619:419;;;:::o;28044:::-;28210:4;28248:2;28237:9;28233:18;28225:26;;28297:9;28291:4;28287:20;28283:1;28272:9;28268:17;28261:47;28325:131;28451:4;28325:131;:::i;:::-;28317:139;;28044:419;;;:::o;28469:::-;28635:4;28673:2;28662:9;28658:18;28650:26;;28722:9;28716:4;28712:20;28708:1;28697:9;28693:17;28686:47;28750:131;28876:4;28750:131;:::i;:::-;28742:139;;28469:419;;;:::o;28894:::-;29060:4;29098:2;29087:9;29083:18;29075:26;;29147:9;29141:4;29137:20;29133:1;29122:9;29118:17;29111:47;29175:131;29301:4;29175:131;:::i;:::-;29167:139;;28894:419;;;:::o;29319:::-;29485:4;29523:2;29512:9;29508:18;29500:26;;29572:9;29566:4;29562:20;29558:1;29547:9;29543:17;29536:47;29600:131;29726:4;29600:131;:::i;:::-;29592:139;;29319:419;;;:::o;29744:::-;29910:4;29948:2;29937:9;29933:18;29925:26;;29997:9;29991:4;29987:20;29983:1;29972:9;29968:17;29961:47;30025:131;30151:4;30025:131;:::i;:::-;30017:139;;29744:419;;;:::o;30169:::-;30335:4;30373:2;30362:9;30358:18;30350:26;;30422:9;30416:4;30412:20;30408:1;30397:9;30393:17;30386:47;30450:131;30576:4;30450:131;:::i;:::-;30442:139;;30169:419;;;:::o;30594:::-;30760:4;30798:2;30787:9;30783:18;30775:26;;30847:9;30841:4;30837:20;30833:1;30822:9;30818:17;30811:47;30875:131;31001:4;30875:131;:::i;:::-;30867:139;;30594:419;;;:::o;31019:::-;31185:4;31223:2;31212:9;31208:18;31200:26;;31272:9;31266:4;31262:20;31258:1;31247:9;31243:17;31236:47;31300:131;31426:4;31300:131;:::i;:::-;31292:139;;31019:419;;;:::o;31444:222::-;31537:4;31575:2;31564:9;31560:18;31552:26;;31588:71;31656:1;31645:9;31641:17;31632:6;31588:71;:::i;:::-;31444:222;;;;:::o;31672:129::-;31706:6;31733:20;;:::i;:::-;31723:30;;31762:33;31790:4;31782:6;31762:33;:::i;:::-;31672:129;;;:::o;31807:75::-;31840:6;31873:2;31867:9;31857:19;;31807:75;:::o;31888:307::-;31949:4;32039:18;32031:6;32028:30;32025:56;;;32061:18;;:::i;:::-;32025:56;32099:29;32121:6;32099:29;:::i;:::-;32091:37;;32183:4;32177;32173:15;32165:23;;31888:307;;;:::o;32201:308::-;32263:4;32353:18;32345:6;32342:30;32339:56;;;32375:18;;:::i;:::-;32339:56;32413:29;32435:6;32413:29;:::i;:::-;32405:37;;32497:4;32491;32487:15;32479:23;;32201:308;;;:::o;32515:141::-;32564:4;32587:3;32579:11;;32610:3;32607:1;32600:14;32644:4;32641:1;32631:18;32623:26;;32515:141;;;:::o;32662:98::-;32713:6;32747:5;32741:12;32731:22;;32662:98;;;:::o;32766:99::-;32818:6;32852:5;32846:12;32836:22;;32766:99;;;:::o;32871:168::-;32954:11;32988:6;32983:3;32976:19;33028:4;33023:3;33019:14;33004:29;;32871:168;;;;:::o;33045:169::-;33129:11;33163:6;33158:3;33151:19;33203:4;33198:3;33194:14;33179:29;;33045:169;;;;:::o;33220:148::-;33322:11;33359:3;33344:18;;33220:148;;;;:::o;33374:273::-;33414:3;33433:20;33451:1;33433:20;:::i;:::-;33428:25;;33467:20;33485:1;33467:20;:::i;:::-;33462:25;;33589:1;33553:34;33549:42;33546:1;33543:49;33540:75;;;33595:18;;:::i;:::-;33540:75;33639:1;33636;33632:9;33625:16;;33374:273;;;;:::o;33653:305::-;33693:3;33712:20;33730:1;33712:20;:::i;:::-;33707:25;;33746:20;33764:1;33746:20;:::i;:::-;33741:25;;33900:1;33832:66;33828:74;33825:1;33822:81;33819:107;;;33906:18;;:::i;:::-;33819:107;33950:1;33947;33943:9;33936:16;;33653:305;;;;:::o;33964:185::-;34004:1;34021:20;34039:1;34021:20;:::i;:::-;34016:25;;34055:20;34073:1;34055:20;:::i;:::-;34050:25;;34094:1;34084:35;;34099:18;;:::i;:::-;34084:35;34141:1;34138;34134:9;34129:14;;33964:185;;;;:::o;34155:348::-;34195:7;34218:20;34236:1;34218:20;:::i;:::-;34213:25;;34252:20;34270:1;34252:20;:::i;:::-;34247:25;;34440:1;34372:66;34368:74;34365:1;34362:81;34357:1;34350:9;34343:17;34339:105;34336:131;;;34447:18;;:::i;:::-;34336:131;34495:1;34492;34488:9;34477:20;;34155:348;;;;:::o;34509:191::-;34549:4;34569:20;34587:1;34569:20;:::i;:::-;34564:25;;34603:20;34621:1;34603:20;:::i;:::-;34598:25;;34642:1;34639;34636:8;34633:34;;;34647:18;;:::i;:::-;34633:34;34692:1;34689;34685:9;34677:17;;34509:191;;;;:::o;34706:::-;34746:4;34766:20;34784:1;34766:20;:::i;:::-;34761:25;;34800:20;34818:1;34800:20;:::i;:::-;34795:25;;34839:1;34836;34833:8;34830:34;;;34844:18;;:::i;:::-;34830:34;34889:1;34886;34882:9;34874:17;;34706:191;;;;:::o;34903:96::-;34940:7;34969:24;34987:5;34969:24;:::i;:::-;34958:35;;34903:96;;;:::o;35005:90::-;35039:7;35082:5;35075:13;35068:21;35057:32;;35005:90;;;:::o;35101:149::-;35137:7;35177:66;35170:5;35166:78;35155:89;;35101:149;;;:::o;35256:118::-;35293:7;35333:34;35326:5;35322:46;35311:57;;35256:118;;;:::o;35380:126::-;35417:7;35457:42;35450:5;35446:54;35435:65;;35380:126;;;:::o;35512:77::-;35549:7;35578:5;35567:16;;35512:77;;;:::o;35595:154::-;35679:6;35674:3;35669;35656:30;35741:1;35732:6;35727:3;35723:16;35716:27;35595:154;;;:::o;35755:307::-;35823:1;35833:113;35847:6;35844:1;35841:13;35833:113;;;35932:1;35927:3;35923:11;35917:18;35913:1;35908:3;35904:11;35897:39;35869:2;35866:1;35862:10;35857:15;;35833:113;;;35964:6;35961:1;35958:13;35955:101;;;36044:1;36035:6;36030:3;36026:16;36019:27;35955:101;35804:258;35755:307;;;:::o;36068:171::-;36107:3;36130:24;36148:5;36130:24;:::i;:::-;36121:33;;36176:4;36169:5;36166:15;36163:41;;;36184:18;;:::i;:::-;36163:41;36231:1;36224:5;36220:13;36213:20;;36068:171;;;:::o;36245:320::-;36289:6;36326:1;36320:4;36316:12;36306:22;;36373:1;36367:4;36363:12;36394:18;36384:81;;36450:4;36442:6;36438:17;36428:27;;36384:81;36512:2;36504:6;36501:14;36481:18;36478:38;36475:84;;;36531:18;;:::i;:::-;36475:84;36296:269;36245:320;;;:::o;36571:281::-;36654:27;36676:4;36654:27;:::i;:::-;36646:6;36642:40;36784:6;36772:10;36769:22;36748:18;36736:10;36733:34;36730:62;36727:88;;;36795:18;;:::i;:::-;36727:88;36835:10;36831:2;36824:22;36614:238;36571:281;;:::o;36858:233::-;36897:3;36920:24;36938:5;36920:24;:::i;:::-;36911:33;;36966:66;36959:5;36956:77;36953:103;;;37036:18;;:::i;:::-;36953:103;37083:1;37076:5;37072:13;37065:20;;36858:233;;;:::o;37097:176::-;37129:1;37146:20;37164:1;37146:20;:::i;:::-;37141:25;;37180:20;37198:1;37180:20;:::i;:::-;37175:25;;37219:1;37209:35;;37224:18;;:::i;:::-;37209:35;37265:1;37262;37258:9;37253:14;;37097:176;;;;:::o;37279:180::-;37327:77;37324:1;37317:88;37424:4;37421:1;37414:15;37448:4;37445:1;37438:15;37465:180;37513:77;37510:1;37503:88;37610:4;37607:1;37600:15;37634:4;37631:1;37624:15;37651:180;37699:77;37696:1;37689:88;37796:4;37793:1;37786:15;37820:4;37817:1;37810:15;37837:180;37885:77;37882:1;37875:88;37982:4;37979:1;37972:15;38006:4;38003:1;37996:15;38023:180;38071:77;38068:1;38061:88;38168:4;38165:1;38158:15;38192:4;38189:1;38182:15;38209:117;38318:1;38315;38308:12;38332:117;38441:1;38438;38431:12;38455:117;38564:1;38561;38554:12;38578:117;38687:1;38684;38677:12;38701:102;38742:6;38793:2;38789:7;38784:2;38777:5;38773:14;38769:28;38759:38;;38701:102;;;:::o;38809:221::-;38949:34;38945:1;38937:6;38933:14;38926:58;39018:4;39013:2;39005:6;39001:15;38994:29;38809:221;:::o;39036:181::-;39176:33;39172:1;39164:6;39160:14;39153:57;39036:181;:::o;39223:225::-;39363:34;39359:1;39351:6;39347:14;39340:58;39432:8;39427:2;39419:6;39415:15;39408:33;39223:225;:::o;39454:229::-;39594:34;39590:1;39582:6;39578:14;39571:58;39663:12;39658:2;39650:6;39646:15;39639:37;39454:229;:::o;39689:222::-;39829:34;39825:1;39817:6;39813:14;39806:58;39898:5;39893:2;39885:6;39881:15;39874:30;39689:222;:::o;39917:224::-;40057:34;40053:1;40045:6;40041:14;40034:58;40126:7;40121:2;40113:6;40109:15;40102:32;39917:224;:::o;40147:175::-;40287:27;40283:1;40275:6;40271:14;40264:51;40147:175;:::o;40328:244::-;40468:34;40464:1;40456:6;40452:14;40445:58;40537:27;40532:2;40524:6;40520:15;40513:52;40328:244;:::o;40578:230::-;40718:34;40714:1;40706:6;40702:14;40695:58;40787:13;40782:2;40774:6;40770:15;40763:38;40578:230;:::o;40814:225::-;40954:34;40950:1;40942:6;40938:14;40931:58;41023:8;41018:2;41010:6;41006:15;40999:33;40814:225;:::o;41045:182::-;41185:34;41181:1;41173:6;41169:14;41162:58;41045:182;:::o;41233:234::-;41373:34;41369:1;41361:6;41357:14;41350:58;41442:17;41437:2;41429:6;41425:15;41418:42;41233:234;:::o;41473:176::-;41613:28;41609:1;41601:6;41597:14;41590:52;41473:176;:::o;41655:237::-;41795:34;41791:1;41783:6;41779:14;41772:58;41864:20;41859:2;41851:6;41847:15;41840:45;41655:237;:::o;41898:221::-;42038:34;42034:1;42026:6;42022:14;42015:58;42107:4;42102:2;42094:6;42090:15;42083:29;41898:221;:::o;42125:169::-;42265:21;42261:1;42253:6;42249:14;42242:45;42125:169;:::o;42300:168::-;42440:20;42436:1;42428:6;42424:14;42417:44;42300:168;:::o;42474:238::-;42614:34;42610:1;42602:6;42598:14;42591:58;42683:21;42678:2;42670:6;42666:15;42659:46;42474:238;:::o;42718:179::-;42858:31;42854:1;42846:6;42842:14;42835:55;42718:179;:::o;42903:220::-;43043:34;43039:1;43031:6;43027:14;43020:58;43112:3;43107:2;43099:6;43095:15;43088:28;42903:220;:::o;43129:233::-;43269:34;43265:1;43257:6;43253:14;43246:58;43338:16;43333:2;43325:6;43321:15;43314:41;43129:233;:::o;43368:181::-;43508:33;43504:1;43496:6;43492:14;43485:57;43368:181;:::o;43555:234::-;43695:34;43691:1;43683:6;43679:14;43672:58;43764:17;43759:2;43751:6;43747:15;43740:42;43555:234;:::o;43795:232::-;43935:34;43931:1;43923:6;43919:14;43912:58;44004:15;43999:2;43991:6;43987:15;43980:40;43795:232;:::o;44033:221::-;44173:34;44169:1;44161:6;44157:14;44150:58;44242:4;44237:2;44229:6;44225:15;44218:29;44033:221;:::o;44260:122::-;44333:24;44351:5;44333:24;:::i;:::-;44326:5;44323:35;44313:63;;44372:1;44369;44362:12;44313:63;44260:122;:::o;44388:116::-;44458:21;44473:5;44458:21;:::i;:::-;44451:5;44448:32;44438:60;;44494:1;44491;44484:12;44438:60;44388:116;:::o;44510:120::-;44582:23;44599:5;44582:23;:::i;:::-;44575:5;44572:34;44562:62;;44620:1;44617;44610:12;44562:62;44510:120;:::o;44636:122::-;44709:24;44727:5;44709:24;:::i;:::-;44702:5;44699:35;44689:63;;44748:1;44745;44738:12;44689:63;44636:122;:::o

Swarm Source

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