ETH Price: $3,960.96 (+2.16%)

Token

Whitelistmfer (wlmfer)
 

Overview

Max Total Supply

407 wlmfer

Holders

57

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 wlmfer
0x97b55c22f399f7f48ca3b672193178ec10433ab4
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:
Whitelistmfers

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-25
*/

/**
 *Submitted for verification at Etherscan.io on 2022-02-21
*/

// SPDX-License-Identifier: MIT

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


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


pragma solidity ^0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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);
            }
        }
    }
}








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




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


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


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 tokenId);

    /**
     * @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);
}

pragma solidity ^0.8.0;

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

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


pragma solidity ^0.8.0;

/**
 * @dev 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);
    }
}


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  collectionSizeFree;
  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_,
    uint256 collectionSizeFree_
  ) {
    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_;
    collectionSizeFree = collectionSizeFree_;
  }

  /**
   * @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(), ".json"))
        : "";
  }

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

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

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

    _approve(to, tokenId, owner);
  }

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

    return _tokenApprovals[tokenId];
  }

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

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

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

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

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

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

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

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

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

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

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

    uint256 updatedIndex = startTokenId;

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

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

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

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

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

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

    _beforeTokenTransfers(from, to, tokenId, 1);

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

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

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

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

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

  uint256 public nextOwnerToExplicitlySet = 0;

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

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

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

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


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


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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


pragma solidity ^0.8.0;


contract Whitelistmfers is Ownable, ERC721A, ReentrancyGuard {
  uint256 public maxPerAddressDuringMint;
  uint256 public amountForDevs;
  uint256 public price = 0.0075 ether;
  uint256 public freemintAmount = 10;
  uint256 public mintAmount = 2;

  struct SaleConfig {
    uint64 publicPrice;
  }

  SaleConfig public saleConfig;

  mapping(address => uint256) public allowlist;

  constructor(
    uint256 maxBatchSize_,
    uint256 collectionSize_,
    uint256 collectionSizeFree_,
    uint256 amountForDevs_
  ) ERC721A("Whitelistmfer", "wlmfer", maxBatchSize_, collectionSize_, collectionSizeFree_) {
    maxPerAddressDuringMint = 15;
    amountForDevs = amountForDevs_;
    
  }

  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }

  function Mint(uint256 quantity)
    external
    payable
    callerIsUser
  {
      require(quantity <= mintAmount, "Too many minted at once");
      require(msg.value >= price, "Need to send more ETH.");
    require(totalSupply() + quantity <= collectionSize, "reached max supply");
    _safeMint(msg.sender, quantity);
    
  }


  function MintFree(uint256 quantity)
    external
    payable
    callerIsUser
  {
    require(quantity <= freemintAmount, "Too many minted at once");
    require(totalSupply() + quantity <= collectionSizeFree, "reached max supply");
    _safeMint(msg.sender, quantity);
  }



  function refundIfOver(uint256 price) private {
    require(msg.value >= price, "Need to send more ETH.");
    if (msg.value > price) {
      payable(msg.sender).transfer(msg.value - price);
    }
  }





  function seedAllowlist(address[] memory addresses, uint256[] memory numSlots)
    external
    onlyOwner
  {
    require(
      addresses.length == numSlots.length,
      "addresses does not match numSlots length"
    );
    for (uint256 i = 0; i < addresses.length; i++) {
      allowlist[addresses[i]] = numSlots[i];
    }
  }

  // For marketing etc.
  function Mints(uint256 quantity) external onlyOwner {
    
     require(totalSupply() + quantity <= amountForDevs, "reached max supply");
    _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);
  }

function setprice(uint256 _newprice) public onlyOwner {
	    price = _newprice;
	}

  function setfreemints(uint256 _newfreemints) public onlyOwner {
	    collectionSizeFree = _newfreemints;
	}

    function setcollectionSize(uint256 _newcollectionSize) public onlyOwner {
	    collectionSize = _newcollectionSize;
	}

    function setamountForDevs(uint256 _newamountForDevs) public onlyOwner {
	    amountForDevs = _newamountForDevs;
	}

    function setfreemintAmount(uint256 _newfreemintAmount) public onlyOwner {
	    freemintAmount = _newfreemintAmount;
	}

    function setmintAmount(uint256 _newmintAmount) public onlyOwner {
	    mintAmount = _newmintAmount;
	}


}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSizeFree_","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":"uint256","name":"quantity","type":"uint256"}],"name":"Mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"MintFree","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"Mints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountForDevs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freemintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":[],"name":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintAmount","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":"price","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":"saleConfig","outputs":[{"internalType":"uint64","name":"publicPrice","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"numSlots","type":"uint256[]"}],"name":"seedAllowlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newamountForDevs","type":"uint256"}],"name":"setamountForDevs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newcollectionSize","type":"uint256"}],"name":"setcollectionSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newfreemintAmount","type":"uint256"}],"name":"setfreemintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newfreemints","type":"uint256"}],"name":"setfreemints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmintAmount","type":"uint256"}],"name":"setmintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newprice","type":"uint256"}],"name":"setprice","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"}]

608060405260006001556000600b55661aa535d3d0c000600f55600a60105560026011553480156200003057600080fd5b5060405162005af938038062005af9833981810160405281019062000056919062000371565b6040518060400160405280600d81526020017f57686974656c6973746d666572000000000000000000000000000000000000008152506040518060400160405280600681526020017f776c6d6665720000000000000000000000000000000000000000000000000000815250858585620000e5620000d9620001de60201b60201c565b620001e660201b60201c565b600082116200012b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001229062000453565b60405180910390fd5b6000831162000171576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001689062000431565b60405180910390fd5b846005908051906020019062000189929190620002aa565b508360069080519060200190620001a2929190620002aa565b5082600481905550816002819055508060038190555050505050506001600c81905550600f600d8190555080600e8190555050505050620005b2565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002b89062000490565b90600052602060002090601f016020900481019282620002dc576000855562000328565b82601f10620002f757805160ff191683800117855562000328565b8280016001018555821562000328579182015b82811115620003275782518255916020019190600101906200030a565b5b5090506200033791906200033b565b5090565b5b80821115620003565760008160009055506001016200033c565b5090565b6000815190506200036b8162000598565b92915050565b600080600080608085870312156200038e576200038d620004f5565b5b60006200039e878288016200035a565b9450506020620003b1878288016200035a565b9350506040620003c4878288016200035a565b9250506060620003d7878288016200035a565b91505092959194509250565b6000620003f260278362000475565b9150620003ff82620004fa565b604082019050919050565b600062000419602e8362000475565b9150620004268262000549565b604082019050919050565b600060208201905081810360008301526200044c81620003e3565b9050919050565b600060208201905081810360008301526200046e816200040a565b9050919050565b600082825260208201905092915050565b6000819050919050565b60006002820490506001821680620004a957607f821691505b60208210811415620004c057620004bf620004c6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b620005a38162000486565b8114620005af57600080fd5b50565b61553780620005c26000396000f3fe6080604052600436106102515760003560e01c80638da5cb5b11610139578063b05863d5116100b6578063d7224ba01161007a578063d7224ba0146108a2578063dc33e681146108cd578063e985e9c51461090a578063eb7f13ad14610947578063f2fde38b14610970578063fbe1aa511461099957610251565b8063b05863d5146107c1578063b88d4fde146107ea578063c87b56dd14610813578063d0d9990714610850578063d49f0fa51461087957610251565b8063a035b1fe116100fd578063a035b1fe146106fd578063a22cb46514610728578063a7cd52cb14610751578063ac4460021461078e578063ad6ac81b146107a557610251565b80638da5cb5b1461061657806390aa0b0f146106415780639231ab2a1461066c57806395d89b41146106a95780639f8afbcc146106d457610251565b80632d20fb60116101d25780635a2bcc18116101965780635a2bcc18146105065780636352211e1461053157806370a082311461056e578063715018a6146105ab57806380e28ea5146105c25780638bc35c2f146105eb57610251565b80632d20fb60146104115780632f745c591461043a57806342842e0e146104775780634f6ccce7146104a057806355f804b3146104dd57610251565b8063130db2bb11610219578063130db2bb1461034057806318160ddd1461036b57806321b2a6cb1461039657806323b872dd146103bf57806327e410f1146103e857610251565b806301ffc9a71461025657806306fdde031461029357806307883703146102be578063081812fc146102da578063095ea7b314610317575b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190613c22565b6109c4565b60405161028a919061432d565b60405180910390f35b34801561029f57600080fd5b506102a8610b0e565b6040516102b59190614348565b60405180910390f35b6102d860048036038101906102d39190613cc9565b610ba0565b005b3480156102e657600080fd5b5061030160048036038101906102fc9190613cc9565b610cfc565b60405161030e91906142c6565b60405180910390f35b34801561032357600080fd5b5061033e60048036038101906103399190613b6a565b610d81565b005b34801561034c57600080fd5b50610355610e9a565b6040516103629190614745565b60405180910390f35b34801561037757600080fd5b50610380610ea0565b60405161038d9190614745565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b89190613cc9565b610eaa565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190613a54565b610f30565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190613cc9565b610f40565b005b34801561041d57600080fd5b5061043860048036038101906104339190613cc9565b610fc6565b005b34801561044657600080fd5b50610461600480360381019061045c9190613b6a565b6110a4565b60405161046e9190614745565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190613a54565b6112a2565b005b3480156104ac57600080fd5b506104c760048036038101906104c29190613cc9565b6112c2565b6040516104d49190614745565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190613c7c565b611315565b005b34801561051257600080fd5b5061051b6113a7565b6040516105289190614745565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190613cc9565b6113ad565b60405161056591906142c6565b60405180910390f35b34801561057a57600080fd5b50610595600480360381019061059091906139e7565b6113c3565b6040516105a29190614745565b60405180910390f35b3480156105b757600080fd5b506105c06114ac565b005b3480156105ce57600080fd5b506105e960048036038101906105e49190613cc9565b611534565b005b3480156105f757600080fd5b506106006115ba565b60405161060d9190614745565b60405180910390f35b34801561062257600080fd5b5061062b6115c0565b60405161063891906142c6565b60405180910390f35b34801561064d57600080fd5b506106566115e9565b6040516106639190614760565b60405180910390f35b34801561067857600080fd5b50610693600480360381019061068e9190613cc9565b611609565b6040516106a0919061472a565b60405180910390f35b3480156106b557600080fd5b506106be611621565b6040516106cb9190614348565b60405180910390f35b3480156106e057600080fd5b506106fb60048036038101906106f69190613cc9565b6116b3565b005b34801561070957600080fd5b50610712611739565b60405161071f9190614745565b60405180910390f35b34801561073457600080fd5b5061074f600480360381019061074a9190613b2a565b61173f565b005b34801561075d57600080fd5b50610778600480360381019061077391906139e7565b6118c0565b6040516107859190614745565b60405180910390f35b34801561079a57600080fd5b506107a36118d8565b005b6107bf60048036038101906107ba9190613cc9565b611a59565b005b3480156107cd57600080fd5b506107e860048036038101906107e39190613baa565b611b70565b005b3480156107f657600080fd5b50610811600480360381019061080c9190613aa7565b611ccc565b005b34801561081f57600080fd5b5061083a60048036038101906108359190613cc9565b611d28565b6040516108479190614348565b60405180910390f35b34801561085c57600080fd5b5061087760048036038101906108729190613cc9565b611dcf565b005b34801561088557600080fd5b506108a0600480360381019061089b9190613cc9565b611e55565b005b3480156108ae57600080fd5b506108b7611edb565b6040516108c49190614745565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef91906139e7565b611ee1565b6040516109019190614745565b60405180910390f35b34801561091657600080fd5b50610931600480360381019061092c9190613a14565b611ef3565b60405161093e919061432d565b60405180910390f35b34801561095357600080fd5b5061096e60048036038101906109699190613cc9565b611f87565b005b34801561097c57600080fd5b50610997600480360381019061099291906139e7565b612067565b005b3480156109a557600080fd5b506109ae61215f565b6040516109bb9190614745565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a8f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610af757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b075750610b0682612165565b5b9050919050565b606060058054610b1d90614abc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4990614abc565b8015610b965780601f10610b6b57610100808354040283529160200191610b96565b820191906000526020600020905b815481529060010190602001808311610b7957829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c059061444a565b60405180910390fd5b601154811115610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a9061438a565b60405180910390fd5b600f54341015610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f906145ea565b60405180910390fd5b60025481610ca4610ea0565b610cae91906148bd565b1115610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce6906144ca565b60405180910390fd5b610cf933826121cf565b50565b6000610d07826121ed565b610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d906146ca565b60405180910390fd5b6009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d8c826113ad565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df49061458a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e1c6121fb565b73ffffffffffffffffffffffffffffffffffffffff161480610e4b5750610e4a81610e456121fb565b611ef3565b5b610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e819061446a565b60405180910390fd5b610e95838383612203565b505050565b60105481565b6000600154905090565b610eb26121fb565b73ffffffffffffffffffffffffffffffffffffffff16610ed06115c0565b73ffffffffffffffffffffffffffffffffffffffff1614610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d9061450a565b60405180910390fd5b80600e8190555050565b610f3b8383836122b5565b505050565b610f486121fb565b73ffffffffffffffffffffffffffffffffffffffff16610f666115c0565b73ffffffffffffffffffffffffffffffffffffffff1614610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb39061450a565b60405180910390fd5b8060108190555050565b610fce6121fb565b73ffffffffffffffffffffffffffffffffffffffff16610fec6115c0565b73ffffffffffffffffffffffffffffffffffffffff1614611042576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110399061450a565b60405180910390fd5b6002600c541415611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f9061468a565b60405180910390fd5b6002600c819055506110998161286e565b6001600c8190555050565b60006110af836113c3565b82106110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e79061436a565b60405180910390fd5b60006110fa610ea0565b905060008060005b83811015611260576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146111f457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561124c578684141561123d57819550505050505061129c565b838061124890614b1f565b9450505b50808061125890614b1f565b915050611102565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112939061464a565b60405180910390fd5b92915050565b6112bd83838360405180602001604052806000815250611ccc565b505050565b60006112cc610ea0565b821061130d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611304906143ea565b60405180910390fd5b819050919050565b61131d6121fb565b73ffffffffffffffffffffffffffffffffffffffff1661133b6115c0565b73ffffffffffffffffffffffffffffffffffffffff1614611391576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113889061450a565b60405180910390fd5b8181601491906113a292919061369f565b505050565b60115481565b60006113b882612ac0565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b906144aa565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6114b46121fb565b73ffffffffffffffffffffffffffffffffffffffff166114d26115c0565b73ffffffffffffffffffffffffffffffffffffffff1614611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f9061450a565b60405180910390fd5b6115326000612c87565b565b61153c6121fb565b73ffffffffffffffffffffffffffffffffffffffff1661155a6115c0565b73ffffffffffffffffffffffffffffffffffffffff16146115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a79061450a565b60405180910390fd5b8060038190555050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60128060000160009054906101000a900467ffffffffffffffff16905081565b611611613725565b61161a82612ac0565b9050919050565b60606006805461163090614abc565b80601f016020809104026020016040519081016040528092919081815260200182805461165c90614abc565b80156116a95780601f1061167e576101008083540402835291602001916116a9565b820191906000526020600020905b81548152906001019060200180831161168c57829003601f168201915b5050505050905090565b6116bb6121fb565b73ffffffffffffffffffffffffffffffffffffffff166116d96115c0565b73ffffffffffffffffffffffffffffffffffffffff161461172f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117269061450a565b60405180910390fd5b8060028190555050565b600f5481565b6117476121fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac9061454a565b60405180910390fd5b80600a60006117c26121fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661186f6121fb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118b4919061432d565b60405180910390a35050565b60136020528060005260406000206000915090505481565b6118e06121fb565b73ffffffffffffffffffffffffffffffffffffffff166118fe6115c0565b73ffffffffffffffffffffffffffffffffffffffff1614611954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194b9061450a565b60405180910390fd5b6002600c54141561199a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119919061468a565b60405180910390fd5b6002600c8190555060003373ffffffffffffffffffffffffffffffffffffffff16476040516119c8906142b1565b60006040518083038185875af1925050503d8060008114611a05576040519150601f19603f3d011682016040523d82523d6000602084013e611a0a565b606091505b5050905080611a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a45906145aa565b60405180910390fd5b506001600c81905550565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe9061444a565b60405180910390fd5b601054811115611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b039061438a565b60405180910390fd5b60035481611b18610ea0565b611b2291906148bd565b1115611b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5a906144ca565b60405180910390fd5b611b6d33826121cf565b50565b611b786121fb565b73ffffffffffffffffffffffffffffffffffffffff16611b966115c0565b73ffffffffffffffffffffffffffffffffffffffff1614611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be39061450a565b60405180910390fd5b8051825114611c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c279061470a565b60405180910390fd5b60005b8251811015611cc757818181518110611c4f57611c4e614c26565b5b602002602001015160136000858481518110611c6e57611c6d614c26565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611cbf90614b1f565b915050611c33565b505050565b611cd78484846122b5565b611ce384848484612d4b565b611d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d19906145ca565b60405180910390fd5b50505050565b6060611d33826121ed565b611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d699061452a565b60405180910390fd5b6000611d7c612ee2565b90506000815111611d9c5760405180602001604052806000815250611dc7565b80611da684612f74565b604051602001611db7929190614282565b6040516020818303038152906040525b915050919050565b611dd76121fb565b73ffffffffffffffffffffffffffffffffffffffff16611df56115c0565b73ffffffffffffffffffffffffffffffffffffffff1614611e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e429061450a565b60405180910390fd5b8060118190555050565b611e5d6121fb565b73ffffffffffffffffffffffffffffffffffffffff16611e7b6115c0565b73ffffffffffffffffffffffffffffffffffffffff1614611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec89061450a565b60405180910390fd5b80600f8190555050565b600b5481565b6000611eec826130d5565b9050919050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f8f6121fb565b73ffffffffffffffffffffffffffffffffffffffff16611fad6115c0565b73ffffffffffffffffffffffffffffffffffffffff1614612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa9061450a565b60405180910390fd5b600e548161200f610ea0565b61201991906148bd565b111561205a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612051906144ca565b60405180910390fd5b61206433826121cf565b50565b61206f6121fb565b73ffffffffffffffffffffffffffffffffffffffff1661208d6115c0565b73ffffffffffffffffffffffffffffffffffffffff16146120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da9061450a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a906143aa565b60405180910390fd5b61215c81612c87565b50565b600e5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121e98282604051806020016040528060008152506131be565b5050565b600060015482109050919050565b600033905090565b826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006122c082612ac0565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166122e76121fb565b73ffffffffffffffffffffffffffffffffffffffff161480612343575061230c6121fb565b73ffffffffffffffffffffffffffffffffffffffff1661232b84610cfc565b73ffffffffffffffffffffffffffffffffffffffff16145b8061235f575061235e82600001516123596121fb565b611ef3565b5b9050806123a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123989061456a565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240a906144ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247a9061440a565b60405180910390fd5b6124908585856001613680565b6124a06000848460000151612203565b6001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661250e9190614944565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166125b29190614877565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846126b891906148bd565b9050600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127fe5761272e816121ed565b156127fd576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506007600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128668686866001613686565b505050505050565b6000600b549050600082116128b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128af9061448a565b60405180910390fd5b6000600183836128c891906148bd565b6128d29190614978565b905060016002546128e39190614978565b8111156128fc5760016002546128f99190614978565b90505b612905816121ed565b612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b9061466a565b60405180910390fd5b60008290505b818111612aa757600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612a945760006129c782612ac0565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506007600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612a9f90614b1f565b91505061294a565b50600181612ab591906148bd565b600b81905550505050565b612ac8613725565b612ad1826121ed565b612b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b07906143ca565b60405180910390fd5b60006004548310612b3857600160045484612b2b9190614978565b612b3591906148bd565b90505b60008390505b818110612c46576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c3257809350505050612c82565b508080612c3e90614a92565b915050612b3e565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c79906146aa565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612d6c8473ffffffffffffffffffffffffffffffffffffffff1661368c565b15612ed5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d956121fb565b8786866040518563ffffffff1660e01b8152600401612db794939291906142e1565b602060405180830381600087803b158015612dd157600080fd5b505af1925050508015612e0257506040513d601f19601f82011682018060405250810190612dff9190613c4f565b60015b612e85573d8060008114612e32576040519150601f19603f3d011682016040523d82523d6000602084013e612e37565b606091505b50600081511415612e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e74906145ca565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612eda565b600190505b949350505050565b606060148054612ef190614abc565b80601f0160208091040260200160405190810160405280929190818152602001828054612f1d90614abc565b8015612f6a5780601f10612f3f57610100808354040283529160200191612f6a565b820191906000526020600020905b815481529060010190602001808311612f4d57829003601f168201915b5050505050905090565b60606000821415612fbc576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130d0565b600082905060005b60008214612fee578080612fd790614b1f565b915050600a82612fe79190614913565b9150612fc4565b60008167ffffffffffffffff81111561300a57613009614c55565b5b6040519080825280601f01601f19166020018201604052801561303c5781602001600182028036833780820191505090505b5090505b600085146130c9576001826130559190614978565b9150600a856130649190614b68565b603061307091906148bd565b60f81b81838151811061308657613085614c26565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130c29190614913565b9450613040565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313d9061442a565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322c9061462a565b60405180910390fd5b61323e816121ed565b1561327e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132759061460a565b60405180910390fd5b6004548311156132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba906146ea565b60405180910390fd5b6132d06000858386613680565b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516133cd9190614877565b6fffffffffffffffffffffffffffffffff1681526020018583602001516133f49190614877565b6fffffffffffffffffffffffffffffffff16815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561366357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136036000888488612d4b565b613642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613639906145ca565b60405180910390fd5b818061364d90614b1f565b925050808061365b90614b1f565b915050613592565b50806001819055506136786000878588613686565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b8280546136ab90614abc565b90600052602060002090601f0160209004810192826136cd5760008555613714565b82601f106136e657803560ff1916838001178555613714565b82800160010185558215613714579182015b828111156137135782358255916020019190600101906136f8565b5b509050613721919061375f565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613778576000816000905550600101613760565b5090565b600061378f61378a846147a0565b61477b565b905080838252602082019050828560208602820111156137b2576137b1614c8e565b5b60005b858110156137e257816137c8888261389e565b8452602084019350602083019250506001810190506137b5565b5050509392505050565b60006137ff6137fa846147cc565b61477b565b9050808382526020820190508285602086028201111561382257613821614c8e565b5b60005b85811015613852578161383888826139d2565b845260208401935060208301925050600181019050613825565b5050509392505050565b600061386f61386a846147f8565b61477b565b90508281526020810184848401111561388b5761388a614c93565b5b613896848285614a50565b509392505050565b6000813590506138ad816154a5565b92915050565b600082601f8301126138c8576138c7614c89565b5b81356138d884826020860161377c565b91505092915050565b600082601f8301126138f6576138f5614c89565b5b81356139068482602086016137ec565b91505092915050565b60008135905061391e816154bc565b92915050565b600081359050613933816154d3565b92915050565b600081519050613948816154d3565b92915050565b600082601f83011261396357613962614c89565b5b813561397384826020860161385c565b91505092915050565b60008083601f84011261399257613991614c89565b5b8235905067ffffffffffffffff8111156139af576139ae614c84565b5b6020830191508360018202830111156139cb576139ca614c8e565b5b9250929050565b6000813590506139e1816154ea565b92915050565b6000602082840312156139fd576139fc614c9d565b5b6000613a0b8482850161389e565b91505092915050565b60008060408385031215613a2b57613a2a614c9d565b5b6000613a398582860161389e565b9250506020613a4a8582860161389e565b9150509250929050565b600080600060608486031215613a6d57613a6c614c9d565b5b6000613a7b8682870161389e565b9350506020613a8c8682870161389e565b9250506040613a9d868287016139d2565b9150509250925092565b60008060008060808587031215613ac157613ac0614c9d565b5b6000613acf8782880161389e565b9450506020613ae08782880161389e565b9350506040613af1878288016139d2565b925050606085013567ffffffffffffffff811115613b1257613b11614c98565b5b613b1e8782880161394e565b91505092959194509250565b60008060408385031215613b4157613b40614c9d565b5b6000613b4f8582860161389e565b9250506020613b608582860161390f565b9150509250929050565b60008060408385031215613b8157613b80614c9d565b5b6000613b8f8582860161389e565b9250506020613ba0858286016139d2565b9150509250929050565b60008060408385031215613bc157613bc0614c9d565b5b600083013567ffffffffffffffff811115613bdf57613bde614c98565b5b613beb858286016138b3565b925050602083013567ffffffffffffffff811115613c0c57613c0b614c98565b5b613c18858286016138e1565b9150509250929050565b600060208284031215613c3857613c37614c9d565b5b6000613c4684828501613924565b91505092915050565b600060208284031215613c6557613c64614c9d565b5b6000613c7384828501613939565b91505092915050565b60008060208385031215613c9357613c92614c9d565b5b600083013567ffffffffffffffff811115613cb157613cb0614c98565b5b613cbd8582860161397c565b92509250509250929050565b600060208284031215613cdf57613cde614c9d565b5b6000613ced848285016139d2565b91505092915050565b613cff816149ac565b82525050565b613d0e816149ac565b82525050565b613d1d816149be565b82525050565b6000613d2e82614829565b613d38818561483f565b9350613d48818560208601614a5f565b613d5181614ca2565b840191505092915050565b6000613d6782614834565b613d71818561485b565b9350613d81818560208601614a5f565b613d8a81614ca2565b840191505092915050565b6000613da082614834565b613daa818561486c565b9350613dba818560208601614a5f565b80840191505092915050565b6000613dd360228361485b565b9150613dde82614cb3565b604082019050919050565b6000613df660178361485b565b9150613e0182614d02565b602082019050919050565b6000613e1960268361485b565b9150613e2482614d2b565b604082019050919050565b6000613e3c602a8361485b565b9150613e4782614d7a565b604082019050919050565b6000613e5f60238361485b565b9150613e6a82614dc9565b604082019050919050565b6000613e8260258361485b565b9150613e8d82614e18565b604082019050919050565b6000613ea560318361485b565b9150613eb082614e67565b604082019050919050565b6000613ec8601e8361485b565b9150613ed382614eb6565b602082019050919050565b6000613eeb60398361485b565b9150613ef682614edf565b604082019050919050565b6000613f0e60188361485b565b9150613f1982614f2e565b602082019050919050565b6000613f31602b8361485b565b9150613f3c82614f57565b604082019050919050565b6000613f5460128361485b565b9150613f5f82614fa6565b602082019050919050565b6000613f7760268361485b565b9150613f8282614fcf565b604082019050919050565b6000613f9a60058361486c565b9150613fa58261501e565b600582019050919050565b6000613fbd60208361485b565b9150613fc882615047565b602082019050919050565b6000613fe0602f8361485b565b9150613feb82615070565b604082019050919050565b6000614003601a8361485b565b915061400e826150bf565b602082019050919050565b600061402660328361485b565b9150614031826150e8565b604082019050919050565b600061404960228361485b565b915061405482615137565b604082019050919050565b600061406c600083614850565b915061407782615186565b600082019050919050565b600061408f60108361485b565b915061409a82615189565b602082019050919050565b60006140b260338361485b565b91506140bd826151b2565b604082019050919050565b60006140d560168361485b565b91506140e082615201565b602082019050919050565b60006140f8601d8361485b565b91506141038261522a565b602082019050919050565b600061411b60218361485b565b915061412682615253565b604082019050919050565b600061413e602e8361485b565b9150614149826152a2565b604082019050919050565b600061416160268361485b565b915061416c826152f1565b604082019050919050565b6000614184601f8361485b565b915061418f82615340565b602082019050919050565b60006141a7602f8361485b565b91506141b282615369565b604082019050919050565b60006141ca602d8361485b565b91506141d5826153b8565b604082019050919050565b60006141ed60228361485b565b91506141f882615407565b604082019050919050565b600061421060288361485b565b915061421b82615456565b604082019050919050565b60408201600082015161423c6000850182613cf6565b50602082015161424f6020850182614264565b50505050565b61425e81614a32565b82525050565b61426d81614a3c565b82525050565b61427c81614a3c565b82525050565b600061428e8285613d95565b915061429a8284613d95565b91506142a582613f8d565b91508190509392505050565b60006142bc8261405f565b9150819050919050565b60006020820190506142db6000830184613d05565b92915050565b60006080820190506142f66000830187613d05565b6143036020830186613d05565b6143106040830185614255565b81810360608301526143228184613d23565b905095945050505050565b60006020820190506143426000830184613d14565b92915050565b600060208201905081810360008301526143628184613d5c565b905092915050565b6000602082019050818103600083015261438381613dc6565b9050919050565b600060208201905081810360008301526143a381613de9565b9050919050565b600060208201905081810360008301526143c381613e0c565b9050919050565b600060208201905081810360008301526143e381613e2f565b9050919050565b6000602082019050818103600083015261440381613e52565b9050919050565b6000602082019050818103600083015261442381613e75565b9050919050565b6000602082019050818103600083015261444381613e98565b9050919050565b6000602082019050818103600083015261446381613ebb565b9050919050565b6000602082019050818103600083015261448381613ede565b9050919050565b600060208201905081810360008301526144a381613f01565b9050919050565b600060208201905081810360008301526144c381613f24565b9050919050565b600060208201905081810360008301526144e381613f47565b9050919050565b6000602082019050818103600083015261450381613f6a565b9050919050565b6000602082019050818103600083015261452381613fb0565b9050919050565b6000602082019050818103600083015261454381613fd3565b9050919050565b6000602082019050818103600083015261456381613ff6565b9050919050565b6000602082019050818103600083015261458381614019565b9050919050565b600060208201905081810360008301526145a38161403c565b9050919050565b600060208201905081810360008301526145c381614082565b9050919050565b600060208201905081810360008301526145e3816140a5565b9050919050565b60006020820190508181036000830152614603816140c8565b9050919050565b60006020820190508181036000830152614623816140eb565b9050919050565b600060208201905081810360008301526146438161410e565b9050919050565b6000602082019050818103600083015261466381614131565b9050919050565b6000602082019050818103600083015261468381614154565b9050919050565b600060208201905081810360008301526146a381614177565b9050919050565b600060208201905081810360008301526146c38161419a565b9050919050565b600060208201905081810360008301526146e3816141bd565b9050919050565b60006020820190508181036000830152614703816141e0565b9050919050565b6000602082019050818103600083015261472381614203565b9050919050565b600060408201905061473f6000830184614226565b92915050565b600060208201905061475a6000830184614255565b92915050565b60006020820190506147756000830184614273565b92915050565b6000614785614796565b90506147918282614aee565b919050565b6000604051905090565b600067ffffffffffffffff8211156147bb576147ba614c55565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147e7576147e6614c55565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561481357614812614c55565b5b61481c82614ca2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614882826149f6565b915061488d836149f6565b9250826fffffffffffffffffffffffffffffffff038211156148b2576148b1614b99565b5b828201905092915050565b60006148c882614a32565b91506148d383614a32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561490857614907614b99565b5b828201905092915050565b600061491e82614a32565b915061492983614a32565b92508261493957614938614bc8565b5b828204905092915050565b600061494f826149f6565b915061495a836149f6565b92508282101561496d5761496c614b99565b5b828203905092915050565b600061498382614a32565b915061498e83614a32565b9250828210156149a1576149a0614b99565b5b828203905092915050565b60006149b782614a12565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614a7d578082015181840152602081019050614a62565b83811115614a8c576000848401525b50505050565b6000614a9d82614a32565b91506000821415614ab157614ab0614b99565b5b600182039050919050565b60006002820490506001821680614ad457607f821691505b60208210811415614ae857614ae7614bf7565b5b50919050565b614af782614ca2565b810181811067ffffffffffffffff82111715614b1657614b15614c55565b5b80604052505050565b6000614b2a82614a32565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b5d57614b5c614b99565b5b600182019050919050565b6000614b7382614a32565b9150614b7e83614a32565b925082614b8e57614b8d614bc8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e79206d696e746564206174206f6e6365000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373657320646f6573206e6f74206d61746368206e756d536c6f7460008201527f73206c656e677468000000000000000000000000000000000000000000000000602082015250565b6154ae816149ac565b81146154b957600080fd5b50565b6154c5816149be565b81146154d057600080fd5b50565b6154dc816149ca565b81146154e757600080fd5b50565b6154f381614a32565b81146154fe57600080fd5b5056fea26469706673582212208c03613fc1192beba309675eaedf59ee5448bfd428e0282581573ed49a81094a64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000015b300000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000000000000000002

Deployed Bytecode

0x6080604052600436106102515760003560e01c80638da5cb5b11610139578063b05863d5116100b6578063d7224ba01161007a578063d7224ba0146108a2578063dc33e681146108cd578063e985e9c51461090a578063eb7f13ad14610947578063f2fde38b14610970578063fbe1aa511461099957610251565b8063b05863d5146107c1578063b88d4fde146107ea578063c87b56dd14610813578063d0d9990714610850578063d49f0fa51461087957610251565b8063a035b1fe116100fd578063a035b1fe146106fd578063a22cb46514610728578063a7cd52cb14610751578063ac4460021461078e578063ad6ac81b146107a557610251565b80638da5cb5b1461061657806390aa0b0f146106415780639231ab2a1461066c57806395d89b41146106a95780639f8afbcc146106d457610251565b80632d20fb60116101d25780635a2bcc18116101965780635a2bcc18146105065780636352211e1461053157806370a082311461056e578063715018a6146105ab57806380e28ea5146105c25780638bc35c2f146105eb57610251565b80632d20fb60146104115780632f745c591461043a57806342842e0e146104775780634f6ccce7146104a057806355f804b3146104dd57610251565b8063130db2bb11610219578063130db2bb1461034057806318160ddd1461036b57806321b2a6cb1461039657806323b872dd146103bf57806327e410f1146103e857610251565b806301ffc9a71461025657806306fdde031461029357806307883703146102be578063081812fc146102da578063095ea7b314610317575b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190613c22565b6109c4565b60405161028a919061432d565b60405180910390f35b34801561029f57600080fd5b506102a8610b0e565b6040516102b59190614348565b60405180910390f35b6102d860048036038101906102d39190613cc9565b610ba0565b005b3480156102e657600080fd5b5061030160048036038101906102fc9190613cc9565b610cfc565b60405161030e91906142c6565b60405180910390f35b34801561032357600080fd5b5061033e60048036038101906103399190613b6a565b610d81565b005b34801561034c57600080fd5b50610355610e9a565b6040516103629190614745565b60405180910390f35b34801561037757600080fd5b50610380610ea0565b60405161038d9190614745565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b89190613cc9565b610eaa565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190613a54565b610f30565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190613cc9565b610f40565b005b34801561041d57600080fd5b5061043860048036038101906104339190613cc9565b610fc6565b005b34801561044657600080fd5b50610461600480360381019061045c9190613b6a565b6110a4565b60405161046e9190614745565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190613a54565b6112a2565b005b3480156104ac57600080fd5b506104c760048036038101906104c29190613cc9565b6112c2565b6040516104d49190614745565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190613c7c565b611315565b005b34801561051257600080fd5b5061051b6113a7565b6040516105289190614745565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190613cc9565b6113ad565b60405161056591906142c6565b60405180910390f35b34801561057a57600080fd5b50610595600480360381019061059091906139e7565b6113c3565b6040516105a29190614745565b60405180910390f35b3480156105b757600080fd5b506105c06114ac565b005b3480156105ce57600080fd5b506105e960048036038101906105e49190613cc9565b611534565b005b3480156105f757600080fd5b506106006115ba565b60405161060d9190614745565b60405180910390f35b34801561062257600080fd5b5061062b6115c0565b60405161063891906142c6565b60405180910390f35b34801561064d57600080fd5b506106566115e9565b6040516106639190614760565b60405180910390f35b34801561067857600080fd5b50610693600480360381019061068e9190613cc9565b611609565b6040516106a0919061472a565b60405180910390f35b3480156106b557600080fd5b506106be611621565b6040516106cb9190614348565b60405180910390f35b3480156106e057600080fd5b506106fb60048036038101906106f69190613cc9565b6116b3565b005b34801561070957600080fd5b50610712611739565b60405161071f9190614745565b60405180910390f35b34801561073457600080fd5b5061074f600480360381019061074a9190613b2a565b61173f565b005b34801561075d57600080fd5b50610778600480360381019061077391906139e7565b6118c0565b6040516107859190614745565b60405180910390f35b34801561079a57600080fd5b506107a36118d8565b005b6107bf60048036038101906107ba9190613cc9565b611a59565b005b3480156107cd57600080fd5b506107e860048036038101906107e39190613baa565b611b70565b005b3480156107f657600080fd5b50610811600480360381019061080c9190613aa7565b611ccc565b005b34801561081f57600080fd5b5061083a60048036038101906108359190613cc9565b611d28565b6040516108479190614348565b60405180910390f35b34801561085c57600080fd5b5061087760048036038101906108729190613cc9565b611dcf565b005b34801561088557600080fd5b506108a0600480360381019061089b9190613cc9565b611e55565b005b3480156108ae57600080fd5b506108b7611edb565b6040516108c49190614745565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef91906139e7565b611ee1565b6040516109019190614745565b60405180910390f35b34801561091657600080fd5b50610931600480360381019061092c9190613a14565b611ef3565b60405161093e919061432d565b60405180910390f35b34801561095357600080fd5b5061096e60048036038101906109699190613cc9565b611f87565b005b34801561097c57600080fd5b50610997600480360381019061099291906139e7565b612067565b005b3480156109a557600080fd5b506109ae61215f565b6040516109bb9190614745565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a8f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610af757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b075750610b0682612165565b5b9050919050565b606060058054610b1d90614abc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4990614abc565b8015610b965780601f10610b6b57610100808354040283529160200191610b96565b820191906000526020600020905b815481529060010190602001808311610b7957829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c059061444a565b60405180910390fd5b601154811115610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a9061438a565b60405180910390fd5b600f54341015610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f906145ea565b60405180910390fd5b60025481610ca4610ea0565b610cae91906148bd565b1115610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce6906144ca565b60405180910390fd5b610cf933826121cf565b50565b6000610d07826121ed565b610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d906146ca565b60405180910390fd5b6009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d8c826113ad565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df49061458a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e1c6121fb565b73ffffffffffffffffffffffffffffffffffffffff161480610e4b5750610e4a81610e456121fb565b611ef3565b5b610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e819061446a565b60405180910390fd5b610e95838383612203565b505050565b60105481565b6000600154905090565b610eb26121fb565b73ffffffffffffffffffffffffffffffffffffffff16610ed06115c0565b73ffffffffffffffffffffffffffffffffffffffff1614610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d9061450a565b60405180910390fd5b80600e8190555050565b610f3b8383836122b5565b505050565b610f486121fb565b73ffffffffffffffffffffffffffffffffffffffff16610f666115c0565b73ffffffffffffffffffffffffffffffffffffffff1614610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb39061450a565b60405180910390fd5b8060108190555050565b610fce6121fb565b73ffffffffffffffffffffffffffffffffffffffff16610fec6115c0565b73ffffffffffffffffffffffffffffffffffffffff1614611042576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110399061450a565b60405180910390fd5b6002600c541415611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f9061468a565b60405180910390fd5b6002600c819055506110998161286e565b6001600c8190555050565b60006110af836113c3565b82106110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e79061436a565b60405180910390fd5b60006110fa610ea0565b905060008060005b83811015611260576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146111f457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561124c578684141561123d57819550505050505061129c565b838061124890614b1f565b9450505b50808061125890614b1f565b915050611102565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112939061464a565b60405180910390fd5b92915050565b6112bd83838360405180602001604052806000815250611ccc565b505050565b60006112cc610ea0565b821061130d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611304906143ea565b60405180910390fd5b819050919050565b61131d6121fb565b73ffffffffffffffffffffffffffffffffffffffff1661133b6115c0565b73ffffffffffffffffffffffffffffffffffffffff1614611391576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113889061450a565b60405180910390fd5b8181601491906113a292919061369f565b505050565b60115481565b60006113b882612ac0565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b906144aa565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6114b46121fb565b73ffffffffffffffffffffffffffffffffffffffff166114d26115c0565b73ffffffffffffffffffffffffffffffffffffffff1614611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f9061450a565b60405180910390fd5b6115326000612c87565b565b61153c6121fb565b73ffffffffffffffffffffffffffffffffffffffff1661155a6115c0565b73ffffffffffffffffffffffffffffffffffffffff16146115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a79061450a565b60405180910390fd5b8060038190555050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60128060000160009054906101000a900467ffffffffffffffff16905081565b611611613725565b61161a82612ac0565b9050919050565b60606006805461163090614abc565b80601f016020809104026020016040519081016040528092919081815260200182805461165c90614abc565b80156116a95780601f1061167e576101008083540402835291602001916116a9565b820191906000526020600020905b81548152906001019060200180831161168c57829003601f168201915b5050505050905090565b6116bb6121fb565b73ffffffffffffffffffffffffffffffffffffffff166116d96115c0565b73ffffffffffffffffffffffffffffffffffffffff161461172f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117269061450a565b60405180910390fd5b8060028190555050565b600f5481565b6117476121fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac9061454a565b60405180910390fd5b80600a60006117c26121fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661186f6121fb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118b4919061432d565b60405180910390a35050565b60136020528060005260406000206000915090505481565b6118e06121fb565b73ffffffffffffffffffffffffffffffffffffffff166118fe6115c0565b73ffffffffffffffffffffffffffffffffffffffff1614611954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194b9061450a565b60405180910390fd5b6002600c54141561199a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119919061468a565b60405180910390fd5b6002600c8190555060003373ffffffffffffffffffffffffffffffffffffffff16476040516119c8906142b1565b60006040518083038185875af1925050503d8060008114611a05576040519150601f19603f3d011682016040523d82523d6000602084013e611a0a565b606091505b5050905080611a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a45906145aa565b60405180910390fd5b506001600c81905550565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe9061444a565b60405180910390fd5b601054811115611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b039061438a565b60405180910390fd5b60035481611b18610ea0565b611b2291906148bd565b1115611b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5a906144ca565b60405180910390fd5b611b6d33826121cf565b50565b611b786121fb565b73ffffffffffffffffffffffffffffffffffffffff16611b966115c0565b73ffffffffffffffffffffffffffffffffffffffff1614611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be39061450a565b60405180910390fd5b8051825114611c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c279061470a565b60405180910390fd5b60005b8251811015611cc757818181518110611c4f57611c4e614c26565b5b602002602001015160136000858481518110611c6e57611c6d614c26565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611cbf90614b1f565b915050611c33565b505050565b611cd78484846122b5565b611ce384848484612d4b565b611d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d19906145ca565b60405180910390fd5b50505050565b6060611d33826121ed565b611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d699061452a565b60405180910390fd5b6000611d7c612ee2565b90506000815111611d9c5760405180602001604052806000815250611dc7565b80611da684612f74565b604051602001611db7929190614282565b6040516020818303038152906040525b915050919050565b611dd76121fb565b73ffffffffffffffffffffffffffffffffffffffff16611df56115c0565b73ffffffffffffffffffffffffffffffffffffffff1614611e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e429061450a565b60405180910390fd5b8060118190555050565b611e5d6121fb565b73ffffffffffffffffffffffffffffffffffffffff16611e7b6115c0565b73ffffffffffffffffffffffffffffffffffffffff1614611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec89061450a565b60405180910390fd5b80600f8190555050565b600b5481565b6000611eec826130d5565b9050919050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f8f6121fb565b73ffffffffffffffffffffffffffffffffffffffff16611fad6115c0565b73ffffffffffffffffffffffffffffffffffffffff1614612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa9061450a565b60405180910390fd5b600e548161200f610ea0565b61201991906148bd565b111561205a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612051906144ca565b60405180910390fd5b61206433826121cf565b50565b61206f6121fb565b73ffffffffffffffffffffffffffffffffffffffff1661208d6115c0565b73ffffffffffffffffffffffffffffffffffffffff16146120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da9061450a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a906143aa565b60405180910390fd5b61215c81612c87565b50565b600e5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121e98282604051806020016040528060008152506131be565b5050565b600060015482109050919050565b600033905090565b826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006122c082612ac0565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166122e76121fb565b73ffffffffffffffffffffffffffffffffffffffff161480612343575061230c6121fb565b73ffffffffffffffffffffffffffffffffffffffff1661232b84610cfc565b73ffffffffffffffffffffffffffffffffffffffff16145b8061235f575061235e82600001516123596121fb565b611ef3565b5b9050806123a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123989061456a565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240a906144ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247a9061440a565b60405180910390fd5b6124908585856001613680565b6124a06000848460000151612203565b6001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661250e9190614944565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166125b29190614877565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846126b891906148bd565b9050600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127fe5761272e816121ed565b156127fd576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506007600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128668686866001613686565b505050505050565b6000600b549050600082116128b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128af9061448a565b60405180910390fd5b6000600183836128c891906148bd565b6128d29190614978565b905060016002546128e39190614978565b8111156128fc5760016002546128f99190614978565b90505b612905816121ed565b612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b9061466a565b60405180910390fd5b60008290505b818111612aa757600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612a945760006129c782612ac0565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506007600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612a9f90614b1f565b91505061294a565b50600181612ab591906148bd565b600b81905550505050565b612ac8613725565b612ad1826121ed565b612b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b07906143ca565b60405180910390fd5b60006004548310612b3857600160045484612b2b9190614978565b612b3591906148bd565b90505b60008390505b818110612c46576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c3257809350505050612c82565b508080612c3e90614a92565b915050612b3e565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c79906146aa565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612d6c8473ffffffffffffffffffffffffffffffffffffffff1661368c565b15612ed5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d956121fb565b8786866040518563ffffffff1660e01b8152600401612db794939291906142e1565b602060405180830381600087803b158015612dd157600080fd5b505af1925050508015612e0257506040513d601f19601f82011682018060405250810190612dff9190613c4f565b60015b612e85573d8060008114612e32576040519150601f19603f3d011682016040523d82523d6000602084013e612e37565b606091505b50600081511415612e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e74906145ca565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612eda565b600190505b949350505050565b606060148054612ef190614abc565b80601f0160208091040260200160405190810160405280929190818152602001828054612f1d90614abc565b8015612f6a5780601f10612f3f57610100808354040283529160200191612f6a565b820191906000526020600020905b815481529060010190602001808311612f4d57829003601f168201915b5050505050905090565b60606000821415612fbc576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130d0565b600082905060005b60008214612fee578080612fd790614b1f565b915050600a82612fe79190614913565b9150612fc4565b60008167ffffffffffffffff81111561300a57613009614c55565b5b6040519080825280601f01601f19166020018201604052801561303c5781602001600182028036833780820191505090505b5090505b600085146130c9576001826130559190614978565b9150600a856130649190614b68565b603061307091906148bd565b60f81b81838151811061308657613085614c26565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130c29190614913565b9450613040565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313d9061442a565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322c9061462a565b60405180910390fd5b61323e816121ed565b1561327e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132759061460a565b60405180910390fd5b6004548311156132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba906146ea565b60405180910390fd5b6132d06000858386613680565b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516133cd9190614877565b6fffffffffffffffffffffffffffffffff1681526020018583602001516133f49190614877565b6fffffffffffffffffffffffffffffffff16815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561366357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136036000888488612d4b565b613642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613639906145ca565b60405180910390fd5b818061364d90614b1f565b925050808061365b90614b1f565b915050613592565b50806001819055506136786000878588613686565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b8280546136ab90614abc565b90600052602060002090601f0160209004810192826136cd5760008555613714565b82601f106136e657803560ff1916838001178555613714565b82800160010185558215613714579182015b828111156137135782358255916020019190600101906136f8565b5b509050613721919061375f565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613778576000816000905550600101613760565b5090565b600061378f61378a846147a0565b61477b565b905080838252602082019050828560208602820111156137b2576137b1614c8e565b5b60005b858110156137e257816137c8888261389e565b8452602084019350602083019250506001810190506137b5565b5050509392505050565b60006137ff6137fa846147cc565b61477b565b9050808382526020820190508285602086028201111561382257613821614c8e565b5b60005b85811015613852578161383888826139d2565b845260208401935060208301925050600181019050613825565b5050509392505050565b600061386f61386a846147f8565b61477b565b90508281526020810184848401111561388b5761388a614c93565b5b613896848285614a50565b509392505050565b6000813590506138ad816154a5565b92915050565b600082601f8301126138c8576138c7614c89565b5b81356138d884826020860161377c565b91505092915050565b600082601f8301126138f6576138f5614c89565b5b81356139068482602086016137ec565b91505092915050565b60008135905061391e816154bc565b92915050565b600081359050613933816154d3565b92915050565b600081519050613948816154d3565b92915050565b600082601f83011261396357613962614c89565b5b813561397384826020860161385c565b91505092915050565b60008083601f84011261399257613991614c89565b5b8235905067ffffffffffffffff8111156139af576139ae614c84565b5b6020830191508360018202830111156139cb576139ca614c8e565b5b9250929050565b6000813590506139e1816154ea565b92915050565b6000602082840312156139fd576139fc614c9d565b5b6000613a0b8482850161389e565b91505092915050565b60008060408385031215613a2b57613a2a614c9d565b5b6000613a398582860161389e565b9250506020613a4a8582860161389e565b9150509250929050565b600080600060608486031215613a6d57613a6c614c9d565b5b6000613a7b8682870161389e565b9350506020613a8c8682870161389e565b9250506040613a9d868287016139d2565b9150509250925092565b60008060008060808587031215613ac157613ac0614c9d565b5b6000613acf8782880161389e565b9450506020613ae08782880161389e565b9350506040613af1878288016139d2565b925050606085013567ffffffffffffffff811115613b1257613b11614c98565b5b613b1e8782880161394e565b91505092959194509250565b60008060408385031215613b4157613b40614c9d565b5b6000613b4f8582860161389e565b9250506020613b608582860161390f565b9150509250929050565b60008060408385031215613b8157613b80614c9d565b5b6000613b8f8582860161389e565b9250506020613ba0858286016139d2565b9150509250929050565b60008060408385031215613bc157613bc0614c9d565b5b600083013567ffffffffffffffff811115613bdf57613bde614c98565b5b613beb858286016138b3565b925050602083013567ffffffffffffffff811115613c0c57613c0b614c98565b5b613c18858286016138e1565b9150509250929050565b600060208284031215613c3857613c37614c9d565b5b6000613c4684828501613924565b91505092915050565b600060208284031215613c6557613c64614c9d565b5b6000613c7384828501613939565b91505092915050565b60008060208385031215613c9357613c92614c9d565b5b600083013567ffffffffffffffff811115613cb157613cb0614c98565b5b613cbd8582860161397c565b92509250509250929050565b600060208284031215613cdf57613cde614c9d565b5b6000613ced848285016139d2565b91505092915050565b613cff816149ac565b82525050565b613d0e816149ac565b82525050565b613d1d816149be565b82525050565b6000613d2e82614829565b613d38818561483f565b9350613d48818560208601614a5f565b613d5181614ca2565b840191505092915050565b6000613d6782614834565b613d71818561485b565b9350613d81818560208601614a5f565b613d8a81614ca2565b840191505092915050565b6000613da082614834565b613daa818561486c565b9350613dba818560208601614a5f565b80840191505092915050565b6000613dd360228361485b565b9150613dde82614cb3565b604082019050919050565b6000613df660178361485b565b9150613e0182614d02565b602082019050919050565b6000613e1960268361485b565b9150613e2482614d2b565b604082019050919050565b6000613e3c602a8361485b565b9150613e4782614d7a565b604082019050919050565b6000613e5f60238361485b565b9150613e6a82614dc9565b604082019050919050565b6000613e8260258361485b565b9150613e8d82614e18565b604082019050919050565b6000613ea560318361485b565b9150613eb082614e67565b604082019050919050565b6000613ec8601e8361485b565b9150613ed382614eb6565b602082019050919050565b6000613eeb60398361485b565b9150613ef682614edf565b604082019050919050565b6000613f0e60188361485b565b9150613f1982614f2e565b602082019050919050565b6000613f31602b8361485b565b9150613f3c82614f57565b604082019050919050565b6000613f5460128361485b565b9150613f5f82614fa6565b602082019050919050565b6000613f7760268361485b565b9150613f8282614fcf565b604082019050919050565b6000613f9a60058361486c565b9150613fa58261501e565b600582019050919050565b6000613fbd60208361485b565b9150613fc882615047565b602082019050919050565b6000613fe0602f8361485b565b9150613feb82615070565b604082019050919050565b6000614003601a8361485b565b915061400e826150bf565b602082019050919050565b600061402660328361485b565b9150614031826150e8565b604082019050919050565b600061404960228361485b565b915061405482615137565b604082019050919050565b600061406c600083614850565b915061407782615186565b600082019050919050565b600061408f60108361485b565b915061409a82615189565b602082019050919050565b60006140b260338361485b565b91506140bd826151b2565b604082019050919050565b60006140d560168361485b565b91506140e082615201565b602082019050919050565b60006140f8601d8361485b565b91506141038261522a565b602082019050919050565b600061411b60218361485b565b915061412682615253565b604082019050919050565b600061413e602e8361485b565b9150614149826152a2565b604082019050919050565b600061416160268361485b565b915061416c826152f1565b604082019050919050565b6000614184601f8361485b565b915061418f82615340565b602082019050919050565b60006141a7602f8361485b565b91506141b282615369565b604082019050919050565b60006141ca602d8361485b565b91506141d5826153b8565b604082019050919050565b60006141ed60228361485b565b91506141f882615407565b604082019050919050565b600061421060288361485b565b915061421b82615456565b604082019050919050565b60408201600082015161423c6000850182613cf6565b50602082015161424f6020850182614264565b50505050565b61425e81614a32565b82525050565b61426d81614a3c565b82525050565b61427c81614a3c565b82525050565b600061428e8285613d95565b915061429a8284613d95565b91506142a582613f8d565b91508190509392505050565b60006142bc8261405f565b9150819050919050565b60006020820190506142db6000830184613d05565b92915050565b60006080820190506142f66000830187613d05565b6143036020830186613d05565b6143106040830185614255565b81810360608301526143228184613d23565b905095945050505050565b60006020820190506143426000830184613d14565b92915050565b600060208201905081810360008301526143628184613d5c565b905092915050565b6000602082019050818103600083015261438381613dc6565b9050919050565b600060208201905081810360008301526143a381613de9565b9050919050565b600060208201905081810360008301526143c381613e0c565b9050919050565b600060208201905081810360008301526143e381613e2f565b9050919050565b6000602082019050818103600083015261440381613e52565b9050919050565b6000602082019050818103600083015261442381613e75565b9050919050565b6000602082019050818103600083015261444381613e98565b9050919050565b6000602082019050818103600083015261446381613ebb565b9050919050565b6000602082019050818103600083015261448381613ede565b9050919050565b600060208201905081810360008301526144a381613f01565b9050919050565b600060208201905081810360008301526144c381613f24565b9050919050565b600060208201905081810360008301526144e381613f47565b9050919050565b6000602082019050818103600083015261450381613f6a565b9050919050565b6000602082019050818103600083015261452381613fb0565b9050919050565b6000602082019050818103600083015261454381613fd3565b9050919050565b6000602082019050818103600083015261456381613ff6565b9050919050565b6000602082019050818103600083015261458381614019565b9050919050565b600060208201905081810360008301526145a38161403c565b9050919050565b600060208201905081810360008301526145c381614082565b9050919050565b600060208201905081810360008301526145e3816140a5565b9050919050565b60006020820190508181036000830152614603816140c8565b9050919050565b60006020820190508181036000830152614623816140eb565b9050919050565b600060208201905081810360008301526146438161410e565b9050919050565b6000602082019050818103600083015261466381614131565b9050919050565b6000602082019050818103600083015261468381614154565b9050919050565b600060208201905081810360008301526146a381614177565b9050919050565b600060208201905081810360008301526146c38161419a565b9050919050565b600060208201905081810360008301526146e3816141bd565b9050919050565b60006020820190508181036000830152614703816141e0565b9050919050565b6000602082019050818103600083015261472381614203565b9050919050565b600060408201905061473f6000830184614226565b92915050565b600060208201905061475a6000830184614255565b92915050565b60006020820190506147756000830184614273565b92915050565b6000614785614796565b90506147918282614aee565b919050565b6000604051905090565b600067ffffffffffffffff8211156147bb576147ba614c55565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147e7576147e6614c55565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561481357614812614c55565b5b61481c82614ca2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614882826149f6565b915061488d836149f6565b9250826fffffffffffffffffffffffffffffffff038211156148b2576148b1614b99565b5b828201905092915050565b60006148c882614a32565b91506148d383614a32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561490857614907614b99565b5b828201905092915050565b600061491e82614a32565b915061492983614a32565b92508261493957614938614bc8565b5b828204905092915050565b600061494f826149f6565b915061495a836149f6565b92508282101561496d5761496c614b99565b5b828203905092915050565b600061498382614a32565b915061498e83614a32565b9250828210156149a1576149a0614b99565b5b828203905092915050565b60006149b782614a12565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614a7d578082015181840152602081019050614a62565b83811115614a8c576000848401525b50505050565b6000614a9d82614a32565b91506000821415614ab157614ab0614b99565b5b600182039050919050565b60006002820490506001821680614ad457607f821691505b60208210811415614ae857614ae7614bf7565b5b50919050565b614af782614ca2565b810181811067ffffffffffffffff82111715614b1657614b15614c55565b5b80604052505050565b6000614b2a82614a32565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b5d57614b5c614b99565b5b600182019050919050565b6000614b7382614a32565b9150614b7e83614a32565b925082614b8e57614b8d614bc8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e79206d696e746564206174206f6e6365000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373657320646f6573206e6f74206d61746368206e756d536c6f7460008201527f73206c656e677468000000000000000000000000000000000000000000000000602082015250565b6154ae816149ac565b81146154b957600080fd5b50565b6154c5816149be565b81146154d057600080fd5b50565b6154dc816149ca565b81146154e757600080fd5b50565b6154f381614a32565b81146154fe57600080fd5b5056fea26469706673582212208c03613fc1192beba309675eaedf59ee5448bfd428e0282581573ed49a81094a64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000015b300000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000000000000000002

-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 15
Arg [1] : collectionSize_ (uint256): 5555
Arg [2] : collectionSizeFree_ (uint256): 200
Arg [3] : amountForDevs_ (uint256): 2

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [1] : 00000000000000000000000000000000000000000000000000000000000015b3
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000002


Deployed Bytecode Sourcemap

40596:3801:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23406:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25132:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41427:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26666:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26229:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40778:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21967:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44034:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27516:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44158:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43311:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22598:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27721:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22130:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43018:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40817:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24955:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23832:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39936:94;;;;;;;;;;;;;:::i;:::-;;43789:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40662:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39285:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40908:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43548:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25287:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43906:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40738:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26934:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40943:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43124:181;;;;;;;;;;;;;:::i;:::-;;41774:281;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42283:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27941:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25448:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44286:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43699:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32356:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43435:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27271:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42653:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40185:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40705:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23406:370;23533:4;23578:25;23563:40;;;:11;:40;;;;:99;;;;23629:33;23614:48;;;:11;:48;;;;23563:99;:160;;;;23688:35;23673:50;;;:11;:50;;;;23563:160;:207;;;;23734:36;23758:11;23734:23;:36::i;:::-;23563:207;23549:221;;23406:370;;;:::o;25132:94::-;25186:13;25215:5;25208:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25132:94;:::o;41427:339::-;41362:10;41349:23;;:9;:23;;;41341:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;41536:10:::1;;41524:8;:22;;41516:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;41604:5;;41591:9;:18;;41583:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;41679:14;;41667:8;41651:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;41643:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41723:31;41733:10;41745:8;41723:9;:31::i;:::-;41427:339:::0;:::o;26666:204::-;26734:7;26758:16;26766:7;26758;:16::i;:::-;26750:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26840:15;:24;26856:7;26840:24;;;;;;;;;;;;;;;;;;;;;26833:31;;26666:204;;;:::o;26229:379::-;26298:13;26314:24;26330:7;26314:15;:24::i;:::-;26298:40;;26359:5;26353:11;;:2;:11;;;;26345:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26444:5;26428:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26453:37;26470:5;26477:12;:10;:12::i;:::-;26453:16;:37::i;:::-;26428:62;26412:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;26574:28;26583:2;26587:7;26596:5;26574:8;:28::i;:::-;26291:317;26229:379;;:::o;40778:34::-;;;;:::o;21967:94::-;22020:7;22043:12;;22036:19;;21967:94;:::o;44034:116::-;39516:12;:10;:12::i;:::-;39505:23;;:7;:5;:7::i;:::-;:23;;;39497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44128:17:::1;44112:13;:33;;;;44034:116:::0;:::o;27516:142::-;27624:28;27634:4;27640:2;27644:7;27624:9;:28::i;:::-;27516:142;;;:::o;44158:120::-;39516:12;:10;:12::i;:::-;39505:23;;:7;:5;:7::i;:::-;:23;;;39497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44255:18:::1;44238:14;:35;;;;44158:120:::0;:::o;43311:118::-;39516:12;:10;:12::i;:::-;39505:23;;:7;:5;:7::i;:::-;:23;;;39497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37399:1:::1;37995:7;;:19;;37987:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;37399:1;38128:7;:18;;;;43395:28:::2;43414:8;43395:18;:28::i;:::-;37355:1:::1;38307:7;:22;;;;43311:118:::0;:::o;22598:744::-;22707:7;22742:16;22752:5;22742:9;:16::i;:::-;22734:5;:24;22726:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22804:22;22829:13;:11;:13::i;:::-;22804:38;;22849:19;22879:25;22929:9;22924:350;22948:14;22944:1;:18;22924:350;;;22978:31;23012:11;:14;23024:1;23012:14;;;;;;;;;;;22978:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23065:1;23039:28;;:9;:14;;;:28;;;23035:89;;23100:9;:14;;;23080:34;;23035:89;23157:5;23136:26;;:17;:26;;;23132:135;;;23194:5;23179:11;:20;23175:59;;;23221:1;23214:8;;;;;;;;;23175:59;23244:13;;;;;:::i;:::-;;;;23132:135;22969:305;22964:3;;;;;:::i;:::-;;;;22924:350;;;;23280:56;;;;;;;;;;:::i;:::-;;;;;;;;22598:744;;;;;:::o;27721:157::-;27833:39;27850:4;27856:2;27860:7;27833:39;;;;;;;;;;;;:16;:39::i;:::-;27721:157;;;:::o;22130:177::-;22197:7;22229:13;:11;:13::i;:::-;22221:5;:21;22213:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;22296:5;22289:12;;22130:177;;;:::o;43018:100::-;39516:12;:10;:12::i;:::-;39505:23;;:7;:5;:7::i;:::-;:23;;;39497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43105:7:::1;;43089:13;:23;;;;;;;:::i;:::-;;43018:100:::0;;:::o;40817:29::-;;;;:::o;24955:118::-;25019:7;25042:20;25054:7;25042:11;:20::i;:::-;:25;;;25035:32;;24955:118;;;:::o;23832:211::-;23896:7;23937:1;23920:19;;:5;:19;;;;23912:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24009:12;:19;24022:5;24009:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;24001:36;;23994:43;;23832:211;;;:::o;39936:94::-;39516:12;:10;:12::i;:::-;39505:23;;:7;:5;:7::i;:::-;:23;;;39497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40001:21:::1;40019:1;40001:9;:21::i;:::-;39936:94::o:0;43789:109::-;39516:12;:10;:12::i;:::-;39505:23;;:7;:5;:7::i;:::-;:23;;;39497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43880:13:::1;43859:18;:34;;;;43789:109:::0;:::o;40662:38::-;;;;:::o;39285:87::-;39331:7;39358:6;;;;;;;;;;;39351:13;;39285:87;:::o;40908:28::-;;;;;;;;;;;;;;;;;;:::o;43548:147::-;43629:21;;:::i;:::-;43669:20;43681:7;43669:11;:20::i;:::-;43662:27;;43548:147;;;:::o;25287:98::-;25343:13;25372:7;25365:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25287:98;:::o;43906:120::-;39516:12;:10;:12::i;:::-;39505:23;;:7;:5;:7::i;:::-;:23;;;39497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44003:18:::1;43986:14;:35;;;;43906:120:::0;:::o;40738:35::-;;;;:::o;26934:274::-;27037:12;:10;:12::i;:::-;27025:24;;:8;:24;;;;27017:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27134:8;27089:18;:32;27108:12;:10;:12::i;:::-;27089:32;;;;;;;;;;;;;;;:42;27122:8;27089:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27183:8;27154:48;;27169:12;:10;:12::i;:::-;27154:48;;;27193:8;27154:48;;;;;;:::i;:::-;;;;;;;;26934:274;;:::o;40943:44::-;;;;;;;;;;;;;;;;;:::o;43124:181::-;39516:12;:10;:12::i;:::-;39505:23;;:7;:5;:7::i;:::-;:23;;;39497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37399:1:::1;37995:7;;:19;;37987:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;37399:1;38128:7;:18;;;;43189:12:::2;43207:10;:15;;43230:21;43207:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43188:68;;;43271:7;43263:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;43181:124;37355:1:::1;38307:7;:22;;;;43124:181::o:0;41774:281::-;41362:10;41349:23;;:9;:23;;;41341:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;41885:14:::1;;41873:8;:26;;41865:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;41970:18;;41958:8;41942:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:46;;41934:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;42018:31;42028:10;42040:8;42018:9;:31::i;:::-;41774:281:::0;:::o;42283:339::-;39516:12;:10;:12::i;:::-;39505:23;;:7;:5;:7::i;:::-;:23;;;39497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42436:8:::1;:15;42416:9;:16;:35;42400:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;42521:9;42516:101;42540:9;:16;42536:1;:20;42516:101;;;42598:8;42607:1;42598:11;;;;;;;;:::i;:::-;;;;;;;;42572:9;:23;42582:9;42592:1;42582:12;;;;;;;;:::i;:::-;;;;;;;;42572:23;;;;;;;;;;;;;;;:37;;;;42558:3;;;;;:::i;:::-;;;;42516:101;;;;42283:339:::0;;:::o;27941:311::-;28078:28;28088:4;28094:2;28098:7;28078:9;:28::i;:::-;28129:48;28152:4;28158:2;28162:7;28171:5;28129:22;:48::i;:::-;28113:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;27941:311;;;;:::o;25448:403::-;25546:13;25587:16;25595:7;25587;:16::i;:::-;25571:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;25677:21;25701:10;:8;:10::i;:::-;25677:34;;25756:1;25738:7;25732:21;:25;:113;;;;;;;;;;;;;;;;;25793:7;25802:18;:7;:16;:18::i;:::-;25776:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25732:113;25718:127;;;25448:403;;;:::o;44286:104::-;39516:12;:10;:12::i;:::-;39505:23;;:7;:5;:7::i;:::-;:23;;;39497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44371:14:::1;44358:10;:27;;;;44286:104:::0;:::o;43699:84::-;39516:12;:10;:12::i;:::-;39505:23;;:7;:5;:7::i;:::-;:23;;;39497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43769:9:::1;43761:5;:17;;;;43699:84:::0;:::o;32356:43::-;;;;:::o;43435:107::-;43493:7;43516:20;43530:5;43516:13;:20::i;:::-;43509:27;;43435:107;;;:::o;27271:186::-;27393:4;27416:18;:25;27435:5;27416:25;;;;;;;;;;;;;;;:35;27442:8;27416:35;;;;;;;;;;;;;;;;;;;;;;;;;27409:42;;27271:186;;;;:::o;42653:182::-;39516:12;:10;:12::i;:::-;39505:23;;:7;:5;:7::i;:::-;:23;;;39497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42755:13:::1;;42743:8;42727:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:41;;42719:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;42798:31;42808:10;42820:8;42798:9;:31::i;:::-;42653:182:::0;:::o;40185:192::-;39516:12;:10;:12::i;:::-;39505:23;;:7;:5;:7::i;:::-;:23;;;39497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40294:1:::1;40274:22;;:8;:22;;;;40266:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40350:19;40360:8;40350:9;:19::i;:::-;40185:192:::0;:::o;40705:28::-;;;;:::o;1612:157::-;1697:4;1736:25;1721:40;;;:11;:40;;;;1714:47;;1612:157;;;:::o;28602:98::-;28667:27;28677:2;28681:8;28667:27;;;;;;;;;;;;:9;:27::i;:::-;28602:98;;:::o;28491:105::-;28548:4;28578:12;;28568:7;:22;28561:29;;28491:105;;;:::o;17369:98::-;17422:7;17449:10;17442:17;;17369:98;:::o;32178:172::-;32302:2;32275:15;:24;32291:7;32275:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32336:7;32332:2;32316:28;;32325:5;32316:28;;;;;;;;;;;;32178:172;;;:::o;30543:1529::-;30640:35;30678:20;30690:7;30678:11;:20::i;:::-;30640:58;;30707:22;30749:13;:18;;;30733:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;30802:12;:10;:12::i;:::-;30778:36;;:20;30790:7;30778:11;:20::i;:::-;:36;;;30733:81;:142;;;;30825:50;30842:13;:18;;;30862:12;:10;:12::i;:::-;30825:16;:50::i;:::-;30733:142;30707:169;;30901:17;30885:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;31033:4;31011:26;;:13;:18;;;:26;;;30995:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;31122:1;31108:16;;:2;:16;;;;31100:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31175:43;31197:4;31203:2;31207:7;31216:1;31175:21;:43::i;:::-;31275:49;31292:1;31296:7;31305:13;:18;;;31275:8;:49::i;:::-;31363:1;31333:12;:18;31346:4;31333:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31399:1;31371:12;:16;31384:2;31371:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31430:43;;;;;;;;31445:2;31430:43;;;;;;31456:15;31430:43;;;;;31407:11;:20;31419:7;31407:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31701:19;31733:1;31723:7;:11;;;;:::i;:::-;31701:33;;31786:1;31745:43;;:11;:24;31757:11;31745:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;31741:236;;;31803:20;31811:11;31803:7;:20::i;:::-;31799:171;;;31863:97;;;;;;;;31890:13;:18;;;31863:97;;;;;;31921:13;:28;;;31863:97;;;;;31836:11;:24;31848:11;31836:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31799:171;31741:236;32009:7;32005:2;31990:27;;31999:4;31990:27;;;;;;;;;;;;32024:42;32045:4;32051:2;32055:7;32064:1;32024:20;:42::i;:::-;30633:1439;;;30543:1529;;;:::o;32504:846::-;32566:25;32594:24;;32566:52;;32644:1;32633:8;:12;32625:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;32681:16;32731:1;32720:8;32700:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;32681:51;;32771:1;32754:14;;:18;;;;:::i;:::-;32743:8;:29;32739:81;;;32811:1;32794:14;;:18;;;;:::i;:::-;32783:29;;32739:81;32935:17;32943:8;32935:7;:17::i;:::-;32927:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33007:9;33019:17;33007:29;;33002:297;33043:8;33038:1;:13;33002:297;;33102:1;33071:33;;:11;:14;33083:1;33071:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;33067:225;;;33117:31;33151:14;33163:1;33151:11;:14::i;:::-;33117:48;;33193:89;;;;;;;;33220:9;:14;;;33193:89;;;;;;33247:9;:24;;;33193:89;;;;;33176:11;:14;33188:1;33176:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33106:186;33067:225;33053:3;;;;;:::i;:::-;;;;33002:297;;;;33343:1;33332:8;:12;;;;:::i;:::-;33305:24;:39;;;;32559:791;;32504:846;:::o;24295:606::-;24371:21;;:::i;:::-;24412:16;24420:7;24412;:16::i;:::-;24404:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24484:26;24532:12;;24521:7;:23;24517:93;;24601:1;24586:12;;24576:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;24555:47;;24517:93;24623:12;24638:7;24623:22;;24618:212;24655:18;24647:4;:26;24618:212;;24692:31;24726:11;:17;24738:4;24726:17;;;;;;;;;;;24692:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24782:1;24756:28;;:9;:14;;;:28;;;24752:71;;24804:9;24797:16;;;;;;;24752:71;24683:147;24675:6;;;;;:::i;:::-;;;;24618:212;;;;24838:57;;;;;;;;;;:::i;:::-;;;;;;;;24295:606;;;;:::o;40385:173::-;40441:16;40460:6;;;;;;;;;;;40441:25;;40486:8;40477:6;;:17;;;;;;;;;;;;;;;;;;40541:8;40510:40;;40531:8;40510:40;;;;;;;;;;;;40430:128;40385:173;:::o;33893:690::-;34030:4;34047:15;:2;:13;;;:15::i;:::-;34043:535;;;34102:2;34086:36;;;34123:12;:10;:12::i;:::-;34137:4;34143:7;34152:5;34086:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34073:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34334:1;34317:6;:13;:18;34313:215;;;34350:61;;;;;;;;;;:::i;:::-;;;;;;;;34313:215;34496:6;34490:13;34481:6;34477:2;34473:15;34466:38;34073:464;34218:45;;;34208:55;;;:6;:55;;;;34201:62;;;;;34043:535;34566:4;34559:11;;33893:690;;;;;;;:::o;42904:108::-;42964:13;42993;42986:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42904:108;:::o;17838:723::-;17894:13;18124:1;18115:5;:10;18111:53;;;18142:10;;;;;;;;;;;;;;;;;;;;;18111:53;18174:12;18189:5;18174:20;;18205:14;18230:78;18245:1;18237:4;:9;18230:78;;18263:8;;;;;:::i;:::-;;;;18294:2;18286:10;;;;;:::i;:::-;;;18230:78;;;18318:19;18350:6;18340:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18318:39;;18368:154;18384:1;18375:5;:10;18368:154;;18412:1;18402:11;;;;;:::i;:::-;;;18479:2;18471:5;:10;;;;:::i;:::-;18458:2;:24;;;;:::i;:::-;18445:39;;18428:6;18435;18428:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18508:2;18499:11;;;;;:::i;:::-;;;18368:154;;;18546:6;18532:21;;;;;17838:723;;;;:::o;24049:240::-;24110:7;24159:1;24142:19;;:5;:19;;;;24126:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;24250:12;:19;24263:5;24250:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;24242:41;;24235:48;;24049:240;;;:::o;29039:1272::-;29144:20;29167:12;;29144:35;;29208:1;29194:16;;:2;:16;;;;29186:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29385:21;29393:12;29385:7;:21::i;:::-;29384:22;29376:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29467:12;;29455:8;:24;;29447:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29527:61;29557:1;29561:2;29565:12;29579:8;29527:21;:61::i;:::-;29597:30;29630:12;:16;29643:2;29630:16;;;;;;;;;;;;;;;29597:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29672:119;;;;;;;;29722:8;29692:11;:19;;;:39;;;;:::i;:::-;29672:119;;;;;;29775:8;29740:11;:24;;;:44;;;;:::i;:::-;29672:119;;;;;29653:12;:16;29666:2;29653:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29826:43;;;;;;;;29841:2;29826:43;;;;;;29852:15;29826:43;;;;;29798:11;:25;29810:12;29798:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29878:20;29901:12;29878:35;;29927:9;29922:281;29946:8;29942:1;:12;29922:281;;;30000:12;29996:2;29975:38;;29992:1;29975:38;;;;;;;;;;;;30040:59;30071:1;30075:2;30079:12;30093:5;30040:22;:59::i;:::-;30022:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;30181:14;;;;;:::i;:::-;;;;29956:3;;;;;:::i;:::-;;;;29922:281;;;;30226:12;30211;:27;;;;30245:60;30274:1;30278:2;30282:12;30296:8;30245:20;:60::i;:::-;29137:1174;;;29039:1272;;;:::o;35045:141::-;;;;;:::o;35572:140::-;;;;;:::o;2486:387::-;2546:4;2754:12;2821:7;2809:20;2801:28;;2864:1;2857:4;:8;2850:15;;;2486:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:139::-;1959:5;1997:6;1984:20;1975:29;;2013:33;2040:5;2013:33;:::i;:::-;1913:139;;;;:::o;2075:370::-;2146:5;2195:3;2188:4;2180:6;2176:17;2172:27;2162:122;;2203:79;;:::i;:::-;2162:122;2320:6;2307:20;2345:94;2435:3;2427:6;2420:4;2412:6;2408:17;2345:94;:::i;:::-;2336:103;;2152:293;2075:370;;;;:::o;2468:::-;2539:5;2588:3;2581:4;2573:6;2569:17;2565:27;2555:122;;2596:79;;:::i;:::-;2555:122;2713:6;2700:20;2738:94;2828:3;2820:6;2813:4;2805:6;2801:17;2738:94;:::i;:::-;2729:103;;2545:293;2468:370;;;;:::o;2844:133::-;2887:5;2925:6;2912:20;2903:29;;2941:30;2965:5;2941:30;:::i;:::-;2844:133;;;;:::o;2983:137::-;3028:5;3066:6;3053:20;3044:29;;3082:32;3108:5;3082:32;:::i;:::-;2983:137;;;;:::o;3126:141::-;3182:5;3213:6;3207:13;3198:22;;3229:32;3255:5;3229:32;:::i;:::-;3126:141;;;;:::o;3286:338::-;3341:5;3390:3;3383:4;3375:6;3371:17;3367:27;3357:122;;3398:79;;:::i;:::-;3357:122;3515:6;3502:20;3540:78;3614:3;3606:6;3599:4;3591:6;3587:17;3540:78;:::i;:::-;3531:87;;3347:277;3286:338;;;;:::o;3644:553::-;3702:8;3712:6;3762:3;3755:4;3747:6;3743:17;3739:27;3729:122;;3770:79;;:::i;:::-;3729:122;3883:6;3870:20;3860:30;;3913:18;3905:6;3902:30;3899:117;;;3935:79;;:::i;:::-;3899:117;4049:4;4041:6;4037:17;4025:29;;4103:3;4095:4;4087:6;4083:17;4073:8;4069:32;4066:41;4063:128;;;4110:79;;:::i;:::-;4063:128;3644:553;;;;;:::o;4203:139::-;4249:5;4287:6;4274:20;4265:29;;4303:33;4330:5;4303:33;:::i;:::-;4203:139;;;;:::o;4348:329::-;4407:6;4456:2;4444:9;4435:7;4431:23;4427:32;4424:119;;;4462:79;;:::i;:::-;4424:119;4582:1;4607:53;4652:7;4643:6;4632:9;4628:22;4607:53;:::i;:::-;4597:63;;4553:117;4348:329;;;;:::o;4683:474::-;4751:6;4759;4808:2;4796:9;4787:7;4783:23;4779:32;4776:119;;;4814:79;;:::i;:::-;4776:119;4934:1;4959:53;5004:7;4995:6;4984:9;4980:22;4959:53;:::i;:::-;4949:63;;4905:117;5061:2;5087:53;5132:7;5123:6;5112:9;5108:22;5087:53;:::i;:::-;5077:63;;5032:118;4683:474;;;;;:::o;5163:619::-;5240:6;5248;5256;5305:2;5293:9;5284:7;5280:23;5276:32;5273:119;;;5311:79;;:::i;:::-;5273:119;5431:1;5456:53;5501:7;5492:6;5481:9;5477:22;5456:53;:::i;:::-;5446:63;;5402:117;5558:2;5584:53;5629:7;5620:6;5609:9;5605:22;5584:53;:::i;:::-;5574:63;;5529:118;5686:2;5712:53;5757:7;5748:6;5737:9;5733:22;5712:53;:::i;:::-;5702:63;;5657:118;5163:619;;;;;:::o;5788:943::-;5883:6;5891;5899;5907;5956:3;5944:9;5935:7;5931:23;5927:33;5924:120;;;5963:79;;:::i;:::-;5924:120;6083:1;6108:53;6153:7;6144:6;6133:9;6129:22;6108:53;:::i;:::-;6098:63;;6054:117;6210:2;6236:53;6281:7;6272:6;6261:9;6257:22;6236:53;:::i;:::-;6226:63;;6181:118;6338:2;6364:53;6409:7;6400:6;6389:9;6385:22;6364:53;:::i;:::-;6354:63;;6309:118;6494:2;6483:9;6479:18;6466:32;6525:18;6517:6;6514:30;6511:117;;;6547:79;;:::i;:::-;6511:117;6652:62;6706:7;6697:6;6686:9;6682:22;6652:62;:::i;:::-;6642:72;;6437:287;5788:943;;;;;;;:::o;6737:468::-;6802:6;6810;6859:2;6847:9;6838:7;6834:23;6830:32;6827:119;;;6865:79;;:::i;:::-;6827:119;6985:1;7010:53;7055:7;7046:6;7035:9;7031:22;7010:53;:::i;:::-;7000:63;;6956:117;7112:2;7138:50;7180:7;7171:6;7160:9;7156:22;7138:50;:::i;:::-;7128:60;;7083:115;6737:468;;;;;:::o;7211:474::-;7279:6;7287;7336:2;7324:9;7315:7;7311:23;7307:32;7304:119;;;7342:79;;:::i;:::-;7304:119;7462:1;7487:53;7532:7;7523:6;7512:9;7508:22;7487:53;:::i;:::-;7477:63;;7433:117;7589:2;7615:53;7660:7;7651:6;7640:9;7636:22;7615:53;:::i;:::-;7605:63;;7560:118;7211:474;;;;;:::o;7691:894::-;7809:6;7817;7866:2;7854:9;7845:7;7841:23;7837:32;7834:119;;;7872:79;;:::i;:::-;7834:119;8020:1;8009:9;8005:17;7992:31;8050:18;8042:6;8039:30;8036:117;;;8072:79;;:::i;:::-;8036:117;8177:78;8247:7;8238:6;8227:9;8223:22;8177:78;:::i;:::-;8167:88;;7963:302;8332:2;8321:9;8317:18;8304:32;8363:18;8355:6;8352:30;8349:117;;;8385:79;;:::i;:::-;8349:117;8490:78;8560:7;8551:6;8540:9;8536:22;8490:78;:::i;:::-;8480:88;;8275:303;7691:894;;;;;:::o;8591:327::-;8649:6;8698:2;8686:9;8677:7;8673:23;8669:32;8666:119;;;8704:79;;:::i;:::-;8666:119;8824:1;8849:52;8893:7;8884:6;8873:9;8869:22;8849:52;:::i;:::-;8839:62;;8795:116;8591:327;;;;:::o;8924:349::-;8993:6;9042:2;9030:9;9021:7;9017:23;9013:32;9010:119;;;9048:79;;:::i;:::-;9010:119;9168:1;9193:63;9248:7;9239:6;9228:9;9224:22;9193:63;:::i;:::-;9183:73;;9139:127;8924:349;;;;:::o;9279:529::-;9350:6;9358;9407:2;9395:9;9386:7;9382:23;9378:32;9375:119;;;9413:79;;:::i;:::-;9375:119;9561:1;9550:9;9546:17;9533:31;9591:18;9583:6;9580:30;9577:117;;;9613:79;;:::i;:::-;9577:117;9726:65;9783:7;9774:6;9763:9;9759:22;9726:65;:::i;:::-;9708:83;;;;9504:297;9279:529;;;;;:::o;9814:329::-;9873:6;9922:2;9910:9;9901:7;9897:23;9893:32;9890:119;;;9928:79;;:::i;:::-;9890:119;10048:1;10073:53;10118:7;10109:6;10098:9;10094:22;10073:53;:::i;:::-;10063:63;;10019:117;9814:329;;;;:::o;10149:108::-;10226:24;10244:5;10226:24;:::i;:::-;10221:3;10214:37;10149:108;;:::o;10263:118::-;10350:24;10368:5;10350:24;:::i;:::-;10345:3;10338:37;10263:118;;:::o;10387:109::-;10468:21;10483:5;10468:21;:::i;:::-;10463:3;10456:34;10387:109;;:::o;10502:360::-;10588:3;10616:38;10648:5;10616:38;:::i;:::-;10670:70;10733:6;10728:3;10670:70;:::i;:::-;10663:77;;10749:52;10794:6;10789:3;10782:4;10775:5;10771:16;10749:52;:::i;:::-;10826:29;10848:6;10826:29;:::i;:::-;10821:3;10817:39;10810:46;;10592:270;10502:360;;;;:::o;10868:364::-;10956:3;10984:39;11017:5;10984:39;:::i;:::-;11039:71;11103:6;11098:3;11039:71;:::i;:::-;11032:78;;11119:52;11164:6;11159:3;11152:4;11145:5;11141:16;11119:52;:::i;:::-;11196:29;11218:6;11196:29;:::i;:::-;11191:3;11187:39;11180:46;;10960:272;10868:364;;;;:::o;11238:377::-;11344:3;11372:39;11405:5;11372:39;:::i;:::-;11427:89;11509:6;11504:3;11427:89;:::i;:::-;11420:96;;11525:52;11570:6;11565:3;11558:4;11551:5;11547:16;11525:52;:::i;:::-;11602:6;11597:3;11593:16;11586:23;;11348:267;11238:377;;;;:::o;11621:366::-;11763:3;11784:67;11848:2;11843:3;11784:67;:::i;:::-;11777:74;;11860:93;11949:3;11860:93;:::i;:::-;11978:2;11973:3;11969:12;11962:19;;11621:366;;;:::o;11993:::-;12135:3;12156:67;12220:2;12215:3;12156:67;:::i;:::-;12149:74;;12232:93;12321:3;12232:93;:::i;:::-;12350:2;12345:3;12341:12;12334:19;;11993:366;;;:::o;12365:::-;12507:3;12528:67;12592:2;12587:3;12528:67;:::i;:::-;12521:74;;12604:93;12693:3;12604:93;:::i;:::-;12722:2;12717:3;12713:12;12706:19;;12365:366;;;:::o;12737:::-;12879:3;12900:67;12964:2;12959:3;12900:67;:::i;:::-;12893:74;;12976:93;13065:3;12976:93;:::i;:::-;13094:2;13089:3;13085:12;13078:19;;12737:366;;;:::o;13109:::-;13251:3;13272:67;13336:2;13331:3;13272:67;:::i;:::-;13265:74;;13348:93;13437:3;13348:93;:::i;:::-;13466:2;13461:3;13457:12;13450:19;;13109:366;;;:::o;13481:::-;13623:3;13644:67;13708:2;13703:3;13644:67;:::i;:::-;13637:74;;13720:93;13809:3;13720:93;:::i;:::-;13838:2;13833:3;13829:12;13822:19;;13481:366;;;:::o;13853:::-;13995:3;14016:67;14080:2;14075:3;14016:67;:::i;:::-;14009:74;;14092:93;14181:3;14092:93;:::i;:::-;14210:2;14205:3;14201:12;14194:19;;13853:366;;;:::o;14225:::-;14367:3;14388:67;14452:2;14447:3;14388:67;:::i;:::-;14381:74;;14464:93;14553:3;14464:93;:::i;:::-;14582:2;14577:3;14573:12;14566:19;;14225:366;;;:::o;14597:::-;14739:3;14760:67;14824:2;14819:3;14760:67;:::i;:::-;14753:74;;14836:93;14925:3;14836:93;:::i;:::-;14954:2;14949:3;14945:12;14938:19;;14597:366;;;:::o;14969:::-;15111:3;15132:67;15196:2;15191:3;15132:67;:::i;:::-;15125:74;;15208:93;15297:3;15208:93;:::i;:::-;15326:2;15321:3;15317:12;15310:19;;14969:366;;;:::o;15341:::-;15483:3;15504:67;15568:2;15563:3;15504:67;:::i;:::-;15497:74;;15580:93;15669:3;15580:93;:::i;:::-;15698:2;15693:3;15689:12;15682:19;;15341:366;;;:::o;15713:::-;15855:3;15876:67;15940:2;15935:3;15876:67;:::i;:::-;15869:74;;15952:93;16041:3;15952:93;:::i;:::-;16070:2;16065:3;16061:12;16054:19;;15713:366;;;:::o;16085:::-;16227:3;16248:67;16312:2;16307:3;16248:67;:::i;:::-;16241:74;;16324:93;16413:3;16324:93;:::i;:::-;16442:2;16437:3;16433:12;16426:19;;16085:366;;;:::o;16457:400::-;16617:3;16638:84;16720:1;16715:3;16638:84;:::i;:::-;16631:91;;16731:93;16820:3;16731:93;:::i;:::-;16849:1;16844:3;16840:11;16833:18;;16457:400;;;:::o;16863:366::-;17005:3;17026:67;17090:2;17085:3;17026:67;:::i;:::-;17019:74;;17102:93;17191:3;17102:93;:::i;:::-;17220:2;17215:3;17211:12;17204:19;;16863:366;;;:::o;17235:::-;17377:3;17398:67;17462:2;17457:3;17398:67;:::i;:::-;17391:74;;17474:93;17563:3;17474:93;:::i;:::-;17592:2;17587:3;17583:12;17576:19;;17235:366;;;:::o;17607:::-;17749:3;17770:67;17834:2;17829:3;17770:67;:::i;:::-;17763:74;;17846:93;17935:3;17846:93;:::i;:::-;17964:2;17959:3;17955:12;17948:19;;17607:366;;;:::o;17979:::-;18121:3;18142:67;18206:2;18201:3;18142:67;:::i;:::-;18135:74;;18218:93;18307:3;18218:93;:::i;:::-;18336:2;18331:3;18327:12;18320:19;;17979:366;;;:::o;18351:::-;18493:3;18514:67;18578:2;18573:3;18514:67;:::i;:::-;18507:74;;18590:93;18679:3;18590:93;:::i;:::-;18708:2;18703:3;18699:12;18692:19;;18351:366;;;:::o;18723:398::-;18882:3;18903:83;18984:1;18979:3;18903:83;:::i;:::-;18896:90;;18995:93;19084:3;18995:93;:::i;:::-;19113:1;19108:3;19104:11;19097:18;;18723:398;;;:::o;19127:366::-;19269:3;19290:67;19354:2;19349:3;19290:67;:::i;:::-;19283:74;;19366:93;19455:3;19366:93;:::i;:::-;19484:2;19479:3;19475:12;19468:19;;19127:366;;;:::o;19499:::-;19641:3;19662:67;19726:2;19721:3;19662:67;:::i;:::-;19655:74;;19738:93;19827:3;19738:93;:::i;:::-;19856:2;19851:3;19847:12;19840:19;;19499:366;;;:::o;19871:::-;20013:3;20034:67;20098:2;20093:3;20034:67;:::i;:::-;20027:74;;20110:93;20199:3;20110:93;:::i;:::-;20228:2;20223:3;20219:12;20212:19;;19871:366;;;:::o;20243:::-;20385:3;20406:67;20470:2;20465:3;20406:67;:::i;:::-;20399:74;;20482:93;20571:3;20482:93;:::i;:::-;20600:2;20595:3;20591:12;20584:19;;20243:366;;;:::o;20615:::-;20757:3;20778:67;20842:2;20837:3;20778:67;:::i;:::-;20771:74;;20854:93;20943:3;20854:93;:::i;:::-;20972:2;20967:3;20963:12;20956:19;;20615:366;;;:::o;20987:::-;21129:3;21150:67;21214:2;21209:3;21150:67;:::i;:::-;21143:74;;21226:93;21315:3;21226:93;:::i;:::-;21344:2;21339:3;21335:12;21328:19;;20987:366;;;:::o;21359:::-;21501:3;21522:67;21586:2;21581:3;21522:67;:::i;:::-;21515:74;;21598:93;21687:3;21598:93;:::i;:::-;21716:2;21711:3;21707:12;21700:19;;21359:366;;;:::o;21731:::-;21873:3;21894:67;21958:2;21953:3;21894:67;:::i;:::-;21887:74;;21970:93;22059:3;21970:93;:::i;:::-;22088:2;22083:3;22079:12;22072:19;;21731:366;;;:::o;22103:::-;22245:3;22266:67;22330:2;22325:3;22266:67;:::i;:::-;22259:74;;22342:93;22431:3;22342:93;:::i;:::-;22460:2;22455:3;22451:12;22444:19;;22103:366;;;:::o;22475:::-;22617:3;22638:67;22702:2;22697:3;22638:67;:::i;:::-;22631:74;;22714:93;22803:3;22714:93;:::i;:::-;22832:2;22827:3;22823:12;22816:19;;22475:366;;;:::o;22847:::-;22989:3;23010:67;23074:2;23069:3;23010:67;:::i;:::-;23003:74;;23086:93;23175:3;23086:93;:::i;:::-;23204:2;23199:3;23195:12;23188:19;;22847:366;;;:::o;23219:::-;23361:3;23382:67;23446:2;23441:3;23382:67;:::i;:::-;23375:74;;23458:93;23547:3;23458:93;:::i;:::-;23576:2;23571:3;23567:12;23560:19;;23219:366;;;:::o;23661:527::-;23820:4;23815:3;23811:14;23907:4;23900:5;23896:16;23890:23;23926:63;23983:4;23978:3;23974:14;23960:12;23926:63;:::i;:::-;23835:164;24091:4;24084:5;24080:16;24074:23;24110:61;24165:4;24160:3;24156:14;24142:12;24110:61;:::i;:::-;24009:172;23789:399;23661:527;;:::o;24194:118::-;24281:24;24299:5;24281:24;:::i;:::-;24276:3;24269:37;24194:118;;:::o;24318:105::-;24393:23;24410:5;24393:23;:::i;:::-;24388:3;24381:36;24318:105;;:::o;24429:115::-;24514:23;24531:5;24514:23;:::i;:::-;24509:3;24502:36;24429:115;;:::o;24550:701::-;24831:3;24853:95;24944:3;24935:6;24853:95;:::i;:::-;24846:102;;24965:95;25056:3;25047:6;24965:95;:::i;:::-;24958:102;;25077:148;25221:3;25077:148;:::i;:::-;25070:155;;25242:3;25235:10;;24550:701;;;;;:::o;25257:379::-;25441:3;25463:147;25606:3;25463:147;:::i;:::-;25456:154;;25627:3;25620:10;;25257:379;;;:::o;25642:222::-;25735:4;25773:2;25762:9;25758:18;25750:26;;25786:71;25854:1;25843:9;25839:17;25830:6;25786:71;:::i;:::-;25642:222;;;;:::o;25870:640::-;26065:4;26103:3;26092:9;26088:19;26080:27;;26117:71;26185:1;26174:9;26170:17;26161:6;26117:71;:::i;:::-;26198:72;26266:2;26255:9;26251:18;26242:6;26198:72;:::i;:::-;26280;26348:2;26337:9;26333:18;26324:6;26280:72;:::i;:::-;26399:9;26393:4;26389:20;26384:2;26373:9;26369:18;26362:48;26427:76;26498:4;26489:6;26427:76;:::i;:::-;26419:84;;25870:640;;;;;;;:::o;26516:210::-;26603:4;26641:2;26630:9;26626:18;26618:26;;26654:65;26716:1;26705:9;26701:17;26692:6;26654:65;:::i;:::-;26516:210;;;;:::o;26732:313::-;26845:4;26883:2;26872:9;26868:18;26860:26;;26932:9;26926:4;26922:20;26918:1;26907:9;26903:17;26896:47;26960:78;27033:4;27024:6;26960:78;:::i;:::-;26952:86;;26732:313;;;;:::o;27051:419::-;27217:4;27255:2;27244:9;27240:18;27232:26;;27304:9;27298:4;27294:20;27290:1;27279:9;27275:17;27268:47;27332:131;27458:4;27332:131;:::i;:::-;27324:139;;27051:419;;;:::o;27476:::-;27642:4;27680:2;27669:9;27665:18;27657:26;;27729:9;27723:4;27719:20;27715:1;27704:9;27700:17;27693:47;27757:131;27883:4;27757:131;:::i;:::-;27749:139;;27476:419;;;:::o;27901:::-;28067:4;28105:2;28094:9;28090:18;28082:26;;28154:9;28148:4;28144:20;28140:1;28129:9;28125:17;28118:47;28182:131;28308:4;28182:131;:::i;:::-;28174:139;;27901:419;;;:::o;28326:::-;28492:4;28530:2;28519:9;28515:18;28507:26;;28579:9;28573:4;28569:20;28565:1;28554:9;28550:17;28543:47;28607:131;28733:4;28607:131;:::i;:::-;28599:139;;28326:419;;;:::o;28751:::-;28917:4;28955:2;28944:9;28940:18;28932:26;;29004:9;28998:4;28994:20;28990:1;28979:9;28975:17;28968:47;29032:131;29158:4;29032:131;:::i;:::-;29024:139;;28751:419;;;:::o;29176:::-;29342:4;29380:2;29369:9;29365:18;29357:26;;29429:9;29423:4;29419:20;29415:1;29404:9;29400:17;29393:47;29457:131;29583:4;29457:131;:::i;:::-;29449:139;;29176:419;;;:::o;29601:::-;29767:4;29805:2;29794:9;29790:18;29782:26;;29854:9;29848:4;29844:20;29840:1;29829:9;29825:17;29818:47;29882:131;30008:4;29882:131;:::i;:::-;29874:139;;29601:419;;;:::o;30026:::-;30192:4;30230:2;30219:9;30215:18;30207:26;;30279:9;30273:4;30269:20;30265:1;30254:9;30250:17;30243:47;30307:131;30433:4;30307:131;:::i;:::-;30299:139;;30026:419;;;:::o;30451:::-;30617:4;30655:2;30644:9;30640:18;30632:26;;30704:9;30698:4;30694:20;30690:1;30679:9;30675:17;30668:47;30732:131;30858:4;30732:131;:::i;:::-;30724:139;;30451:419;;;:::o;30876:::-;31042:4;31080:2;31069:9;31065:18;31057:26;;31129:9;31123:4;31119:20;31115:1;31104:9;31100:17;31093:47;31157:131;31283:4;31157:131;:::i;:::-;31149:139;;30876:419;;;:::o;31301:::-;31467:4;31505:2;31494:9;31490:18;31482:26;;31554:9;31548:4;31544:20;31540:1;31529:9;31525:17;31518:47;31582:131;31708:4;31582:131;:::i;:::-;31574:139;;31301:419;;;:::o;31726:::-;31892:4;31930:2;31919:9;31915:18;31907:26;;31979:9;31973:4;31969:20;31965:1;31954:9;31950:17;31943:47;32007:131;32133:4;32007:131;:::i;:::-;31999:139;;31726:419;;;:::o;32151:::-;32317:4;32355:2;32344:9;32340:18;32332:26;;32404:9;32398:4;32394:20;32390:1;32379:9;32375:17;32368:47;32432:131;32558:4;32432:131;:::i;:::-;32424:139;;32151:419;;;:::o;32576:::-;32742:4;32780:2;32769:9;32765:18;32757:26;;32829:9;32823:4;32819:20;32815:1;32804:9;32800:17;32793:47;32857:131;32983:4;32857:131;:::i;:::-;32849:139;;32576:419;;;:::o;33001:::-;33167:4;33205:2;33194:9;33190:18;33182:26;;33254:9;33248:4;33244:20;33240:1;33229:9;33225:17;33218:47;33282:131;33408:4;33282:131;:::i;:::-;33274:139;;33001:419;;;:::o;33426:::-;33592:4;33630:2;33619:9;33615:18;33607:26;;33679:9;33673:4;33669:20;33665:1;33654:9;33650:17;33643:47;33707:131;33833:4;33707:131;:::i;:::-;33699:139;;33426:419;;;:::o;33851:::-;34017:4;34055:2;34044:9;34040:18;34032:26;;34104:9;34098:4;34094:20;34090:1;34079:9;34075:17;34068:47;34132:131;34258:4;34132:131;:::i;:::-;34124:139;;33851:419;;;:::o;34276:::-;34442:4;34480:2;34469:9;34465:18;34457:26;;34529:9;34523:4;34519:20;34515:1;34504:9;34500:17;34493:47;34557:131;34683:4;34557:131;:::i;:::-;34549:139;;34276:419;;;:::o;34701:::-;34867:4;34905:2;34894:9;34890:18;34882:26;;34954:9;34948:4;34944:20;34940:1;34929:9;34925:17;34918:47;34982:131;35108:4;34982:131;:::i;:::-;34974:139;;34701:419;;;:::o;35126:::-;35292:4;35330:2;35319:9;35315:18;35307:26;;35379:9;35373:4;35369:20;35365:1;35354:9;35350:17;35343:47;35407:131;35533:4;35407:131;:::i;:::-;35399:139;;35126:419;;;:::o;35551:::-;35717:4;35755:2;35744:9;35740:18;35732:26;;35804:9;35798:4;35794:20;35790:1;35779:9;35775:17;35768:47;35832:131;35958:4;35832:131;:::i;:::-;35824:139;;35551:419;;;:::o;35976:::-;36142:4;36180:2;36169:9;36165:18;36157:26;;36229:9;36223:4;36219:20;36215:1;36204:9;36200:17;36193:47;36257:131;36383:4;36257:131;:::i;:::-;36249:139;;35976:419;;;:::o;36401:::-;36567:4;36605:2;36594:9;36590:18;36582:26;;36654:9;36648:4;36644:20;36640:1;36629:9;36625:17;36618:47;36682:131;36808:4;36682:131;:::i;:::-;36674:139;;36401:419;;;:::o;36826:::-;36992:4;37030:2;37019:9;37015:18;37007:26;;37079:9;37073:4;37069:20;37065:1;37054:9;37050:17;37043:47;37107:131;37233:4;37107:131;:::i;:::-;37099:139;;36826:419;;;:::o;37251:::-;37417:4;37455:2;37444:9;37440:18;37432:26;;37504:9;37498:4;37494:20;37490:1;37479:9;37475:17;37468:47;37532:131;37658:4;37532:131;:::i;:::-;37524:139;;37251:419;;;:::o;37676:::-;37842:4;37880:2;37869:9;37865:18;37857:26;;37929:9;37923:4;37919:20;37915:1;37904:9;37900:17;37893:47;37957:131;38083:4;37957:131;:::i;:::-;37949:139;;37676:419;;;:::o;38101:::-;38267:4;38305:2;38294:9;38290:18;38282:26;;38354:9;38348:4;38344:20;38340:1;38329:9;38325:17;38318:47;38382:131;38508:4;38382:131;:::i;:::-;38374:139;;38101:419;;;:::o;38526:::-;38692:4;38730:2;38719:9;38715:18;38707:26;;38779:9;38773:4;38769:20;38765:1;38754:9;38750:17;38743:47;38807:131;38933:4;38807:131;:::i;:::-;38799:139;;38526:419;;;:::o;38951:::-;39117:4;39155:2;39144:9;39140:18;39132:26;;39204:9;39198:4;39194:20;39190:1;39179:9;39175:17;39168:47;39232:131;39358:4;39232:131;:::i;:::-;39224:139;;38951:419;;;:::o;39376:::-;39542:4;39580:2;39569:9;39565:18;39557:26;;39629:9;39623:4;39619:20;39615:1;39604:9;39600:17;39593:47;39657:131;39783:4;39657:131;:::i;:::-;39649:139;;39376:419;;;:::o;39801:346::-;39956:4;39994:2;39983:9;39979:18;39971:26;;40007:133;40137:1;40126:9;40122:17;40113:6;40007:133;:::i;:::-;39801:346;;;;:::o;40153:222::-;40246:4;40284:2;40273:9;40269:18;40261:26;;40297:71;40365:1;40354:9;40350:17;40341:6;40297:71;:::i;:::-;40153:222;;;;:::o;40381:218::-;40472:4;40510:2;40499:9;40495:18;40487:26;;40523:69;40589:1;40578:9;40574:17;40565:6;40523:69;:::i;:::-;40381:218;;;;:::o;40605:129::-;40639:6;40666:20;;:::i;:::-;40656:30;;40695:33;40723:4;40715:6;40695:33;:::i;:::-;40605:129;;;:::o;40740:75::-;40773:6;40806:2;40800:9;40790:19;;40740:75;:::o;40821:311::-;40898:4;40988:18;40980:6;40977:30;40974:56;;;41010:18;;:::i;:::-;40974:56;41060:4;41052:6;41048:17;41040:25;;41120:4;41114;41110:15;41102:23;;40821:311;;;:::o;41138:::-;41215:4;41305:18;41297:6;41294:30;41291:56;;;41327:18;;:::i;:::-;41291:56;41377:4;41369:6;41365:17;41357:25;;41437:4;41431;41427:15;41419:23;;41138:311;;;:::o;41455:307::-;41516:4;41606:18;41598:6;41595:30;41592:56;;;41628:18;;:::i;:::-;41592:56;41666:29;41688:6;41666:29;:::i;:::-;41658:37;;41750:4;41744;41740:15;41732:23;;41455:307;;;:::o;41768:98::-;41819:6;41853:5;41847:12;41837:22;;41768:98;;;:::o;41872:99::-;41924:6;41958:5;41952:12;41942:22;;41872:99;;;:::o;41977:168::-;42060:11;42094:6;42089:3;42082:19;42134:4;42129:3;42125:14;42110:29;;41977:168;;;;:::o;42151:147::-;42252:11;42289:3;42274:18;;42151:147;;;;:::o;42304:169::-;42388:11;42422:6;42417:3;42410:19;42462:4;42457:3;42453:14;42438:29;;42304:169;;;;:::o;42479:148::-;42581:11;42618:3;42603:18;;42479:148;;;;:::o;42633:273::-;42673:3;42692:20;42710:1;42692:20;:::i;:::-;42687:25;;42726:20;42744:1;42726:20;:::i;:::-;42721:25;;42848:1;42812:34;42808:42;42805:1;42802:49;42799:75;;;42854:18;;:::i;:::-;42799:75;42898:1;42895;42891:9;42884:16;;42633:273;;;;:::o;42912:305::-;42952:3;42971:20;42989:1;42971:20;:::i;:::-;42966:25;;43005:20;43023:1;43005:20;:::i;:::-;43000:25;;43159:1;43091:66;43087:74;43084:1;43081:81;43078:107;;;43165:18;;:::i;:::-;43078:107;43209:1;43206;43202:9;43195:16;;42912:305;;;;:::o;43223:185::-;43263:1;43280:20;43298:1;43280:20;:::i;:::-;43275:25;;43314:20;43332:1;43314:20;:::i;:::-;43309:25;;43353:1;43343:35;;43358:18;;:::i;:::-;43343:35;43400:1;43397;43393:9;43388:14;;43223:185;;;;:::o;43414:191::-;43454:4;43474:20;43492:1;43474:20;:::i;:::-;43469:25;;43508:20;43526:1;43508:20;:::i;:::-;43503:25;;43547:1;43544;43541:8;43538:34;;;43552:18;;:::i;:::-;43538:34;43597:1;43594;43590:9;43582:17;;43414:191;;;;:::o;43611:::-;43651:4;43671:20;43689:1;43671:20;:::i;:::-;43666:25;;43705:20;43723:1;43705:20;:::i;:::-;43700:25;;43744:1;43741;43738:8;43735:34;;;43749:18;;:::i;:::-;43735:34;43794:1;43791;43787:9;43779:17;;43611:191;;;;:::o;43808:96::-;43845:7;43874:24;43892:5;43874:24;:::i;:::-;43863:35;;43808:96;;;:::o;43910:90::-;43944:7;43987:5;43980:13;43973:21;43962:32;;43910:90;;;:::o;44006:149::-;44042:7;44082:66;44075:5;44071:78;44060:89;;44006:149;;;:::o;44161:118::-;44198:7;44238:34;44231:5;44227:46;44216:57;;44161:118;;;:::o;44285:126::-;44322:7;44362:42;44355:5;44351:54;44340:65;;44285:126;;;:::o;44417:77::-;44454:7;44483:5;44472:16;;44417:77;;;:::o;44500:101::-;44536:7;44576:18;44569:5;44565:30;44554:41;;44500:101;;;:::o;44607:154::-;44691:6;44686:3;44681;44668:30;44753:1;44744:6;44739:3;44735:16;44728:27;44607:154;;;:::o;44767:307::-;44835:1;44845:113;44859:6;44856:1;44853:13;44845:113;;;44944:1;44939:3;44935:11;44929:18;44925:1;44920:3;44916:11;44909:39;44881:2;44878:1;44874:10;44869:15;;44845:113;;;44976:6;44973:1;44970:13;44967:101;;;45056:1;45047:6;45042:3;45038:16;45031:27;44967:101;44816:258;44767:307;;;:::o;45080:171::-;45119:3;45142:24;45160:5;45142:24;:::i;:::-;45133:33;;45188:4;45181:5;45178:15;45175:41;;;45196:18;;:::i;:::-;45175:41;45243:1;45236:5;45232:13;45225:20;;45080:171;;;:::o;45257:320::-;45301:6;45338:1;45332:4;45328:12;45318:22;;45385:1;45379:4;45375:12;45406:18;45396:81;;45462:4;45454:6;45450:17;45440:27;;45396:81;45524:2;45516:6;45513:14;45493:18;45490:38;45487:84;;;45543:18;;:::i;:::-;45487:84;45308:269;45257:320;;;:::o;45583:281::-;45666:27;45688:4;45666:27;:::i;:::-;45658:6;45654:40;45796:6;45784:10;45781:22;45760:18;45748:10;45745:34;45742:62;45739:88;;;45807:18;;:::i;:::-;45739:88;45847:10;45843:2;45836:22;45626:238;45583:281;;:::o;45870:233::-;45909:3;45932:24;45950:5;45932:24;:::i;:::-;45923:33;;45978:66;45971:5;45968:77;45965:103;;;46048:18;;:::i;:::-;45965:103;46095:1;46088:5;46084:13;46077:20;;45870:233;;;:::o;46109:176::-;46141:1;46158:20;46176:1;46158:20;:::i;:::-;46153:25;;46192:20;46210:1;46192:20;:::i;:::-;46187:25;;46231:1;46221:35;;46236:18;;:::i;:::-;46221:35;46277:1;46274;46270:9;46265:14;;46109:176;;;;:::o;46291:180::-;46339:77;46336:1;46329:88;46436:4;46433:1;46426:15;46460:4;46457:1;46450:15;46477:180;46525:77;46522:1;46515:88;46622:4;46619:1;46612:15;46646:4;46643:1;46636:15;46663:180;46711:77;46708:1;46701:88;46808:4;46805:1;46798:15;46832:4;46829:1;46822:15;46849:180;46897:77;46894:1;46887:88;46994:4;46991:1;46984:15;47018:4;47015:1;47008:15;47035:180;47083:77;47080:1;47073:88;47180:4;47177:1;47170:15;47204:4;47201:1;47194:15;47221:117;47330:1;47327;47320:12;47344:117;47453:1;47450;47443:12;47467:117;47576:1;47573;47566:12;47590:117;47699:1;47696;47689:12;47713:117;47822:1;47819;47812:12;47836:117;47945:1;47942;47935:12;47959:102;48000:6;48051:2;48047:7;48042:2;48035:5;48031:14;48027:28;48017:38;;47959:102;;;:::o;48067:221::-;48207:34;48203:1;48195:6;48191:14;48184:58;48276:4;48271:2;48263:6;48259:15;48252:29;48067:221;:::o;48294:173::-;48434:25;48430:1;48422:6;48418:14;48411:49;48294:173;:::o;48473:225::-;48613:34;48609:1;48601:6;48597:14;48590:58;48682:8;48677:2;48669:6;48665:15;48658:33;48473:225;:::o;48704:229::-;48844:34;48840:1;48832:6;48828:14;48821:58;48913:12;48908:2;48900:6;48896:15;48889:37;48704:229;:::o;48939:222::-;49079:34;49075:1;49067:6;49063:14;49056:58;49148:5;49143:2;49135:6;49131:15;49124:30;48939:222;:::o;49167:224::-;49307:34;49303:1;49295:6;49291:14;49284:58;49376:7;49371:2;49363:6;49359:15;49352:32;49167:224;:::o;49397:236::-;49537:34;49533:1;49525:6;49521:14;49514:58;49606:19;49601:2;49593:6;49589:15;49582:44;49397:236;:::o;49639:180::-;49779:32;49775:1;49767:6;49763:14;49756:56;49639:180;:::o;49825:244::-;49965:34;49961:1;49953:6;49949:14;49942:58;50034:27;50029:2;50021:6;50017:15;50010:52;49825:244;:::o;50075:174::-;50215:26;50211:1;50203:6;50199:14;50192:50;50075:174;:::o;50255:230::-;50395:34;50391:1;50383:6;50379:14;50372:58;50464:13;50459:2;50451:6;50447:15;50440:38;50255:230;:::o;50491:168::-;50631:20;50627:1;50619:6;50615:14;50608:44;50491:168;:::o;50665:225::-;50805:34;50801:1;50793:6;50789:14;50782:58;50874:8;50869:2;50861:6;50857:15;50850:33;50665:225;:::o;50896:155::-;51036:7;51032:1;51024:6;51020:14;51013:31;50896:155;:::o;51057:182::-;51197:34;51193:1;51185:6;51181:14;51174:58;51057:182;:::o;51245:234::-;51385:34;51381:1;51373:6;51369:14;51362:58;51454:17;51449:2;51441:6;51437:15;51430:42;51245:234;:::o;51485:176::-;51625:28;51621:1;51613:6;51609:14;51602:52;51485:176;:::o;51667:237::-;51807:34;51803:1;51795:6;51791:14;51784:58;51876:20;51871:2;51863:6;51859:15;51852:45;51667:237;:::o;51910:221::-;52050:34;52046:1;52038:6;52034:14;52027:58;52119:4;52114:2;52106:6;52102:15;52095:29;51910:221;:::o;52137:114::-;;:::o;52257:166::-;52397:18;52393:1;52385:6;52381:14;52374:42;52257:166;:::o;52429:238::-;52569:34;52565:1;52557:6;52553:14;52546:58;52638:21;52633:2;52625:6;52621:15;52614:46;52429:238;:::o;52673:172::-;52813:24;52809:1;52801:6;52797:14;52790:48;52673:172;:::o;52851:179::-;52991:31;52987:1;52979:6;52975:14;52968:55;52851:179;:::o;53036:220::-;53176:34;53172:1;53164:6;53160:14;53153:58;53245:3;53240:2;53232:6;53228:15;53221:28;53036:220;:::o;53262:233::-;53402:34;53398:1;53390:6;53386:14;53379:58;53471:16;53466:2;53458:6;53454:15;53447:41;53262:233;:::o;53501:225::-;53641:34;53637:1;53629:6;53625:14;53618:58;53710:8;53705:2;53697:6;53693:15;53686:33;53501:225;:::o;53732:181::-;53872:33;53868:1;53860:6;53856:14;53849:57;53732:181;:::o;53919:234::-;54059:34;54055:1;54047:6;54043:14;54036:58;54128:17;54123:2;54115:6;54111:15;54104:42;53919:234;:::o;54159:232::-;54299:34;54295:1;54287:6;54283:14;54276:58;54368:15;54363:2;54355:6;54351:15;54344:40;54159:232;:::o;54397:221::-;54537:34;54533:1;54525:6;54521:14;54514:58;54606:4;54601:2;54593:6;54589:15;54582:29;54397:221;:::o;54624:227::-;54764:34;54760:1;54752:6;54748:14;54741:58;54833:10;54828:2;54820:6;54816:15;54809:35;54624:227;:::o;54857:122::-;54930:24;54948:5;54930:24;:::i;:::-;54923:5;54920:35;54910:63;;54969:1;54966;54959:12;54910:63;54857:122;:::o;54985:116::-;55055:21;55070:5;55055:21;:::i;:::-;55048:5;55045:32;55035:60;;55091:1;55088;55081:12;55035:60;54985:116;:::o;55107:120::-;55179:23;55196:5;55179:23;:::i;:::-;55172:5;55169:34;55159:62;;55217:1;55214;55207:12;55159:62;55107:120;:::o;55233:122::-;55306:24;55324:5;55306:24;:::i;:::-;55299:5;55296:35;55286:63;;55345:1;55342;55335:12;55286:63;55233:122;:::o

Swarm Source

ipfs://8c03613fc1192beba309675eaedf59ee5448bfd428e0282581573ed49a81094a
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.