ETH Price: $3,527.93 (+5.17%)

Token

LilBabyMeebits (LBM)
 

Overview

Max Total Supply

949 LBM

Holders

105

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
*老子蜀道山.eth
Balance
10 LBM
0xb72Ae7044153E65fD39315a1237de3911c2eC284
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:
LilBabyMeebits

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-12
*/

// 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 = 0;
  uint256 internal collectionSize;
  uint256 internal 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_;
  }

  function changeCollectionSize(uint256 newCollectionSize) public{
    collectionSize = newCollectionSize;
  }

  /**
   * @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 virtual override {
    _transfer(from, to, tokenId);
  }

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

  /**
   * @dev See {IERC721-safeTransferFrom}.
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public virtual 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);
    }
}

// File: contracts/Lil Baby Meebits.sol



pragma solidity ^0.8.0;





contract LilBabyMeebits is Ownable, ERC721A, ReentrancyGuard {

  constructor(
    uint256 maxBatchSize_,
    uint256 collectionSize_,
    uint256 amountForAuctionAndDev_,
    uint256 amountForDevs_
  ) ERC721A("LilBabyMeebits", "LBM", maxBatchSize_, collectionSize_) {
    require(amountForAuctionAndDev_ <= collectionSize_, "larger collection size needed" );
  }
    
    uint256 public pricePerPublic = 0.01 ether;
    uint256 maxSupply = 5000;
    mapping(address => uint256) public minted;
    bool public saleStart = true; 
  
  function setPublicSale(bool start) public onlyOwner{
    saleStart = start;
  }
  
  function setPublicSalePrice(uint256 price) public onlyOwner{
    pricePerPublic = price;
  }

  function setMaxSupply(uint256 newMax) public onlyOwner{
    maxSupply = newMax;
  }

/* 
    * @dev Public Sale Mint - First 1000 are free.
    * @param quantity Number of NFT's to be minted for FREE if there are less than 1000 total. This contract is very gas efficient, these free mints are very low risk.
    */

  function mintFreeFirst1000(uint256 quantity) external payable {
    require(saleStart, "Sale hasn't started");
    require(quantity <= 10, "Cant mint more than 5");
    require(totalSupply() + quantity <= 1000, "Sold out");
    require(minted[msg.sender] + quantity <= 10, "Cant mint more than 5 per wallet");
    minted[msg.sender] += quantity;    
    _safeMint(msg.sender, quantity);
  }

  function mintMarketing(address to, uint256 quantity) external payable onlyOwner {
    require(totalSupply() + quantity <= maxSupply, "Sold out");
    _safeMint(to, quantity);
  }

/* 
    * @dev Public Sale Mint
    * @param quantity How many NFT's you want for 0.01 each. This contract is very gas efficient.
    */
  function mint(uint256 quantity) external payable{
    require(quantity <= 10, "Cant mint more than 10 at once");
    require(totalSupply() + quantity <= maxSupply, "Sold out");
    require(msg.value >= pricePerPublic * quantity, "Not enough Eth");
    _safeMint(msg.sender, quantity);
  }

  // // metadata URI
  string private _baseTokenURI;

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

  function setBaseURI(string calldata baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }

  function withdrawMoney() external onlyOwner nonReentrant {
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }

  function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant {
    _setOwnersExplicit(quantity);
  }

  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }

  function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
  {
    return ownershipOf(tokenId);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"},{"internalType":"uint256","name":"amountForAuctionAndDev_","type":"uint256"},{"internalType":"uint256","name":"amountForDevs_","type":"uint256"}],"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":"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":[{"internalType":"uint256","name":"newCollectionSize","type":"uint256"}],"name":"changeCollectionSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"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":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintFreeFirst1000","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintMarketing","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","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":"pricePerPublic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"saleStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"start","type":"bool"}],"name":"setPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPublicSalePrice","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":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006001556000600a55662386f26fc10000600c55611388600d556001600f60006101000a81548160ff0219169083151502179055503480156200004757600080fd5b50604051620055ea380380620055ea83398181016040528101906200006d9190620003b6565b6040518060400160405280600e81526020017f4c696c426162794d6565626974730000000000000000000000000000000000008152506040518060400160405280600381526020017f4c424d00000000000000000000000000000000000000000000000000000000008152508585620000fb620000ef6200022360201b60201c565b6200022b60201b60201c565b6000811162000141576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200013890620004e1565b60405180910390fd5b6000821162000187576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200017e906200049d565b60405180910390fd5b83600490805190602001906200019f929190620002ef565b508260059080519060200190620001b8929190620002ef565b508160038190555080600281905550505050506001600b819055508282111562000219576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200021090620004bf565b60405180910390fd5b5050505062000669565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002fd906200051e565b90600052602060002090601f0160209004810192826200032157600085556200036d565b82601f106200033c57805160ff19168380011785556200036d565b828001600101855582156200036d579182015b828111156200036c5782518255916020019190600101906200034f565b5b5090506200037c919062000380565b5090565b5b808211156200039b57600081600090555060010162000381565b5090565b600081519050620003b0816200064f565b92915050565b60008060008060808587031215620003d357620003d262000583565b5b6000620003e3878288016200039f565b9450506020620003f6878288016200039f565b935050604062000409878288016200039f565b92505060606200041c878288016200039f565b91505092959194509250565b60006200043760278362000503565b9150620004448262000588565b604082019050919050565b60006200045e601d8362000503565b91506200046b82620005d7565b602082019050919050565b600062000485602e8362000503565b9150620004928262000600565b604082019050919050565b60006020820190508181036000830152620004b88162000428565b9050919050565b60006020820190508181036000830152620004da816200044f565b9050919050565b60006020820190508181036000830152620004fc8162000476565b9050919050565b600082825260208201905092915050565b6000819050919050565b600060028204905060018216806200053757607f821691505b602082108114156200054e576200054d62000554565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f6c617267657220636f6c6c656374696f6e2073697a65206e6565646564000000600082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b6200065a8162000514565b81146200066657600080fd5b50565b614f7180620006796000396000f3fe6080604052600436106102045760003560e01c8063715018a611610118578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd14610738578063d7224ba014610775578063dc33e681146107a0578063e985e9c5146107dd578063f2fde38b1461081a57610204565b8063a22cb465146106a4578063ab0bcc41146106cd578063ac446002146106f8578063b88d4fde1461070f57610204565b80638da5cb5b116100e75780638da5cb5b146105cc5780639231ab2a146105f757806395d89b41146106345780639801b11c1461065f578063a0712d681461068857610204565b8063715018a614610545578063763f40111461055c578063791a2519146105785780638736482d146105a157610204565b80632f745c591161019b5780635aca1bb61161016a5780635aca1bb61461045d5780636352211e146104865780636c6df75c146104c35780636f8b44b0146104df57806370a082311461050857610204565b80632f745c591461039157806342842e0e146103ce5780634f6ccce7146103f757806355f804b31461043457610204565b806318160ddd116101d757806318160ddd146102d75780631e7269c51461030257806323b872dd1461033f5780632d20fb601461036857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613695565b610843565b60405161023d9190613d86565b60405180910390f35b34801561025257600080fd5b5061025b61098d565b6040516102689190613da1565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061373c565b610a1f565b6040516102a59190613d1f565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613628565b610aa4565b005b3480156102e357600080fd5b506102ec610bbd565b6040516102f991906141be565b60405180910390f35b34801561030e57600080fd5b50610329600480360381019061032491906134a5565b610bc7565b60405161033691906141be565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190613512565b610bdf565b005b34801561037457600080fd5b5061038f600480360381019061038a919061373c565b610bef565b005b34801561039d57600080fd5b506103b860048036038101906103b39190613628565b610ccd565b6040516103c591906141be565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613512565b610ecb565b005b34801561040357600080fd5b5061041e6004803603810190610419919061373c565b610eeb565b60405161042b91906141be565b60405180910390f35b34801561044057600080fd5b5061045b600480360381019061045691906136ef565b610f3e565b005b34801561046957600080fd5b50610484600480360381019061047f9190613668565b610fd0565b005b34801561049257600080fd5b506104ad60048036038101906104a8919061373c565b611069565b6040516104ba9190613d1f565b60405180910390f35b6104dd60048036038101906104d8919061373c565b61107f565b005b3480156104eb57600080fd5b506105066004803603810190610501919061373c565b61125a565b005b34801561051457600080fd5b5061052f600480360381019061052a91906134a5565b6112e0565b60405161053c91906141be565b60405180910390f35b34801561055157600080fd5b5061055a6113c9565b005b61057660048036038101906105719190613628565b611451565b005b34801561058457600080fd5b5061059f600480360381019061059a919061373c565b611532565b005b3480156105ad57600080fd5b506105b66115b8565b6040516105c391906141be565b60405180910390f35b3480156105d857600080fd5b506105e16115be565b6040516105ee9190613d1f565b60405180910390f35b34801561060357600080fd5b5061061e6004803603810190610619919061373c565b6115e7565b60405161062b91906141a3565b60405180910390f35b34801561064057600080fd5b506106496115ff565b6040516106569190613da1565b60405180910390f35b34801561066b57600080fd5b506106866004803603810190610681919061373c565b611691565b005b6106a2600480360381019061069d919061373c565b61169b565b005b3480156106b057600080fd5b506106cb60048036038101906106c691906135e8565b611793565b005b3480156106d957600080fd5b506106e2611914565b6040516106ef9190613d86565b60405180910390f35b34801561070457600080fd5b5061070d611927565b005b34801561071b57600080fd5b5061073660048036038101906107319190613565565b611aa8565b005b34801561074457600080fd5b5061075f600480360381019061075a919061373c565b611b04565b60405161076c9190613da1565b60405180910390f35b34801561078157600080fd5b5061078a611bab565b60405161079791906141be565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c291906134a5565b611bb1565b6040516107d491906141be565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff91906134d2565b611bc3565b6040516108119190613d86565b60405180910390f35b34801561082657600080fd5b50610841600480360381019061083c91906134a5565b611c57565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061090e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061097657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610986575061098582611d4f565b5b9050919050565b60606004805461099c9061451c565b80601f01602080910402602001604051908101604052809291908181526020018280546109c89061451c565b8015610a155780601f106109ea57610100808354040283529160200191610a15565b820191906000526020600020905b8154815290600101906020018083116109f857829003601f168201915b5050505050905090565b6000610a2a82611db9565b610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6090614163565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aaf82611069565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1790613fc3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b3f611dc7565b73ffffffffffffffffffffffffffffffffffffffff161480610b6e5750610b6d81610b68611dc7565b611bc3565b5b610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba490613ea3565b60405180910390fd5b610bb8838383611dcf565b505050565b6000600154905090565b600e6020528060005260406000206000915090505481565b610bea838383611e81565b505050565b610bf7611dc7565b73ffffffffffffffffffffffffffffffffffffffff16610c156115be565b73ffffffffffffffffffffffffffffffffffffffff1614610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290613f23565b60405180910390fd5b6002600b541415610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca890614123565b60405180910390fd5b6002600b81905550610cc28161243a565b6001600b8190555050565b6000610cd8836112e0565b8210610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090613dc3565b60405180910390fd5b6000610d23610bbd565b905060008060005b83811015610e89576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e1d57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e755786841415610e66578195505050505050610ec5565b8380610e719061457f565b9450505b508080610e819061457f565b915050610d2b565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc906140c3565b60405180910390fd5b92915050565b610ee683838360405180602001604052806000815250611aa8565b505050565b6000610ef5610bbd565b8210610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d90613e23565b60405180910390fd5b819050919050565b610f46611dc7565b73ffffffffffffffffffffffffffffffffffffffff16610f646115be565b73ffffffffffffffffffffffffffffffffffffffff1614610fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb190613f23565b60405180910390fd5b818160109190610fcb929190613299565b505050565b610fd8611dc7565b73ffffffffffffffffffffffffffffffffffffffff16610ff66115be565b73ffffffffffffffffffffffffffffffffffffffff161461104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390613f23565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b60006110748261268c565b600001519050919050565b600f60009054906101000a900460ff166110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590614103565b60405180910390fd5b600a811115611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990613fa3565b60405180910390fd5b6103e88161111e610bbd565b61112891906142c3565b1115611169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116090614003565b60405180910390fd5b600a81600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111b691906142c3565b11156111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee90613e83565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461124691906142c3565b925050819055506112573382612853565b50565b611262611dc7565b73ffffffffffffffffffffffffffffffffffffffff166112806115be565b73ffffffffffffffffffffffffffffffffffffffff16146112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90613f23565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134890613ee3565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6113d1611dc7565b73ffffffffffffffffffffffffffffffffffffffff166113ef6115be565b73ffffffffffffffffffffffffffffffffffffffff1614611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c90613f23565b60405180910390fd5b61144f6000612871565b565b611459611dc7565b73ffffffffffffffffffffffffffffffffffffffff166114776115be565b73ffffffffffffffffffffffffffffffffffffffff16146114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c490613f23565b60405180910390fd5b600d54816114d9610bbd565b6114e391906142c3565b1115611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b90614003565b60405180910390fd5b61152e8282612853565b5050565b61153a611dc7565b73ffffffffffffffffffffffffffffffffffffffff166115586115be565b73ffffffffffffffffffffffffffffffffffffffff16146115ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a590613f23565b60405180910390fd5b80600c8190555050565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115ef61331f565b6115f88261268c565b9050919050565b60606005805461160e9061451c565b80601f016020809104026020016040519081016040528092919081815260200182805461163a9061451c565b80156116875780601f1061165c57610100808354040283529160200191611687565b820191906000526020600020905b81548152906001019060200180831161166a57829003601f168201915b5050505050905090565b8060028190555050565b600a8111156116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690614063565b60405180910390fd5b600d54816116eb610bbd565b6116f591906142c3565b1115611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90614003565b60405180910390fd5b80600c54611744919061434a565b341015611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d906140a3565b60405180910390fd5b6117903382612853565b50565b61179b611dc7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090613f63565b60405180910390fd5b8060096000611816611dc7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118c3611dc7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119089190613d86565b60405180910390a35050565b600f60009054906101000a900460ff1681565b61192f611dc7565b73ffffffffffffffffffffffffffffffffffffffff1661194d6115be565b73ffffffffffffffffffffffffffffffffffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a90613f23565b60405180910390fd5b6002600b5414156119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090614123565b60405180910390fd5b6002600b8190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611a1790613d0a565b60006040518083038185875af1925050503d8060008114611a54576040519150601f19603f3d011682016040523d82523d6000602084013e611a59565b606091505b5050905080611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490613fe3565b60405180910390fd5b506001600b81905550565b611ab3848484611e81565b611abf84848484612935565b611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590614023565b60405180910390fd5b50505050565b6060611b0f82611db9565b611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4590613f43565b60405180910390fd5b6000611b58612acc565b90506000815111611b785760405180602001604052806000815250611ba3565b80611b8284612b5e565b604051602001611b93929190613ce6565b6040516020818303038152906040525b915050919050565b600a5481565b6000611bbc82612cbf565b9050919050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c5f611dc7565b73ffffffffffffffffffffffffffffffffffffffff16611c7d6115be565b73ffffffffffffffffffffffffffffffffffffffff1614611cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cca90613f23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90613de3565b60405180910390fd5b611d4c81612871565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611e8c8261268c565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611eb3611dc7565b73ffffffffffffffffffffffffffffffffffffffff161480611f0f5750611ed8611dc7565b73ffffffffffffffffffffffffffffffffffffffff16611ef784610a1f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f2b5750611f2a8260000151611f25611dc7565b611bc3565b5b905080611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6490613f83565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690613f03565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561204f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204690613e43565b60405180910390fd5b61205c8585856001612da8565b61206c6000848460000151611dcf565b6001600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166120da91906143a4565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661217e919061427d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461228491906142c3565b9050600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123ca576122fa81611db9565b156123c9576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506006600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124328686866001612dae565b505050505050565b6000600a54905060008211612484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247b90613ec3565b60405180910390fd5b60006001838361249491906142c3565b61249e91906143d8565b905060016002546124af91906143d8565b8111156124c85760016002546124c591906143d8565b90505b6124d181611db9565b612510576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612507906140e3565b60405180910390fd5b60008290505b81811161267357600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126605760006125938261268c565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506006600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b808061266b9061457f565b915050612516565b5060018161268191906142c3565b600a81905550505050565b61269461331f565b61269d82611db9565b6126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d390613e03565b60405180910390fd5b60006003548310612704576001600354846126f791906143d8565b61270191906142c3565b90505b60008390505b818110612812576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127fe5780935050505061284e565b50808061280a906144f2565b91505061270a565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284590614143565b60405180910390fd5b919050565b61286d828260405180602001604052806000815250612db4565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006129568473ffffffffffffffffffffffffffffffffffffffff16613276565b15612abf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261297f611dc7565b8786866040518563ffffffff1660e01b81526004016129a19493929190613d3a565b602060405180830381600087803b1580156129bb57600080fd5b505af19250505080156129ec57506040513d601f19601f820116820180604052508101906129e991906136c2565b60015b612a6f573d8060008114612a1c576040519150601f19603f3d011682016040523d82523d6000602084013e612a21565b606091505b50600081511415612a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5e90614023565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ac4565b600190505b949350505050565b606060108054612adb9061451c565b80601f0160208091040260200160405190810160405280929190818152602001828054612b079061451c565b8015612b545780601f10612b2957610100808354040283529160200191612b54565b820191906000526020600020905b815481529060010190602001808311612b3757829003601f168201915b5050505050905090565b60606000821415612ba6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cba565b600082905060005b60008214612bd8578080612bc19061457f565b915050600a82612bd19190614319565b9150612bae565b60008167ffffffffffffffff811115612bf457612bf36146b5565b5b6040519080825280601f01601f191660200182016040528015612c265781602001600182028036833780820191505090505b5090505b60008514612cb357600182612c3f91906143d8565b9150600a85612c4e91906145c8565b6030612c5a91906142c3565b60f81b818381518110612c7057612c6f614686565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cac9190614319565b9450612c2a565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2790613e63565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2290614083565b60405180910390fd5b612e3481611db9565b15612e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6b90614043565b60405180910390fd5b600354831115612eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb090614183565b60405180910390fd5b612ec66000858386612da8565b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612fc3919061427d565b6fffffffffffffffffffffffffffffffff168152602001858360200151612fea919061427d565b6fffffffffffffffffffffffffffffffff16815250600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561325957818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131f96000888488612935565b613238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322f90614023565b60405180910390fd5b81806132439061457f565b92505080806132519061457f565b915050613188565b508060018190555061326e6000878588612dae565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546132a59061451c565b90600052602060002090601f0160209004810192826132c7576000855561330e565b82601f106132e057803560ff191683800117855561330e565b8280016001018555821561330e579182015b8281111561330d5782358255916020019190600101906132f2565b5b50905061331b9190613359565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561337257600081600090555060010161335a565b5090565b6000613389613384846141fe565b6141d9565b9050828152602081018484840111156133a5576133a46146f3565b5b6133b08482856144b0565b509392505050565b6000813590506133c781614edf565b92915050565b6000813590506133dc81614ef6565b92915050565b6000813590506133f181614f0d565b92915050565b60008151905061340681614f0d565b92915050565b600082601f830112613421576134206146e9565b5b8135613431848260208601613376565b91505092915050565b60008083601f8401126134505761344f6146e9565b5b8235905067ffffffffffffffff81111561346d5761346c6146e4565b5b602083019150836001820283011115613489576134886146ee565b5b9250929050565b60008135905061349f81614f24565b92915050565b6000602082840312156134bb576134ba6146fd565b5b60006134c9848285016133b8565b91505092915050565b600080604083850312156134e9576134e86146fd565b5b60006134f7858286016133b8565b9250506020613508858286016133b8565b9150509250929050565b60008060006060848603121561352b5761352a6146fd565b5b6000613539868287016133b8565b935050602061354a868287016133b8565b925050604061355b86828701613490565b9150509250925092565b6000806000806080858703121561357f5761357e6146fd565b5b600061358d878288016133b8565b945050602061359e878288016133b8565b93505060406135af87828801613490565b925050606085013567ffffffffffffffff8111156135d0576135cf6146f8565b5b6135dc8782880161340c565b91505092959194509250565b600080604083850312156135ff576135fe6146fd565b5b600061360d858286016133b8565b925050602061361e858286016133cd565b9150509250929050565b6000806040838503121561363f5761363e6146fd565b5b600061364d858286016133b8565b925050602061365e85828601613490565b9150509250929050565b60006020828403121561367e5761367d6146fd565b5b600061368c848285016133cd565b91505092915050565b6000602082840312156136ab576136aa6146fd565b5b60006136b9848285016133e2565b91505092915050565b6000602082840312156136d8576136d76146fd565b5b60006136e6848285016133f7565b91505092915050565b60008060208385031215613706576137056146fd565b5b600083013567ffffffffffffffff811115613724576137236146f8565b5b6137308582860161343a565b92509250509250929050565b600060208284031215613752576137516146fd565b5b600061376084828501613490565b91505092915050565b6137728161440c565b82525050565b6137818161440c565b82525050565b6137908161441e565b82525050565b60006137a18261422f565b6137ab8185614245565b93506137bb8185602086016144bf565b6137c481614702565b840191505092915050565b60006137da8261423a565b6137e48185614261565b93506137f48185602086016144bf565b6137fd81614702565b840191505092915050565b60006138138261423a565b61381d8185614272565b935061382d8185602086016144bf565b80840191505092915050565b6000613846602283614261565b915061385182614713565b604082019050919050565b6000613869602683614261565b915061387482614762565b604082019050919050565b600061388c602a83614261565b9150613897826147b1565b604082019050919050565b60006138af602383614261565b91506138ba82614800565b604082019050919050565b60006138d2602583614261565b91506138dd8261484f565b604082019050919050565b60006138f5603183614261565b91506139008261489e565b604082019050919050565b6000613918602083614261565b9150613923826148ed565b602082019050919050565b600061393b603983614261565b915061394682614916565b604082019050919050565b600061395e601883614261565b915061396982614965565b602082019050919050565b6000613981602b83614261565b915061398c8261498e565b604082019050919050565b60006139a4602683614261565b91506139af826149dd565b604082019050919050565b60006139c7602083614261565b91506139d282614a2c565b602082019050919050565b60006139ea602f83614261565b91506139f582614a55565b604082019050919050565b6000613a0d601a83614261565b9150613a1882614aa4565b602082019050919050565b6000613a30603283614261565b9150613a3b82614acd565b604082019050919050565b6000613a53601583614261565b9150613a5e82614b1c565b602082019050919050565b6000613a76602283614261565b9150613a8182614b45565b604082019050919050565b6000613a99600083614256565b9150613aa482614b94565b600082019050919050565b6000613abc601083614261565b9150613ac782614b97565b602082019050919050565b6000613adf600883614261565b9150613aea82614bc0565b602082019050919050565b6000613b02603383614261565b9150613b0d82614be9565b604082019050919050565b6000613b25601d83614261565b9150613b3082614c38565b602082019050919050565b6000613b48601e83614261565b9150613b5382614c61565b602082019050919050565b6000613b6b602183614261565b9150613b7682614c8a565b604082019050919050565b6000613b8e600e83614261565b9150613b9982614cd9565b602082019050919050565b6000613bb1602e83614261565b9150613bbc82614d02565b604082019050919050565b6000613bd4602683614261565b9150613bdf82614d51565b604082019050919050565b6000613bf7601383614261565b9150613c0282614da0565b602082019050919050565b6000613c1a601f83614261565b9150613c2582614dc9565b602082019050919050565b6000613c3d602f83614261565b9150613c4882614df2565b604082019050919050565b6000613c60602d83614261565b9150613c6b82614e41565b604082019050919050565b6000613c83602283614261565b9150613c8e82614e90565b604082019050919050565b604082016000820151613caf6000850182613769565b506020820151613cc26020850182613cd7565b50505050565b613cd181614492565b82525050565b613ce08161449c565b82525050565b6000613cf28285613808565b9150613cfe8284613808565b91508190509392505050565b6000613d1582613a8c565b9150819050919050565b6000602082019050613d346000830184613778565b92915050565b6000608082019050613d4f6000830187613778565b613d5c6020830186613778565b613d696040830185613cc8565b8181036060830152613d7b8184613796565b905095945050505050565b6000602082019050613d9b6000830184613787565b92915050565b60006020820190508181036000830152613dbb81846137cf565b905092915050565b60006020820190508181036000830152613ddc81613839565b9050919050565b60006020820190508181036000830152613dfc8161385c565b9050919050565b60006020820190508181036000830152613e1c8161387f565b9050919050565b60006020820190508181036000830152613e3c816138a2565b9050919050565b60006020820190508181036000830152613e5c816138c5565b9050919050565b60006020820190508181036000830152613e7c816138e8565b9050919050565b60006020820190508181036000830152613e9c8161390b565b9050919050565b60006020820190508181036000830152613ebc8161392e565b9050919050565b60006020820190508181036000830152613edc81613951565b9050919050565b60006020820190508181036000830152613efc81613974565b9050919050565b60006020820190508181036000830152613f1c81613997565b9050919050565b60006020820190508181036000830152613f3c816139ba565b9050919050565b60006020820190508181036000830152613f5c816139dd565b9050919050565b60006020820190508181036000830152613f7c81613a00565b9050919050565b60006020820190508181036000830152613f9c81613a23565b9050919050565b60006020820190508181036000830152613fbc81613a46565b9050919050565b60006020820190508181036000830152613fdc81613a69565b9050919050565b60006020820190508181036000830152613ffc81613aaf565b9050919050565b6000602082019050818103600083015261401c81613ad2565b9050919050565b6000602082019050818103600083015261403c81613af5565b9050919050565b6000602082019050818103600083015261405c81613b18565b9050919050565b6000602082019050818103600083015261407c81613b3b565b9050919050565b6000602082019050818103600083015261409c81613b5e565b9050919050565b600060208201905081810360008301526140bc81613b81565b9050919050565b600060208201905081810360008301526140dc81613ba4565b9050919050565b600060208201905081810360008301526140fc81613bc7565b9050919050565b6000602082019050818103600083015261411c81613bea565b9050919050565b6000602082019050818103600083015261413c81613c0d565b9050919050565b6000602082019050818103600083015261415c81613c30565b9050919050565b6000602082019050818103600083015261417c81613c53565b9050919050565b6000602082019050818103600083015261419c81613c76565b9050919050565b60006040820190506141b86000830184613c99565b92915050565b60006020820190506141d36000830184613cc8565b92915050565b60006141e36141f4565b90506141ef828261454e565b919050565b6000604051905090565b600067ffffffffffffffff821115614219576142186146b5565b5b61422282614702565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061428882614456565b915061429383614456565b9250826fffffffffffffffffffffffffffffffff038211156142b8576142b76145f9565b5b828201905092915050565b60006142ce82614492565b91506142d983614492565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561430e5761430d6145f9565b5b828201905092915050565b600061432482614492565b915061432f83614492565b92508261433f5761433e614628565b5b828204905092915050565b600061435582614492565b915061436083614492565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614399576143986145f9565b5b828202905092915050565b60006143af82614456565b91506143ba83614456565b9250828210156143cd576143cc6145f9565b5b828203905092915050565b60006143e382614492565b91506143ee83614492565b925082821015614401576144006145f9565b5b828203905092915050565b600061441782614472565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156144dd5780820151818401526020810190506144c2565b838111156144ec576000848401525b50505050565b60006144fd82614492565b91506000821415614511576145106145f9565b5b600182039050919050565b6000600282049050600182168061453457607f821691505b6020821081141561454857614547614657565b5b50919050565b61455782614702565b810181811067ffffffffffffffff82111715614576576145756146b5565b5b80604052505050565b600061458a82614492565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145bd576145bc6145f9565b5b600182019050919050565b60006145d382614492565b91506145de83614492565b9250826145ee576145ed614628565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f43616e74206d696e74206d6f7265207468616e2035207065722077616c6c6574600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f43616e74206d696e74206d6f7265207468616e20350000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f43616e74206d696e74206d6f7265207468616e203130206174206f6e63650000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820457468000000000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206861736e2774207374617274656400000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b614ee88161440c565b8114614ef357600080fd5b50565b614eff8161441e565b8114614f0a57600080fd5b50565b614f168161442a565b8114614f2157600080fd5b50565b614f2d81614492565b8114614f3857600080fd5b5056fea264697066735822122022625d962ceda781e376171175469f304bed1e4453cfb49d7af79eca00dbaca764736f6c63430008070033000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102045760003560e01c8063715018a611610118578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd14610738578063d7224ba014610775578063dc33e681146107a0578063e985e9c5146107dd578063f2fde38b1461081a57610204565b8063a22cb465146106a4578063ab0bcc41146106cd578063ac446002146106f8578063b88d4fde1461070f57610204565b80638da5cb5b116100e75780638da5cb5b146105cc5780639231ab2a146105f757806395d89b41146106345780639801b11c1461065f578063a0712d681461068857610204565b8063715018a614610545578063763f40111461055c578063791a2519146105785780638736482d146105a157610204565b80632f745c591161019b5780635aca1bb61161016a5780635aca1bb61461045d5780636352211e146104865780636c6df75c146104c35780636f8b44b0146104df57806370a082311461050857610204565b80632f745c591461039157806342842e0e146103ce5780634f6ccce7146103f757806355f804b31461043457610204565b806318160ddd116101d757806318160ddd146102d75780631e7269c51461030257806323b872dd1461033f5780632d20fb601461036857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613695565b610843565b60405161023d9190613d86565b60405180910390f35b34801561025257600080fd5b5061025b61098d565b6040516102689190613da1565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061373c565b610a1f565b6040516102a59190613d1f565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613628565b610aa4565b005b3480156102e357600080fd5b506102ec610bbd565b6040516102f991906141be565b60405180910390f35b34801561030e57600080fd5b50610329600480360381019061032491906134a5565b610bc7565b60405161033691906141be565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190613512565b610bdf565b005b34801561037457600080fd5b5061038f600480360381019061038a919061373c565b610bef565b005b34801561039d57600080fd5b506103b860048036038101906103b39190613628565b610ccd565b6040516103c591906141be565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613512565b610ecb565b005b34801561040357600080fd5b5061041e6004803603810190610419919061373c565b610eeb565b60405161042b91906141be565b60405180910390f35b34801561044057600080fd5b5061045b600480360381019061045691906136ef565b610f3e565b005b34801561046957600080fd5b50610484600480360381019061047f9190613668565b610fd0565b005b34801561049257600080fd5b506104ad60048036038101906104a8919061373c565b611069565b6040516104ba9190613d1f565b60405180910390f35b6104dd60048036038101906104d8919061373c565b61107f565b005b3480156104eb57600080fd5b506105066004803603810190610501919061373c565b61125a565b005b34801561051457600080fd5b5061052f600480360381019061052a91906134a5565b6112e0565b60405161053c91906141be565b60405180910390f35b34801561055157600080fd5b5061055a6113c9565b005b61057660048036038101906105719190613628565b611451565b005b34801561058457600080fd5b5061059f600480360381019061059a919061373c565b611532565b005b3480156105ad57600080fd5b506105b66115b8565b6040516105c391906141be565b60405180910390f35b3480156105d857600080fd5b506105e16115be565b6040516105ee9190613d1f565b60405180910390f35b34801561060357600080fd5b5061061e6004803603810190610619919061373c565b6115e7565b60405161062b91906141a3565b60405180910390f35b34801561064057600080fd5b506106496115ff565b6040516106569190613da1565b60405180910390f35b34801561066b57600080fd5b506106866004803603810190610681919061373c565b611691565b005b6106a2600480360381019061069d919061373c565b61169b565b005b3480156106b057600080fd5b506106cb60048036038101906106c691906135e8565b611793565b005b3480156106d957600080fd5b506106e2611914565b6040516106ef9190613d86565b60405180910390f35b34801561070457600080fd5b5061070d611927565b005b34801561071b57600080fd5b5061073660048036038101906107319190613565565b611aa8565b005b34801561074457600080fd5b5061075f600480360381019061075a919061373c565b611b04565b60405161076c9190613da1565b60405180910390f35b34801561078157600080fd5b5061078a611bab565b60405161079791906141be565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c291906134a5565b611bb1565b6040516107d491906141be565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff91906134d2565b611bc3565b6040516108119190613d86565b60405180910390f35b34801561082657600080fd5b50610841600480360381019061083c91906134a5565b611c57565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061090e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061097657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610986575061098582611d4f565b5b9050919050565b60606004805461099c9061451c565b80601f01602080910402602001604051908101604052809291908181526020018280546109c89061451c565b8015610a155780601f106109ea57610100808354040283529160200191610a15565b820191906000526020600020905b8154815290600101906020018083116109f857829003601f168201915b5050505050905090565b6000610a2a82611db9565b610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6090614163565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aaf82611069565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1790613fc3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b3f611dc7565b73ffffffffffffffffffffffffffffffffffffffff161480610b6e5750610b6d81610b68611dc7565b611bc3565b5b610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba490613ea3565b60405180910390fd5b610bb8838383611dcf565b505050565b6000600154905090565b600e6020528060005260406000206000915090505481565b610bea838383611e81565b505050565b610bf7611dc7565b73ffffffffffffffffffffffffffffffffffffffff16610c156115be565b73ffffffffffffffffffffffffffffffffffffffff1614610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290613f23565b60405180910390fd5b6002600b541415610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca890614123565b60405180910390fd5b6002600b81905550610cc28161243a565b6001600b8190555050565b6000610cd8836112e0565b8210610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090613dc3565b60405180910390fd5b6000610d23610bbd565b905060008060005b83811015610e89576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e1d57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e755786841415610e66578195505050505050610ec5565b8380610e719061457f565b9450505b508080610e819061457f565b915050610d2b565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc906140c3565b60405180910390fd5b92915050565b610ee683838360405180602001604052806000815250611aa8565b505050565b6000610ef5610bbd565b8210610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d90613e23565b60405180910390fd5b819050919050565b610f46611dc7565b73ffffffffffffffffffffffffffffffffffffffff16610f646115be565b73ffffffffffffffffffffffffffffffffffffffff1614610fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb190613f23565b60405180910390fd5b818160109190610fcb929190613299565b505050565b610fd8611dc7565b73ffffffffffffffffffffffffffffffffffffffff16610ff66115be565b73ffffffffffffffffffffffffffffffffffffffff161461104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390613f23565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b60006110748261268c565b600001519050919050565b600f60009054906101000a900460ff166110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590614103565b60405180910390fd5b600a811115611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990613fa3565b60405180910390fd5b6103e88161111e610bbd565b61112891906142c3565b1115611169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116090614003565b60405180910390fd5b600a81600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111b691906142c3565b11156111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee90613e83565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461124691906142c3565b925050819055506112573382612853565b50565b611262611dc7565b73ffffffffffffffffffffffffffffffffffffffff166112806115be565b73ffffffffffffffffffffffffffffffffffffffff16146112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90613f23565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134890613ee3565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6113d1611dc7565b73ffffffffffffffffffffffffffffffffffffffff166113ef6115be565b73ffffffffffffffffffffffffffffffffffffffff1614611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c90613f23565b60405180910390fd5b61144f6000612871565b565b611459611dc7565b73ffffffffffffffffffffffffffffffffffffffff166114776115be565b73ffffffffffffffffffffffffffffffffffffffff16146114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c490613f23565b60405180910390fd5b600d54816114d9610bbd565b6114e391906142c3565b1115611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b90614003565b60405180910390fd5b61152e8282612853565b5050565b61153a611dc7565b73ffffffffffffffffffffffffffffffffffffffff166115586115be565b73ffffffffffffffffffffffffffffffffffffffff16146115ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a590613f23565b60405180910390fd5b80600c8190555050565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115ef61331f565b6115f88261268c565b9050919050565b60606005805461160e9061451c565b80601f016020809104026020016040519081016040528092919081815260200182805461163a9061451c565b80156116875780601f1061165c57610100808354040283529160200191611687565b820191906000526020600020905b81548152906001019060200180831161166a57829003601f168201915b5050505050905090565b8060028190555050565b600a8111156116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690614063565b60405180910390fd5b600d54816116eb610bbd565b6116f591906142c3565b1115611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90614003565b60405180910390fd5b80600c54611744919061434a565b341015611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d906140a3565b60405180910390fd5b6117903382612853565b50565b61179b611dc7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090613f63565b60405180910390fd5b8060096000611816611dc7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118c3611dc7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119089190613d86565b60405180910390a35050565b600f60009054906101000a900460ff1681565b61192f611dc7565b73ffffffffffffffffffffffffffffffffffffffff1661194d6115be565b73ffffffffffffffffffffffffffffffffffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a90613f23565b60405180910390fd5b6002600b5414156119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090614123565b60405180910390fd5b6002600b8190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611a1790613d0a565b60006040518083038185875af1925050503d8060008114611a54576040519150601f19603f3d011682016040523d82523d6000602084013e611a59565b606091505b5050905080611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490613fe3565b60405180910390fd5b506001600b81905550565b611ab3848484611e81565b611abf84848484612935565b611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590614023565b60405180910390fd5b50505050565b6060611b0f82611db9565b611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4590613f43565b60405180910390fd5b6000611b58612acc565b90506000815111611b785760405180602001604052806000815250611ba3565b80611b8284612b5e565b604051602001611b93929190613ce6565b6040516020818303038152906040525b915050919050565b600a5481565b6000611bbc82612cbf565b9050919050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c5f611dc7565b73ffffffffffffffffffffffffffffffffffffffff16611c7d6115be565b73ffffffffffffffffffffffffffffffffffffffff1614611cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cca90613f23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90613de3565b60405180910390fd5b611d4c81612871565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611e8c8261268c565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611eb3611dc7565b73ffffffffffffffffffffffffffffffffffffffff161480611f0f5750611ed8611dc7565b73ffffffffffffffffffffffffffffffffffffffff16611ef784610a1f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f2b5750611f2a8260000151611f25611dc7565b611bc3565b5b905080611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6490613f83565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690613f03565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561204f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204690613e43565b60405180910390fd5b61205c8585856001612da8565b61206c6000848460000151611dcf565b6001600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166120da91906143a4565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661217e919061427d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461228491906142c3565b9050600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123ca576122fa81611db9565b156123c9576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506006600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124328686866001612dae565b505050505050565b6000600a54905060008211612484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247b90613ec3565b60405180910390fd5b60006001838361249491906142c3565b61249e91906143d8565b905060016002546124af91906143d8565b8111156124c85760016002546124c591906143d8565b90505b6124d181611db9565b612510576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612507906140e3565b60405180910390fd5b60008290505b81811161267357600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126605760006125938261268c565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506006600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b808061266b9061457f565b915050612516565b5060018161268191906142c3565b600a81905550505050565b61269461331f565b61269d82611db9565b6126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d390613e03565b60405180910390fd5b60006003548310612704576001600354846126f791906143d8565b61270191906142c3565b90505b60008390505b818110612812576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127fe5780935050505061284e565b50808061280a906144f2565b91505061270a565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284590614143565b60405180910390fd5b919050565b61286d828260405180602001604052806000815250612db4565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006129568473ffffffffffffffffffffffffffffffffffffffff16613276565b15612abf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261297f611dc7565b8786866040518563ffffffff1660e01b81526004016129a19493929190613d3a565b602060405180830381600087803b1580156129bb57600080fd5b505af19250505080156129ec57506040513d601f19601f820116820180604052508101906129e991906136c2565b60015b612a6f573d8060008114612a1c576040519150601f19603f3d011682016040523d82523d6000602084013e612a21565b606091505b50600081511415612a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5e90614023565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ac4565b600190505b949350505050565b606060108054612adb9061451c565b80601f0160208091040260200160405190810160405280929190818152602001828054612b079061451c565b8015612b545780601f10612b2957610100808354040283529160200191612b54565b820191906000526020600020905b815481529060010190602001808311612b3757829003601f168201915b5050505050905090565b60606000821415612ba6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cba565b600082905060005b60008214612bd8578080612bc19061457f565b915050600a82612bd19190614319565b9150612bae565b60008167ffffffffffffffff811115612bf457612bf36146b5565b5b6040519080825280601f01601f191660200182016040528015612c265781602001600182028036833780820191505090505b5090505b60008514612cb357600182612c3f91906143d8565b9150600a85612c4e91906145c8565b6030612c5a91906142c3565b60f81b818381518110612c7057612c6f614686565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cac9190614319565b9450612c2a565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2790613e63565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2290614083565b60405180910390fd5b612e3481611db9565b15612e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6b90614043565b60405180910390fd5b600354831115612eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb090614183565b60405180910390fd5b612ec66000858386612da8565b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612fc3919061427d565b6fffffffffffffffffffffffffffffffff168152602001858360200151612fea919061427d565b6fffffffffffffffffffffffffffffffff16815250600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561325957818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131f96000888488612935565b613238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322f90614023565b60405180910390fd5b81806132439061457f565b92505080806132519061457f565b915050613188565b508060018190555061326e6000878588612dae565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546132a59061451c565b90600052602060002090601f0160209004810192826132c7576000855561330e565b82601f106132e057803560ff191683800117855561330e565b8280016001018555821561330e579182015b8281111561330d5782358255916020019190600101906132f2565b5b50905061331b9190613359565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561337257600081600090555060010161335a565b5090565b6000613389613384846141fe565b6141d9565b9050828152602081018484840111156133a5576133a46146f3565b5b6133b08482856144b0565b509392505050565b6000813590506133c781614edf565b92915050565b6000813590506133dc81614ef6565b92915050565b6000813590506133f181614f0d565b92915050565b60008151905061340681614f0d565b92915050565b600082601f830112613421576134206146e9565b5b8135613431848260208601613376565b91505092915050565b60008083601f8401126134505761344f6146e9565b5b8235905067ffffffffffffffff81111561346d5761346c6146e4565b5b602083019150836001820283011115613489576134886146ee565b5b9250929050565b60008135905061349f81614f24565b92915050565b6000602082840312156134bb576134ba6146fd565b5b60006134c9848285016133b8565b91505092915050565b600080604083850312156134e9576134e86146fd565b5b60006134f7858286016133b8565b9250506020613508858286016133b8565b9150509250929050565b60008060006060848603121561352b5761352a6146fd565b5b6000613539868287016133b8565b935050602061354a868287016133b8565b925050604061355b86828701613490565b9150509250925092565b6000806000806080858703121561357f5761357e6146fd565b5b600061358d878288016133b8565b945050602061359e878288016133b8565b93505060406135af87828801613490565b925050606085013567ffffffffffffffff8111156135d0576135cf6146f8565b5b6135dc8782880161340c565b91505092959194509250565b600080604083850312156135ff576135fe6146fd565b5b600061360d858286016133b8565b925050602061361e858286016133cd565b9150509250929050565b6000806040838503121561363f5761363e6146fd565b5b600061364d858286016133b8565b925050602061365e85828601613490565b9150509250929050565b60006020828403121561367e5761367d6146fd565b5b600061368c848285016133cd565b91505092915050565b6000602082840312156136ab576136aa6146fd565b5b60006136b9848285016133e2565b91505092915050565b6000602082840312156136d8576136d76146fd565b5b60006136e6848285016133f7565b91505092915050565b60008060208385031215613706576137056146fd565b5b600083013567ffffffffffffffff811115613724576137236146f8565b5b6137308582860161343a565b92509250509250929050565b600060208284031215613752576137516146fd565b5b600061376084828501613490565b91505092915050565b6137728161440c565b82525050565b6137818161440c565b82525050565b6137908161441e565b82525050565b60006137a18261422f565b6137ab8185614245565b93506137bb8185602086016144bf565b6137c481614702565b840191505092915050565b60006137da8261423a565b6137e48185614261565b93506137f48185602086016144bf565b6137fd81614702565b840191505092915050565b60006138138261423a565b61381d8185614272565b935061382d8185602086016144bf565b80840191505092915050565b6000613846602283614261565b915061385182614713565b604082019050919050565b6000613869602683614261565b915061387482614762565b604082019050919050565b600061388c602a83614261565b9150613897826147b1565b604082019050919050565b60006138af602383614261565b91506138ba82614800565b604082019050919050565b60006138d2602583614261565b91506138dd8261484f565b604082019050919050565b60006138f5603183614261565b91506139008261489e565b604082019050919050565b6000613918602083614261565b9150613923826148ed565b602082019050919050565b600061393b603983614261565b915061394682614916565b604082019050919050565b600061395e601883614261565b915061396982614965565b602082019050919050565b6000613981602b83614261565b915061398c8261498e565b604082019050919050565b60006139a4602683614261565b91506139af826149dd565b604082019050919050565b60006139c7602083614261565b91506139d282614a2c565b602082019050919050565b60006139ea602f83614261565b91506139f582614a55565b604082019050919050565b6000613a0d601a83614261565b9150613a1882614aa4565b602082019050919050565b6000613a30603283614261565b9150613a3b82614acd565b604082019050919050565b6000613a53601583614261565b9150613a5e82614b1c565b602082019050919050565b6000613a76602283614261565b9150613a8182614b45565b604082019050919050565b6000613a99600083614256565b9150613aa482614b94565b600082019050919050565b6000613abc601083614261565b9150613ac782614b97565b602082019050919050565b6000613adf600883614261565b9150613aea82614bc0565b602082019050919050565b6000613b02603383614261565b9150613b0d82614be9565b604082019050919050565b6000613b25601d83614261565b9150613b3082614c38565b602082019050919050565b6000613b48601e83614261565b9150613b5382614c61565b602082019050919050565b6000613b6b602183614261565b9150613b7682614c8a565b604082019050919050565b6000613b8e600e83614261565b9150613b9982614cd9565b602082019050919050565b6000613bb1602e83614261565b9150613bbc82614d02565b604082019050919050565b6000613bd4602683614261565b9150613bdf82614d51565b604082019050919050565b6000613bf7601383614261565b9150613c0282614da0565b602082019050919050565b6000613c1a601f83614261565b9150613c2582614dc9565b602082019050919050565b6000613c3d602f83614261565b9150613c4882614df2565b604082019050919050565b6000613c60602d83614261565b9150613c6b82614e41565b604082019050919050565b6000613c83602283614261565b9150613c8e82614e90565b604082019050919050565b604082016000820151613caf6000850182613769565b506020820151613cc26020850182613cd7565b50505050565b613cd181614492565b82525050565b613ce08161449c565b82525050565b6000613cf28285613808565b9150613cfe8284613808565b91508190509392505050565b6000613d1582613a8c565b9150819050919050565b6000602082019050613d346000830184613778565b92915050565b6000608082019050613d4f6000830187613778565b613d5c6020830186613778565b613d696040830185613cc8565b8181036060830152613d7b8184613796565b905095945050505050565b6000602082019050613d9b6000830184613787565b92915050565b60006020820190508181036000830152613dbb81846137cf565b905092915050565b60006020820190508181036000830152613ddc81613839565b9050919050565b60006020820190508181036000830152613dfc8161385c565b9050919050565b60006020820190508181036000830152613e1c8161387f565b9050919050565b60006020820190508181036000830152613e3c816138a2565b9050919050565b60006020820190508181036000830152613e5c816138c5565b9050919050565b60006020820190508181036000830152613e7c816138e8565b9050919050565b60006020820190508181036000830152613e9c8161390b565b9050919050565b60006020820190508181036000830152613ebc8161392e565b9050919050565b60006020820190508181036000830152613edc81613951565b9050919050565b60006020820190508181036000830152613efc81613974565b9050919050565b60006020820190508181036000830152613f1c81613997565b9050919050565b60006020820190508181036000830152613f3c816139ba565b9050919050565b60006020820190508181036000830152613f5c816139dd565b9050919050565b60006020820190508181036000830152613f7c81613a00565b9050919050565b60006020820190508181036000830152613f9c81613a23565b9050919050565b60006020820190508181036000830152613fbc81613a46565b9050919050565b60006020820190508181036000830152613fdc81613a69565b9050919050565b60006020820190508181036000830152613ffc81613aaf565b9050919050565b6000602082019050818103600083015261401c81613ad2565b9050919050565b6000602082019050818103600083015261403c81613af5565b9050919050565b6000602082019050818103600083015261405c81613b18565b9050919050565b6000602082019050818103600083015261407c81613b3b565b9050919050565b6000602082019050818103600083015261409c81613b5e565b9050919050565b600060208201905081810360008301526140bc81613b81565b9050919050565b600060208201905081810360008301526140dc81613ba4565b9050919050565b600060208201905081810360008301526140fc81613bc7565b9050919050565b6000602082019050818103600083015261411c81613bea565b9050919050565b6000602082019050818103600083015261413c81613c0d565b9050919050565b6000602082019050818103600083015261415c81613c30565b9050919050565b6000602082019050818103600083015261417c81613c53565b9050919050565b6000602082019050818103600083015261419c81613c76565b9050919050565b60006040820190506141b86000830184613c99565b92915050565b60006020820190506141d36000830184613cc8565b92915050565b60006141e36141f4565b90506141ef828261454e565b919050565b6000604051905090565b600067ffffffffffffffff821115614219576142186146b5565b5b61422282614702565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061428882614456565b915061429383614456565b9250826fffffffffffffffffffffffffffffffff038211156142b8576142b76145f9565b5b828201905092915050565b60006142ce82614492565b91506142d983614492565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561430e5761430d6145f9565b5b828201905092915050565b600061432482614492565b915061432f83614492565b92508261433f5761433e614628565b5b828204905092915050565b600061435582614492565b915061436083614492565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614399576143986145f9565b5b828202905092915050565b60006143af82614456565b91506143ba83614456565b9250828210156143cd576143cc6145f9565b5b828203905092915050565b60006143e382614492565b91506143ee83614492565b925082821015614401576144006145f9565b5b828203905092915050565b600061441782614472565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156144dd5780820151818401526020810190506144c2565b838111156144ec576000848401525b50505050565b60006144fd82614492565b91506000821415614511576145106145f9565b5b600182039050919050565b6000600282049050600182168061453457607f821691505b6020821081141561454857614547614657565b5b50919050565b61455782614702565b810181811067ffffffffffffffff82111715614576576145756146b5565b5b80604052505050565b600061458a82614492565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145bd576145bc6145f9565b5b600182019050919050565b60006145d382614492565b91506145de83614492565b9250826145ee576145ed614628565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f43616e74206d696e74206d6f7265207468616e2035207065722077616c6c6574600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f43616e74206d696e74206d6f7265207468616e20350000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f43616e74206d696e74206d6f7265207468616e203130206174206f6e63650000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820457468000000000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206861736e2774207374617274656400000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b614ee88161440c565b8114614ef357600080fd5b50565b614eff8161441e565b8114614f0a57600080fd5b50565b614f168161442a565b8114614f2157600080fd5b50565b614f2d81614492565b8114614f3857600080fd5b5056fea264697066735822122022625d962ceda781e376171175469f304bed1e4453cfb49d7af79eca00dbaca764736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 10
Arg [1] : collectionSize_ (uint256): 10000
Arg [2] : amountForAuctionAndDev_ (uint256): 0
Arg [3] : amountForDevs_ (uint256): 0

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [1] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

42798:2948:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27860:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29586:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31111:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30674:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26421:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43263:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31961:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45359:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27052:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32174:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26584:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45066:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43349:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29409:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43865:397;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43538:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28286:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41899:103;;;;;;;;;;;;;:::i;:::-;;44268:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43438:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43183:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41248:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45596:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29741:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26243:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44596:293;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31379:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43311:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45172:181;;;;;;;;;;;;;:::i;:::-;;32402:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29902:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36825:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45483:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31716:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42157:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27860:370;27987:4;28032:25;28017:40;;;:11;:40;;;;:99;;;;28083:33;28068:48;;;:11;:48;;;;28017:99;:160;;;;28142:35;28127:50;;;:11;:50;;;;28017:160;:207;;;;28188:36;28212:11;28188:23;:36::i;:::-;28017:207;28003:221;;27860:370;;;:::o;29586:94::-;29640:13;29669:5;29662:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29586:94;:::o;31111:204::-;31179:7;31203:16;31211:7;31203;:16::i;:::-;31195:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31285:15;:24;31301:7;31285:24;;;;;;;;;;;;;;;;;;;;;31278:31;;31111:204;;;:::o;30674:379::-;30743:13;30759:24;30775:7;30759:15;:24::i;:::-;30743:40;;30804:5;30798:11;;:2;:11;;;;30790:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30889:5;30873:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30898:37;30915:5;30922:12;:10;:12::i;:::-;30898:16;:37::i;:::-;30873:62;30857:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;31019:28;31028:2;31032:7;31041:5;31019:8;:28::i;:::-;30736:317;30674:379;;:::o;26421:94::-;26474:7;26497:12;;26490:19;;26421:94;:::o;43263:41::-;;;;;;;;;;;;;;;;;:::o;31961:150::-;32077:28;32087:4;32093:2;32097:7;32077:9;:28::i;:::-;31961:150;;;:::o;45359:118::-;41479:12;:10;:12::i;:::-;41468:23;;:7;:5;:7::i;:::-;:23;;;41460:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1:::1;22769:7;;:19;;22761:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1;22902:7;:18;;;;45443:28:::2;45462:8;45443:18;:28::i;:::-;22127:1:::1;23081:7;:22;;;;45359:118:::0;:::o;27052:744::-;27161:7;27196:16;27206:5;27196:9;:16::i;:::-;27188:5;:24;27180:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27258:22;27283:13;:11;:13::i;:::-;27258:38;;27303:19;27333:25;27383:9;27378:350;27402:14;27398:1;:18;27378:350;;;27432:31;27466:11;:14;27478:1;27466:14;;;;;;;;;;;27432:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27519:1;27493:28;;:9;:14;;;:28;;;27489:89;;27554:9;:14;;;27534:34;;27489:89;27611:5;27590:26;;:17;:26;;;27586:135;;;27648:5;27633:11;:20;27629:59;;;27675:1;27668:8;;;;;;;;;27629:59;27698:13;;;;;:::i;:::-;;;;27586:135;27423:305;27418:3;;;;;:::i;:::-;;;;27378:350;;;;27734:56;;;;;;;;;;:::i;:::-;;;;;;;;27052:744;;;;;:::o;32174:165::-;32294:39;32311:4;32317:2;32321:7;32294:39;;;;;;;;;;;;:16;:39::i;:::-;32174:165;;;:::o;26584:177::-;26651:7;26683:13;:11;:13::i;:::-;26675:5;:21;26667:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26750:5;26743:12;;26584:177;;;:::o;45066:100::-;41479:12;:10;:12::i;:::-;41468:23;;:7;:5;:7::i;:::-;:23;;;41460:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45153:7:::1;;45137:13;:23;;;;;;;:::i;:::-;;45066:100:::0;;:::o;43349:81::-;41479:12;:10;:12::i;:::-;41468:23;;:7;:5;:7::i;:::-;:23;;;41460:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43419:5:::1;43407:9;;:17;;;;;;;;;;;;;;;;;;43349:81:::0;:::o;29409:118::-;29473:7;29496:20;29508:7;29496:11;:20::i;:::-;:25;;;29489:32;;29409:118;;;:::o;43865:397::-;43942:9;;;;;;;;;;;43934:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;44002:2;43990:8;:14;;43982:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44073:4;44061:8;44045:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:32;;44037:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;44138:2;44126:8;44105:6;:18;44112:10;44105:18;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;:35;;44097:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;44206:8;44184:6;:18;44191:10;44184:18;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;44225:31;44235:10;44247:8;44225:9;:31::i;:::-;43865:397;:::o;43538:85::-;41479:12;:10;:12::i;:::-;41468:23;;:7;:5;:7::i;:::-;:23;;;41460:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43611:6:::1;43599:9;:18;;;;43538:85:::0;:::o;28286:211::-;28350:7;28391:1;28374:19;;:5;:19;;;;28366:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28463:12;:19;28476:5;28463:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;28455:36;;28448:43;;28286:211;;;:::o;41899:103::-;41479:12;:10;:12::i;:::-;41468:23;;:7;:5;:7::i;:::-;:23;;;41460:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41964:30:::1;41991:1;41964:18;:30::i;:::-;41899:103::o:0;44268:181::-;41479:12;:10;:12::i;:::-;41468:23;;:7;:5;:7::i;:::-;:23;;;41460:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44391:9:::1;;44379:8;44363:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;44355:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;44420:23;44430:2;44434:8;44420:9;:23::i;:::-;44268:181:::0;;:::o;43438:94::-;41479:12;:10;:12::i;:::-;41468:23;;:7;:5;:7::i;:::-;:23;;;41460:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43521:5:::1;43504:14;:22;;;;43438:94:::0;:::o;43183:42::-;;;;:::o;41248:87::-;41294:7;41321:6;;;;;;;;;;;41314:13;;41248:87;:::o;45596:147::-;45677:21;;:::i;:::-;45717:20;45729:7;45717:11;:20::i;:::-;45710:27;;45596:147;;;:::o;29741:98::-;29797:13;29826:7;29819:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29741:98;:::o;26243:110::-;26330:17;26313:14;:34;;;;26243:110;:::o;44596:293::-;44671:2;44659:8;:14;;44651:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44751:9;;44739:8;44723:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;44715:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;44818:8;44801:14;;:25;;;;:::i;:::-;44788:9;:38;;44780:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44852:31;44862:10;44874:8;44852:9;:31::i;:::-;44596:293;:::o;31379:274::-;31482:12;:10;:12::i;:::-;31470:24;;:8;:24;;;;31462:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31579:8;31534:18;:32;31553:12;:10;:12::i;:::-;31534:32;;;;;;;;;;;;;;;:42;31567:8;31534:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31628:8;31599:48;;31614:12;:10;:12::i;:::-;31599:48;;;31638:8;31599:48;;;;;;:::i;:::-;;;;;;;;31379:274;;:::o;43311:28::-;;;;;;;;;;;;;:::o;45172:181::-;41479:12;:10;:12::i;:::-;41468:23;;:7;:5;:7::i;:::-;:23;;;41460:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1:::1;22769:7;;:19;;22761:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1;22902:7;:18;;;;45237:12:::2;45255:10;:15;;45278:21;45255:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45236:68;;;45319:7;45311:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;45229:124;22127:1:::1;23081:7;:22;;;;45172:181::o:0;32402:319::-;32547:28;32557:4;32563:2;32567:7;32547:9;:28::i;:::-;32598:48;32621:4;32627:2;32631:7;32640:5;32598:22;:48::i;:::-;32582:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;32402:319;;;;:::o;29902:394::-;30000:13;30041:16;30049:7;30041;:16::i;:::-;30025:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;30131:21;30155:10;:8;:10::i;:::-;30131:34;;30210:1;30192:7;30186:21;:25;:104;;;;;;;;;;;;;;;;;30247:7;30256:18;:7;:16;:18::i;:::-;30230:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30186:104;30172:118;;;29902:394;;;:::o;36825:43::-;;;;:::o;45483:107::-;45541:7;45564:20;45578:5;45564:13;:20::i;:::-;45557:27;;45483:107;;;:::o;31716:186::-;31838:4;31861:18;:25;31880:5;31861:25;;;;;;;;;;;;;;;:35;31887:8;31861:35;;;;;;;;;;;;;;;;;;;;;;;;;31854:42;;31716:186;;;;:::o;42157:201::-;41479:12;:10;:12::i;:::-;41468:23;;:7;:5;:7::i;:::-;:23;;;41460:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42266:1:::1;42246:22;;:8;:22;;;;42238:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42322:28;42341:8;42322:18;:28::i;:::-;42157:201:::0;:::o;13440:157::-;13525:4;13564:25;13549:40;;;:11;:40;;;;13542:47;;13440:157;;;:::o;32960:105::-;33017:4;33047:12;;33037:7;:22;33030:29;;32960:105;;;:::o;23797:98::-;23850:7;23877:10;23870:17;;23797:98;:::o;36647:172::-;36771:2;36744:15;:24;36760:7;36744:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36805:7;36801:2;36785:28;;36794:5;36785:28;;;;;;;;;;;;36647:172;;;:::o;35012:1529::-;35109:35;35147:20;35159:7;35147:11;:20::i;:::-;35109:58;;35176:22;35218:13;:18;;;35202:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;35271:12;:10;:12::i;:::-;35247:36;;:20;35259:7;35247:11;:20::i;:::-;:36;;;35202:81;:142;;;;35294:50;35311:13;:18;;;35331:12;:10;:12::i;:::-;35294:16;:50::i;:::-;35202:142;35176:169;;35370:17;35354:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35502:4;35480:26;;:13;:18;;;:26;;;35464:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;35591:1;35577:16;;:2;:16;;;;35569:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35644:43;35666:4;35672:2;35676:7;35685:1;35644:21;:43::i;:::-;35744:49;35761:1;35765:7;35774:13;:18;;;35744:8;:49::i;:::-;35832:1;35802:12;:18;35815:4;35802:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35868:1;35840:12;:16;35853:2;35840:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35899:43;;;;;;;;35914:2;35899:43;;;;;;35925:15;35899:43;;;;;35876:11;:20;35888:7;35876:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36170:19;36202:1;36192:7;:11;;;;:::i;:::-;36170:33;;36255:1;36214:43;;:11;:24;36226:11;36214:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;36210:236;;;36272:20;36280:11;36272:7;:20::i;:::-;36268:171;;;36332:97;;;;;;;;36359:13;:18;;;36332:97;;;;;;36390:13;:28;;;36332:97;;;;;36305:11;:24;36317:11;36305:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36268:171;36210:236;36478:7;36474:2;36459:27;;36468:4;36459:27;;;;;;;;;;;;36493:42;36514:4;36520:2;36524:7;36533:1;36493:20;:42::i;:::-;35102:1439;;;35012:1529;;;:::o;36973:846::-;37035:25;37063:24;;37035:52;;37113:1;37102:8;:12;37094:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;37150:16;37200:1;37189:8;37169:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;37150:51;;37240:1;37223:14;;:18;;;;:::i;:::-;37212:8;:29;37208:81;;;37280:1;37263:14;;:18;;;;:::i;:::-;37252:29;;37208:81;37404:17;37412:8;37404:7;:17::i;:::-;37396:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37476:9;37488:17;37476:29;;37471:297;37512:8;37507:1;:13;37471:297;;37571:1;37540:33;;:11;:14;37552:1;37540:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;37536:225;;;37586:31;37620:14;37632:1;37620:11;:14::i;:::-;37586:48;;37662:89;;;;;;;;37689:9;:14;;;37662:89;;;;;;37716:9;:24;;;37662:89;;;;;37645:11;:14;37657:1;37645:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37575:186;37536:225;37522:3;;;;;:::i;:::-;;;;37471:297;;;;37812:1;37801:8;:12;;;;:::i;:::-;37774:24;:39;;;;37028:791;;36973:846;:::o;28749:606::-;28825:21;;:::i;:::-;28866:16;28874:7;28866;:16::i;:::-;28858:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28938:26;28986:12;;28975:7;:23;28971:93;;29055:1;29040:12;;29030:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;29009:47;;28971:93;29077:12;29092:7;29077:22;;29072:212;29109:18;29101:4;:26;29072:212;;29146:31;29180:11;:17;29192:4;29180:17;;;;;;;;;;;29146:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29236:1;29210:28;;:9;:14;;;:28;;;29206:71;;29258:9;29251:16;;;;;;;29206:71;29137:147;29129:6;;;;;:::i;:::-;;;;29072:212;;;;29292:57;;;;;;;;;;:::i;:::-;;;;;;;;28749:606;;;;:::o;33071:98::-;33136:27;33146:2;33150:8;33136:27;;;;;;;;;;;;:9;:27::i;:::-;33071:98;;:::o;42518:191::-;42592:16;42611:6;;;;;;;;;;;42592:25;;42637:8;42628:6;;:17;;;;;;;;;;;;;;;;;;42692:8;42661:40;;42682:8;42661:40;;;;;;;;;;;;42581:128;42518:191;:::o;38362:690::-;38499:4;38516:15;:2;:13;;;:15::i;:::-;38512:535;;;38571:2;38555:36;;;38592:12;:10;:12::i;:::-;38606:4;38612:7;38621:5;38555:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38542:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38803:1;38786:6;:13;:18;38782:215;;;38819:61;;;;;;;;;;:::i;:::-;;;;;;;;38782:215;38965:6;38959:13;38950:6;38946:2;38942:15;38935:38;38542:464;38687:45;;;38677:55;;;:6;:55;;;;38670:62;;;;;38512:535;39035:4;39028:11;;38362:690;;;;;;;:::o;44952:108::-;45012:13;45041;45034:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44952:108;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;28503:240::-;28564:7;28613:1;28596:19;;:5;:19;;;;28580:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;28704:12;:19;28717:5;28704:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;28696:41;;28689:48;;28503:240;;;:::o;39514:141::-;;;;;:::o;40041:140::-;;;;;:::o;33508:1272::-;33613:20;33636:12;;33613:35;;33677:1;33663:16;;:2;:16;;;;33655:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33854:21;33862:12;33854:7;:21::i;:::-;33853:22;33845:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33936:12;;33924:8;:24;;33916:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33996:61;34026:1;34030:2;34034:12;34048:8;33996:21;:61::i;:::-;34066:30;34099:12;:16;34112:2;34099:16;;;;;;;;;;;;;;;34066:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34141:119;;;;;;;;34191:8;34161:11;:19;;;:39;;;;:::i;:::-;34141:119;;;;;;34244:8;34209:11;:24;;;:44;;;;:::i;:::-;34141:119;;;;;34122:12;:16;34135:2;34122:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34295:43;;;;;;;;34310:2;34295:43;;;;;;34321:15;34295:43;;;;;34267:11;:25;34279:12;34267:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34347:20;34370:12;34347:35;;34396:9;34391:281;34415:8;34411:1;:12;34391:281;;;34469:12;34465:2;34444:38;;34461:1;34444:38;;;;;;;;;;;;34509:59;34540:1;34544:2;34548:12;34562:5;34509:22;:59::i;:::-;34491:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;34650:14;;;;;:::i;:::-;;;;34425:3;;;;;:::i;:::-;;;;34391:281;;;;34695:12;34680;:27;;;;34714:60;34743:1;34747:2;34751:12;34765:8;34714:20;:60::i;:::-;33606:1174;;;33508:1272;;;:::o;3357:326::-;3417:4;3674:1;3652:7;:19;;;:23;3645:30;;3357: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:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:329::-;2131:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:119;;;2186:79;;:::i;:::-;2148:119;2306:1;2331:53;2376:7;2367:6;2356:9;2352:22;2331:53;:::i;:::-;2321:63;;2277:117;2072:329;;;;:::o;2407:474::-;2475:6;2483;2532:2;2520:9;2511:7;2507:23;2503:32;2500:119;;;2538:79;;:::i;:::-;2500:119;2658:1;2683:53;2728:7;2719:6;2708:9;2704:22;2683:53;:::i;:::-;2673:63;;2629:117;2785:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2756:118;2407:474;;;;;:::o;2887:619::-;2964:6;2972;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;3410:2;3436:53;3481:7;3472:6;3461:9;3457:22;3436:53;:::i;:::-;3426:63;;3381:118;2887:619;;;;;:::o;3512:943::-;3607:6;3615;3623;3631;3680:3;3668:9;3659:7;3655:23;3651:33;3648:120;;;3687:79;;:::i;:::-;3648:120;3807:1;3832:53;3877:7;3868:6;3857:9;3853:22;3832:53;:::i;:::-;3822:63;;3778:117;3934:2;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3905:118;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;4218:2;4207:9;4203:18;4190:32;4249:18;4241:6;4238:30;4235:117;;;4271:79;;:::i;:::-;4235:117;4376:62;4430:7;4421:6;4410:9;4406:22;4376:62;:::i;:::-;4366:72;;4161:287;3512:943;;;;;;;:::o;4461:468::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:50;4904:7;4895:6;4884:9;4880:22;4862:50;:::i;:::-;4852:60;;4807:115;4461:468;;;;;:::o;4935:474::-;5003:6;5011;5060:2;5048:9;5039:7;5035:23;5031:32;5028:119;;;5066:79;;:::i;:::-;5028:119;5186:1;5211:53;5256:7;5247:6;5236:9;5232:22;5211:53;:::i;:::-;5201:63;;5157:117;5313:2;5339:53;5384:7;5375:6;5364:9;5360:22;5339:53;:::i;:::-;5329:63;;5284:118;4935:474;;;;;:::o;5415:323::-;5471:6;5520:2;5508:9;5499:7;5495:23;5491:32;5488:119;;;5526:79;;:::i;:::-;5488:119;5646:1;5671:50;5713:7;5704:6;5693:9;5689:22;5671:50;:::i;:::-;5661:60;;5617:114;5415:323;;;;:::o;5744:327::-;5802:6;5851:2;5839:9;5830:7;5826:23;5822:32;5819:119;;;5857:79;;:::i;:::-;5819:119;5977:1;6002:52;6046:7;6037:6;6026:9;6022:22;6002:52;:::i;:::-;5992:62;;5948:116;5744:327;;;;:::o;6077:349::-;6146:6;6195:2;6183:9;6174:7;6170:23;6166:32;6163:119;;;6201:79;;:::i;:::-;6163:119;6321:1;6346:63;6401:7;6392:6;6381:9;6377:22;6346:63;:::i;:::-;6336:73;;6292:127;6077:349;;;;:::o;6432:529::-;6503:6;6511;6560:2;6548:9;6539:7;6535:23;6531:32;6528:119;;;6566:79;;:::i;:::-;6528:119;6714:1;6703:9;6699:17;6686:31;6744:18;6736:6;6733:30;6730:117;;;6766:79;;:::i;:::-;6730:117;6879:65;6936:7;6927:6;6916:9;6912:22;6879:65;:::i;:::-;6861:83;;;;6657:297;6432:529;;;;;:::o;6967:329::-;7026:6;7075:2;7063:9;7054:7;7050:23;7046:32;7043:119;;;7081:79;;:::i;:::-;7043:119;7201:1;7226:53;7271:7;7262:6;7251:9;7247:22;7226:53;:::i;:::-;7216:63;;7172:117;6967:329;;;;:::o;7302:108::-;7379:24;7397:5;7379:24;:::i;:::-;7374:3;7367:37;7302:108;;:::o;7416:118::-;7503:24;7521:5;7503:24;:::i;:::-;7498:3;7491:37;7416:118;;:::o;7540:109::-;7621:21;7636:5;7621:21;:::i;:::-;7616:3;7609:34;7540:109;;:::o;7655:360::-;7741:3;7769:38;7801:5;7769:38;:::i;:::-;7823:70;7886:6;7881:3;7823:70;:::i;:::-;7816:77;;7902:52;7947:6;7942:3;7935:4;7928:5;7924:16;7902:52;:::i;:::-;7979:29;8001:6;7979:29;:::i;:::-;7974:3;7970:39;7963:46;;7745:270;7655:360;;;;:::o;8021:364::-;8109:3;8137:39;8170:5;8137:39;:::i;:::-;8192:71;8256:6;8251:3;8192:71;:::i;:::-;8185:78;;8272:52;8317:6;8312:3;8305:4;8298:5;8294:16;8272:52;:::i;:::-;8349:29;8371:6;8349:29;:::i;:::-;8344:3;8340:39;8333:46;;8113:272;8021:364;;;;:::o;8391:377::-;8497:3;8525:39;8558:5;8525:39;:::i;:::-;8580:89;8662:6;8657:3;8580:89;:::i;:::-;8573:96;;8678:52;8723:6;8718:3;8711:4;8704:5;8700:16;8678:52;:::i;:::-;8755:6;8750:3;8746:16;8739:23;;8501:267;8391:377;;;;:::o;8774:366::-;8916:3;8937:67;9001:2;8996:3;8937:67;:::i;:::-;8930:74;;9013:93;9102:3;9013:93;:::i;:::-;9131:2;9126:3;9122:12;9115:19;;8774:366;;;:::o;9146:::-;9288:3;9309:67;9373:2;9368:3;9309:67;:::i;:::-;9302:74;;9385:93;9474:3;9385:93;:::i;:::-;9503:2;9498:3;9494:12;9487:19;;9146:366;;;:::o;9518:::-;9660:3;9681:67;9745:2;9740:3;9681:67;:::i;:::-;9674:74;;9757:93;9846:3;9757:93;:::i;:::-;9875:2;9870:3;9866:12;9859:19;;9518:366;;;:::o;9890:::-;10032:3;10053:67;10117:2;10112:3;10053:67;:::i;:::-;10046:74;;10129:93;10218:3;10129:93;:::i;:::-;10247:2;10242:3;10238:12;10231:19;;9890:366;;;:::o;10262:::-;10404:3;10425:67;10489:2;10484:3;10425:67;:::i;:::-;10418:74;;10501:93;10590:3;10501:93;:::i;:::-;10619:2;10614:3;10610:12;10603:19;;10262:366;;;:::o;10634:::-;10776:3;10797:67;10861:2;10856:3;10797:67;:::i;:::-;10790:74;;10873:93;10962:3;10873:93;:::i;:::-;10991:2;10986:3;10982:12;10975:19;;10634:366;;;:::o;11006:::-;11148:3;11169:67;11233:2;11228:3;11169:67;:::i;:::-;11162:74;;11245:93;11334:3;11245:93;:::i;:::-;11363:2;11358:3;11354:12;11347:19;;11006:366;;;:::o;11378:::-;11520:3;11541:67;11605:2;11600:3;11541:67;:::i;:::-;11534:74;;11617:93;11706:3;11617:93;:::i;:::-;11735:2;11730:3;11726:12;11719:19;;11378:366;;;:::o;11750:::-;11892:3;11913:67;11977:2;11972:3;11913:67;:::i;:::-;11906:74;;11989:93;12078:3;11989:93;:::i;:::-;12107:2;12102:3;12098:12;12091:19;;11750:366;;;:::o;12122:::-;12264:3;12285:67;12349:2;12344:3;12285:67;:::i;:::-;12278:74;;12361:93;12450:3;12361:93;:::i;:::-;12479:2;12474:3;12470:12;12463:19;;12122:366;;;:::o;12494:::-;12636:3;12657:67;12721:2;12716:3;12657:67;:::i;:::-;12650:74;;12733:93;12822:3;12733:93;:::i;:::-;12851:2;12846:3;12842:12;12835:19;;12494:366;;;:::o;12866:::-;13008:3;13029:67;13093:2;13088:3;13029:67;:::i;:::-;13022:74;;13105:93;13194:3;13105:93;:::i;:::-;13223:2;13218:3;13214:12;13207:19;;12866:366;;;:::o;13238:::-;13380:3;13401:67;13465:2;13460:3;13401:67;:::i;:::-;13394:74;;13477:93;13566:3;13477:93;:::i;:::-;13595:2;13590:3;13586:12;13579:19;;13238:366;;;:::o;13610:::-;13752:3;13773:67;13837:2;13832:3;13773:67;:::i;:::-;13766:74;;13849:93;13938:3;13849:93;:::i;:::-;13967:2;13962:3;13958:12;13951:19;;13610:366;;;:::o;13982:::-;14124:3;14145:67;14209:2;14204:3;14145:67;:::i;:::-;14138:74;;14221:93;14310:3;14221:93;:::i;:::-;14339:2;14334:3;14330:12;14323:19;;13982:366;;;:::o;14354:::-;14496:3;14517:67;14581:2;14576:3;14517:67;:::i;:::-;14510:74;;14593:93;14682:3;14593:93;:::i;:::-;14711:2;14706:3;14702:12;14695:19;;14354:366;;;:::o;14726:::-;14868:3;14889:67;14953:2;14948:3;14889:67;:::i;:::-;14882:74;;14965:93;15054:3;14965:93;:::i;:::-;15083:2;15078:3;15074:12;15067:19;;14726:366;;;:::o;15098:398::-;15257:3;15278:83;15359:1;15354:3;15278:83;:::i;:::-;15271:90;;15370:93;15459:3;15370:93;:::i;:::-;15488:1;15483:3;15479:11;15472:18;;15098:398;;;:::o;15502:366::-;15644:3;15665:67;15729:2;15724:3;15665:67;:::i;:::-;15658:74;;15741:93;15830:3;15741:93;:::i;:::-;15859:2;15854:3;15850:12;15843:19;;15502:366;;;:::o;15874:365::-;16016:3;16037:66;16101:1;16096:3;16037:66;:::i;:::-;16030:73;;16112:93;16201:3;16112:93;:::i;:::-;16230:2;16225:3;16221:12;16214:19;;15874:365;;;:::o;16245:366::-;16387:3;16408:67;16472:2;16467:3;16408:67;:::i;:::-;16401:74;;16484:93;16573:3;16484:93;:::i;:::-;16602:2;16597:3;16593:12;16586:19;;16245:366;;;:::o;16617:::-;16759:3;16780:67;16844:2;16839:3;16780:67;:::i;:::-;16773:74;;16856:93;16945:3;16856:93;:::i;:::-;16974:2;16969:3;16965:12;16958:19;;16617:366;;;:::o;16989:::-;17131:3;17152:67;17216:2;17211:3;17152:67;:::i;:::-;17145:74;;17228:93;17317:3;17228:93;:::i;:::-;17346:2;17341:3;17337:12;17330:19;;16989:366;;;:::o;17361:::-;17503:3;17524:67;17588:2;17583:3;17524:67;:::i;:::-;17517:74;;17600:93;17689:3;17600:93;:::i;:::-;17718:2;17713:3;17709:12;17702:19;;17361:366;;;:::o;17733:::-;17875:3;17896:67;17960:2;17955:3;17896:67;:::i;:::-;17889:74;;17972:93;18061:3;17972:93;:::i;:::-;18090:2;18085:3;18081:12;18074:19;;17733:366;;;:::o;18105:::-;18247:3;18268:67;18332:2;18327:3;18268:67;:::i;:::-;18261:74;;18344:93;18433:3;18344:93;:::i;:::-;18462:2;18457:3;18453:12;18446:19;;18105:366;;;:::o;18477:::-;18619:3;18640:67;18704:2;18699:3;18640:67;:::i;:::-;18633:74;;18716:93;18805:3;18716:93;:::i;:::-;18834:2;18829:3;18825:12;18818:19;;18477:366;;;:::o;18849:::-;18991:3;19012:67;19076:2;19071:3;19012:67;:::i;:::-;19005:74;;19088:93;19177:3;19088:93;:::i;:::-;19206:2;19201:3;19197:12;19190:19;;18849:366;;;:::o;19221:::-;19363:3;19384:67;19448:2;19443:3;19384:67;:::i;:::-;19377:74;;19460:93;19549:3;19460:93;:::i;:::-;19578:2;19573:3;19569:12;19562:19;;19221:366;;;:::o;19593:::-;19735:3;19756:67;19820:2;19815:3;19756:67;:::i;:::-;19749:74;;19832:93;19921:3;19832:93;:::i;:::-;19950:2;19945:3;19941:12;19934:19;;19593:366;;;:::o;19965:::-;20107:3;20128:67;20192:2;20187:3;20128:67;:::i;:::-;20121:74;;20204:93;20293:3;20204:93;:::i;:::-;20322:2;20317:3;20313:12;20306:19;;19965:366;;;:::o;20337:::-;20479:3;20500:67;20564:2;20559:3;20500:67;:::i;:::-;20493:74;;20576:93;20665:3;20576:93;:::i;:::-;20694:2;20689:3;20685:12;20678:19;;20337:366;;;:::o;20779:527::-;20938:4;20933:3;20929:14;21025:4;21018:5;21014:16;21008:23;21044:63;21101:4;21096:3;21092:14;21078:12;21044:63;:::i;:::-;20953:164;21209:4;21202:5;21198:16;21192:23;21228:61;21283:4;21278:3;21274:14;21260:12;21228:61;:::i;:::-;21127:172;20907:399;20779:527;;:::o;21312:118::-;21399:24;21417:5;21399:24;:::i;:::-;21394:3;21387:37;21312:118;;:::o;21436:105::-;21511:23;21528:5;21511:23;:::i;:::-;21506:3;21499:36;21436:105;;:::o;21547:435::-;21727:3;21749:95;21840:3;21831:6;21749:95;:::i;:::-;21742:102;;21861:95;21952:3;21943:6;21861:95;:::i;:::-;21854:102;;21973:3;21966:10;;21547:435;;;;;:::o;21988:379::-;22172:3;22194:147;22337:3;22194:147;:::i;:::-;22187:154;;22358:3;22351:10;;21988:379;;;:::o;22373:222::-;22466:4;22504:2;22493:9;22489:18;22481:26;;22517:71;22585:1;22574:9;22570:17;22561:6;22517:71;:::i;:::-;22373:222;;;;:::o;22601:640::-;22796:4;22834:3;22823:9;22819:19;22811:27;;22848:71;22916:1;22905:9;22901:17;22892:6;22848:71;:::i;:::-;22929:72;22997:2;22986:9;22982:18;22973:6;22929:72;:::i;:::-;23011;23079:2;23068:9;23064:18;23055:6;23011:72;:::i;:::-;23130:9;23124:4;23120:20;23115:2;23104:9;23100:18;23093:48;23158:76;23229:4;23220:6;23158:76;:::i;:::-;23150:84;;22601:640;;;;;;;:::o;23247:210::-;23334:4;23372:2;23361:9;23357:18;23349:26;;23385:65;23447:1;23436:9;23432:17;23423:6;23385:65;:::i;:::-;23247:210;;;;:::o;23463:313::-;23576:4;23614:2;23603:9;23599:18;23591:26;;23663:9;23657:4;23653:20;23649:1;23638:9;23634:17;23627:47;23691:78;23764:4;23755:6;23691:78;:::i;:::-;23683:86;;23463:313;;;;:::o;23782:419::-;23948:4;23986:2;23975:9;23971:18;23963:26;;24035:9;24029:4;24025:20;24021:1;24010:9;24006:17;23999:47;24063:131;24189:4;24063:131;:::i;:::-;24055:139;;23782:419;;;:::o;24207:::-;24373:4;24411:2;24400:9;24396:18;24388:26;;24460:9;24454:4;24450:20;24446:1;24435:9;24431:17;24424:47;24488:131;24614:4;24488:131;:::i;:::-;24480:139;;24207:419;;;:::o;24632:::-;24798:4;24836:2;24825:9;24821:18;24813:26;;24885:9;24879:4;24875:20;24871:1;24860:9;24856:17;24849:47;24913:131;25039:4;24913:131;:::i;:::-;24905:139;;24632:419;;;:::o;25057:::-;25223:4;25261:2;25250:9;25246:18;25238:26;;25310:9;25304:4;25300:20;25296:1;25285:9;25281:17;25274:47;25338:131;25464:4;25338:131;:::i;:::-;25330:139;;25057:419;;;:::o;25482:::-;25648:4;25686:2;25675:9;25671:18;25663:26;;25735:9;25729:4;25725:20;25721:1;25710:9;25706:17;25699:47;25763:131;25889:4;25763:131;:::i;:::-;25755:139;;25482:419;;;:::o;25907:::-;26073:4;26111:2;26100:9;26096:18;26088:26;;26160:9;26154:4;26150:20;26146:1;26135:9;26131:17;26124:47;26188:131;26314:4;26188:131;:::i;:::-;26180:139;;25907:419;;;:::o;26332:::-;26498:4;26536:2;26525:9;26521:18;26513:26;;26585:9;26579:4;26575:20;26571:1;26560:9;26556:17;26549:47;26613:131;26739:4;26613:131;:::i;:::-;26605:139;;26332:419;;;:::o;26757:::-;26923:4;26961:2;26950:9;26946:18;26938:26;;27010:9;27004:4;27000:20;26996:1;26985:9;26981:17;26974:47;27038:131;27164:4;27038:131;:::i;:::-;27030:139;;26757:419;;;:::o;27182:::-;27348:4;27386:2;27375:9;27371:18;27363:26;;27435:9;27429:4;27425:20;27421:1;27410:9;27406:17;27399:47;27463:131;27589:4;27463:131;:::i;:::-;27455:139;;27182:419;;;:::o;27607:::-;27773:4;27811:2;27800:9;27796:18;27788:26;;27860:9;27854:4;27850:20;27846:1;27835:9;27831:17;27824:47;27888:131;28014:4;27888:131;:::i;:::-;27880:139;;27607:419;;;:::o;28032:::-;28198:4;28236:2;28225:9;28221:18;28213:26;;28285:9;28279:4;28275:20;28271:1;28260:9;28256:17;28249:47;28313:131;28439:4;28313:131;:::i;:::-;28305:139;;28032:419;;;:::o;28457:::-;28623:4;28661:2;28650:9;28646:18;28638:26;;28710:9;28704:4;28700:20;28696:1;28685:9;28681:17;28674:47;28738:131;28864:4;28738:131;:::i;:::-;28730:139;;28457:419;;;:::o;28882:::-;29048:4;29086:2;29075:9;29071:18;29063:26;;29135:9;29129:4;29125:20;29121:1;29110:9;29106:17;29099:47;29163:131;29289:4;29163:131;:::i;:::-;29155:139;;28882:419;;;:::o;29307:::-;29473:4;29511:2;29500:9;29496:18;29488:26;;29560:9;29554:4;29550:20;29546:1;29535:9;29531:17;29524:47;29588:131;29714:4;29588:131;:::i;:::-;29580:139;;29307:419;;;:::o;29732:::-;29898:4;29936:2;29925:9;29921:18;29913:26;;29985:9;29979:4;29975:20;29971:1;29960:9;29956:17;29949:47;30013:131;30139:4;30013:131;:::i;:::-;30005:139;;29732:419;;;:::o;30157:::-;30323:4;30361:2;30350:9;30346:18;30338:26;;30410:9;30404:4;30400:20;30396:1;30385:9;30381:17;30374:47;30438:131;30564:4;30438:131;:::i;:::-;30430:139;;30157:419;;;:::o;30582:::-;30748:4;30786:2;30775:9;30771:18;30763:26;;30835:9;30829:4;30825:20;30821:1;30810:9;30806:17;30799:47;30863:131;30989:4;30863:131;:::i;:::-;30855:139;;30582:419;;;:::o;31007:::-;31173:4;31211:2;31200:9;31196:18;31188:26;;31260:9;31254:4;31250:20;31246:1;31235:9;31231:17;31224:47;31288:131;31414:4;31288:131;:::i;:::-;31280:139;;31007:419;;;:::o;31432:::-;31598:4;31636:2;31625:9;31621:18;31613:26;;31685:9;31679:4;31675:20;31671:1;31660:9;31656:17;31649:47;31713:131;31839:4;31713:131;:::i;:::-;31705:139;;31432:419;;;:::o;31857:::-;32023:4;32061:2;32050:9;32046:18;32038:26;;32110:9;32104:4;32100:20;32096:1;32085:9;32081:17;32074:47;32138:131;32264:4;32138:131;:::i;:::-;32130:139;;31857:419;;;:::o;32282:::-;32448:4;32486:2;32475:9;32471:18;32463:26;;32535:9;32529:4;32525:20;32521:1;32510:9;32506:17;32499:47;32563:131;32689:4;32563:131;:::i;:::-;32555:139;;32282:419;;;:::o;32707:::-;32873:4;32911:2;32900:9;32896:18;32888:26;;32960:9;32954:4;32950:20;32946:1;32935:9;32931:17;32924:47;32988:131;33114:4;32988:131;:::i;:::-;32980:139;;32707:419;;;:::o;33132:::-;33298:4;33336:2;33325:9;33321:18;33313:26;;33385:9;33379:4;33375:20;33371:1;33360:9;33356:17;33349:47;33413:131;33539:4;33413:131;:::i;:::-;33405:139;;33132:419;;;:::o;33557:::-;33723:4;33761:2;33750:9;33746:18;33738:26;;33810:9;33804:4;33800:20;33796:1;33785:9;33781:17;33774:47;33838:131;33964:4;33838:131;:::i;:::-;33830:139;;33557:419;;;:::o;33982:::-;34148:4;34186:2;34175:9;34171:18;34163:26;;34235:9;34229:4;34225:20;34221:1;34210:9;34206:17;34199:47;34263:131;34389:4;34263:131;:::i;:::-;34255:139;;33982:419;;;:::o;34407:::-;34573:4;34611:2;34600:9;34596:18;34588:26;;34660:9;34654:4;34650:20;34646:1;34635:9;34631:17;34624:47;34688:131;34814:4;34688:131;:::i;:::-;34680:139;;34407:419;;;:::o;34832:::-;34998:4;35036:2;35025:9;35021:18;35013:26;;35085:9;35079:4;35075:20;35071:1;35060:9;35056:17;35049:47;35113:131;35239:4;35113:131;:::i;:::-;35105:139;;34832:419;;;:::o;35257:::-;35423:4;35461:2;35450:9;35446:18;35438:26;;35510:9;35504:4;35500:20;35496:1;35485:9;35481:17;35474:47;35538:131;35664:4;35538:131;:::i;:::-;35530:139;;35257:419;;;:::o;35682:::-;35848:4;35886:2;35875:9;35871:18;35863:26;;35935:9;35929:4;35925:20;35921:1;35910:9;35906:17;35899:47;35963:131;36089:4;35963:131;:::i;:::-;35955:139;;35682:419;;;:::o;36107:::-;36273:4;36311:2;36300:9;36296:18;36288:26;;36360:9;36354:4;36350:20;36346:1;36335:9;36331:17;36324:47;36388:131;36514:4;36388:131;:::i;:::-;36380:139;;36107:419;;;:::o;36532:::-;36698:4;36736:2;36725:9;36721:18;36713:26;;36785:9;36779:4;36775:20;36771:1;36760:9;36756:17;36749:47;36813:131;36939:4;36813:131;:::i;:::-;36805:139;;36532:419;;;:::o;36957:346::-;37112:4;37150:2;37139:9;37135:18;37127:26;;37163:133;37293:1;37282:9;37278:17;37269:6;37163:133;:::i;:::-;36957:346;;;;:::o;37309:222::-;37402:4;37440:2;37429:9;37425:18;37417:26;;37453:71;37521:1;37510:9;37506:17;37497:6;37453:71;:::i;:::-;37309:222;;;;:::o;37537:129::-;37571:6;37598:20;;:::i;:::-;37588:30;;37627:33;37655:4;37647:6;37627:33;:::i;:::-;37537:129;;;:::o;37672:75::-;37705:6;37738:2;37732:9;37722:19;;37672:75;:::o;37753:307::-;37814:4;37904:18;37896:6;37893:30;37890:56;;;37926:18;;:::i;:::-;37890:56;37964:29;37986:6;37964:29;:::i;:::-;37956:37;;38048:4;38042;38038:15;38030:23;;37753:307;;;:::o;38066:98::-;38117:6;38151:5;38145:12;38135:22;;38066:98;;;:::o;38170:99::-;38222:6;38256:5;38250:12;38240:22;;38170:99;;;:::o;38275:168::-;38358:11;38392:6;38387:3;38380:19;38432:4;38427:3;38423:14;38408:29;;38275:168;;;;:::o;38449:147::-;38550:11;38587:3;38572:18;;38449:147;;;;:::o;38602:169::-;38686:11;38720:6;38715:3;38708:19;38760:4;38755:3;38751:14;38736:29;;38602:169;;;;:::o;38777:148::-;38879:11;38916:3;38901:18;;38777:148;;;;:::o;38931:273::-;38971:3;38990:20;39008:1;38990:20;:::i;:::-;38985:25;;39024:20;39042:1;39024:20;:::i;:::-;39019:25;;39146:1;39110:34;39106:42;39103:1;39100:49;39097:75;;;39152:18;;:::i;:::-;39097:75;39196:1;39193;39189:9;39182:16;;38931:273;;;;:::o;39210:305::-;39250:3;39269:20;39287:1;39269:20;:::i;:::-;39264:25;;39303:20;39321:1;39303:20;:::i;:::-;39298:25;;39457:1;39389:66;39385:74;39382:1;39379:81;39376:107;;;39463:18;;:::i;:::-;39376:107;39507:1;39504;39500:9;39493:16;;39210:305;;;;:::o;39521:185::-;39561:1;39578:20;39596:1;39578:20;:::i;:::-;39573:25;;39612:20;39630:1;39612:20;:::i;:::-;39607:25;;39651:1;39641:35;;39656:18;;:::i;:::-;39641:35;39698:1;39695;39691:9;39686:14;;39521:185;;;;:::o;39712:348::-;39752:7;39775:20;39793:1;39775:20;:::i;:::-;39770:25;;39809:20;39827:1;39809:20;:::i;:::-;39804:25;;39997:1;39929:66;39925:74;39922:1;39919:81;39914:1;39907:9;39900:17;39896:105;39893:131;;;40004:18;;:::i;:::-;39893:131;40052:1;40049;40045:9;40034:20;;39712:348;;;;:::o;40066:191::-;40106:4;40126:20;40144:1;40126:20;:::i;:::-;40121:25;;40160:20;40178:1;40160:20;:::i;:::-;40155:25;;40199:1;40196;40193:8;40190:34;;;40204:18;;:::i;:::-;40190:34;40249:1;40246;40242:9;40234:17;;40066:191;;;;:::o;40263:::-;40303:4;40323:20;40341:1;40323:20;:::i;:::-;40318:25;;40357:20;40375:1;40357:20;:::i;:::-;40352:25;;40396:1;40393;40390:8;40387:34;;;40401:18;;:::i;:::-;40387:34;40446:1;40443;40439:9;40431:17;;40263:191;;;;:::o;40460:96::-;40497:7;40526:24;40544:5;40526:24;:::i;:::-;40515:35;;40460:96;;;:::o;40562:90::-;40596:7;40639:5;40632:13;40625:21;40614:32;;40562:90;;;:::o;40658:149::-;40694:7;40734:66;40727:5;40723:78;40712:89;;40658:149;;;:::o;40813:118::-;40850:7;40890:34;40883:5;40879:46;40868:57;;40813:118;;;:::o;40937:126::-;40974:7;41014:42;41007:5;41003:54;40992:65;;40937:126;;;:::o;41069:77::-;41106:7;41135:5;41124:16;;41069:77;;;:::o;41152:101::-;41188:7;41228:18;41221:5;41217:30;41206:41;;41152:101;;;:::o;41259:154::-;41343:6;41338:3;41333;41320:30;41405:1;41396:6;41391:3;41387:16;41380:27;41259:154;;;:::o;41419:307::-;41487:1;41497:113;41511:6;41508:1;41505:13;41497:113;;;41596:1;41591:3;41587:11;41581:18;41577:1;41572:3;41568:11;41561:39;41533:2;41530:1;41526:10;41521:15;;41497:113;;;41628:6;41625:1;41622:13;41619:101;;;41708:1;41699:6;41694:3;41690:16;41683:27;41619:101;41468:258;41419:307;;;:::o;41732:171::-;41771:3;41794:24;41812:5;41794:24;:::i;:::-;41785:33;;41840:4;41833:5;41830:15;41827:41;;;41848:18;;:::i;:::-;41827:41;41895:1;41888:5;41884:13;41877:20;;41732:171;;;:::o;41909:320::-;41953:6;41990:1;41984:4;41980:12;41970:22;;42037:1;42031:4;42027:12;42058:18;42048:81;;42114:4;42106:6;42102:17;42092:27;;42048:81;42176:2;42168:6;42165:14;42145:18;42142:38;42139:84;;;42195:18;;:::i;:::-;42139:84;41960:269;41909:320;;;:::o;42235:281::-;42318:27;42340:4;42318:27;:::i;:::-;42310:6;42306:40;42448:6;42436:10;42433:22;42412:18;42400:10;42397:34;42394:62;42391:88;;;42459:18;;:::i;:::-;42391:88;42499:10;42495:2;42488:22;42278:238;42235:281;;:::o;42522:233::-;42561:3;42584:24;42602:5;42584:24;:::i;:::-;42575:33;;42630:66;42623:5;42620:77;42617:103;;;42700:18;;:::i;:::-;42617:103;42747:1;42740:5;42736:13;42729:20;;42522:233;;;:::o;42761:176::-;42793:1;42810:20;42828:1;42810:20;:::i;:::-;42805:25;;42844:20;42862:1;42844:20;:::i;:::-;42839:25;;42883:1;42873:35;;42888:18;;:::i;:::-;42873:35;42929:1;42926;42922:9;42917:14;;42761:176;;;;:::o;42943:180::-;42991:77;42988:1;42981:88;43088:4;43085:1;43078:15;43112:4;43109:1;43102:15;43129:180;43177:77;43174:1;43167:88;43274:4;43271:1;43264:15;43298:4;43295:1;43288:15;43315:180;43363:77;43360:1;43353:88;43460:4;43457:1;43450:15;43484:4;43481:1;43474:15;43501:180;43549:77;43546:1;43539:88;43646:4;43643:1;43636:15;43670:4;43667:1;43660:15;43687:180;43735:77;43732:1;43725:88;43832:4;43829:1;43822:15;43856:4;43853:1;43846:15;43873:117;43982:1;43979;43972:12;43996:117;44105:1;44102;44095:12;44119:117;44228:1;44225;44218:12;44242:117;44351:1;44348;44341:12;44365:117;44474:1;44471;44464:12;44488:117;44597:1;44594;44587:12;44611:102;44652:6;44703:2;44699:7;44694:2;44687:5;44683:14;44679:28;44669:38;;44611:102;;;:::o;44719:221::-;44859:34;44855:1;44847:6;44843:14;44836:58;44928:4;44923:2;44915:6;44911:15;44904:29;44719:221;:::o;44946:225::-;45086:34;45082:1;45074:6;45070:14;45063:58;45155:8;45150:2;45142:6;45138:15;45131:33;44946:225;:::o;45177:229::-;45317:34;45313:1;45305:6;45301:14;45294:58;45386:12;45381:2;45373:6;45369:15;45362:37;45177:229;:::o;45412:222::-;45552:34;45548:1;45540:6;45536:14;45529:58;45621:5;45616:2;45608:6;45604:15;45597:30;45412:222;:::o;45640:224::-;45780:34;45776:1;45768:6;45764:14;45757:58;45849:7;45844:2;45836:6;45832:15;45825:32;45640:224;:::o;45870:236::-;46010:34;46006:1;45998:6;45994:14;45987:58;46079:19;46074:2;46066:6;46062:15;46055:44;45870:236;:::o;46112:182::-;46252:34;46248:1;46240:6;46236:14;46229:58;46112:182;:::o;46300:244::-;46440:34;46436:1;46428:6;46424:14;46417:58;46509:27;46504:2;46496:6;46492:15;46485:52;46300:244;:::o;46550:174::-;46690:26;46686:1;46678:6;46674:14;46667:50;46550:174;:::o;46730:230::-;46870:34;46866:1;46858:6;46854:14;46847:58;46939:13;46934:2;46926:6;46922:15;46915:38;46730:230;:::o;46966:225::-;47106:34;47102:1;47094:6;47090:14;47083:58;47175:8;47170:2;47162:6;47158:15;47151:33;46966:225;:::o;47197:182::-;47337:34;47333:1;47325:6;47321:14;47314:58;47197:182;:::o;47385:234::-;47525:34;47521:1;47513:6;47509:14;47502:58;47594:17;47589:2;47581:6;47577:15;47570:42;47385:234;:::o;47625:176::-;47765:28;47761:1;47753:6;47749:14;47742:52;47625:176;:::o;47807:237::-;47947:34;47943:1;47935:6;47931:14;47924:58;48016:20;48011:2;48003:6;47999:15;47992:45;47807:237;:::o;48050:171::-;48190:23;48186:1;48178:6;48174:14;48167:47;48050:171;:::o;48227:221::-;48367:34;48363:1;48355:6;48351:14;48344:58;48436:4;48431:2;48423:6;48419:15;48412:29;48227:221;:::o;48454:114::-;;:::o;48574:166::-;48714:18;48710:1;48702:6;48698:14;48691:42;48574:166;:::o;48746:158::-;48886:10;48882:1;48874:6;48870:14;48863:34;48746:158;:::o;48910:238::-;49050:34;49046:1;49038:6;49034:14;49027:58;49119:21;49114:2;49106:6;49102:15;49095:46;48910:238;:::o;49154:179::-;49294:31;49290:1;49282:6;49278:14;49271:55;49154:179;:::o;49339:180::-;49479:32;49475:1;49467:6;49463:14;49456:56;49339:180;:::o;49525:220::-;49665:34;49661:1;49653:6;49649:14;49642:58;49734:3;49729:2;49721:6;49717:15;49710:28;49525:220;:::o;49751:164::-;49891:16;49887:1;49879:6;49875:14;49868:40;49751:164;:::o;49921:233::-;50061:34;50057:1;50049:6;50045:14;50038:58;50130:16;50125:2;50117:6;50113:15;50106:41;49921:233;:::o;50160:225::-;50300:34;50296:1;50288:6;50284:14;50277:58;50369:8;50364:2;50356:6;50352:15;50345:33;50160:225;:::o;50391:169::-;50531:21;50527:1;50519:6;50515:14;50508:45;50391:169;:::o;50566:181::-;50706:33;50702:1;50694:6;50690:14;50683:57;50566:181;:::o;50753:234::-;50893:34;50889:1;50881:6;50877:14;50870:58;50962:17;50957:2;50949:6;50945:15;50938:42;50753:234;:::o;50993:232::-;51133:34;51129:1;51121:6;51117:14;51110:58;51202:15;51197:2;51189:6;51185:15;51178:40;50993:232;:::o;51231:221::-;51371:34;51367:1;51359:6;51355:14;51348:58;51440:4;51435:2;51427:6;51423:15;51416:29;51231:221;:::o;51458:122::-;51531:24;51549:5;51531:24;:::i;:::-;51524:5;51521:35;51511:63;;51570:1;51567;51560:12;51511:63;51458:122;:::o;51586:116::-;51656:21;51671:5;51656:21;:::i;:::-;51649:5;51646:32;51636:60;;51692:1;51689;51682:12;51636:60;51586:116;:::o;51708:120::-;51780:23;51797:5;51780:23;:::i;:::-;51773:5;51770:34;51760:62;;51818:1;51815;51808:12;51760:62;51708:120;:::o;51834:122::-;51907:24;51925:5;51907:24;:::i;:::-;51900:5;51897:35;51887:63;;51946:1;51943;51936:12;51887:63;51834:122;:::o

Swarm Source

ipfs://22625d962ceda781e376171175469f304bed1e4453cfb49d7af79eca00dbaca7
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.