ETH Price: $3,380.37 (+0.70%)
 

Overview

Max Total Supply

3,889 SRAYC

Holders

117

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
20 SRAYC
0x71AD62e97D6e81b6cA51DB64a895ff11A8e4D2Ac
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:
SRAYC

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: contr.sol

/**
 *Submitted for verification at Etherscan.io on 2022-08-26
*/

// File: baby.sol

/**
 *Submitted for verification at Etherscan.io on 2022-08-11
*/

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

pragma solidity ^0.8.0;

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

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



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

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



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

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



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

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



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

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



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

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

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

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



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

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



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

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



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



/**
 * @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 immutable collectionSize;
  uint256 internal immutable maxBatchSize;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString(), ".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 {}
}

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



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

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

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

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

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

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

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

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

contract SRAYC is ERC721A, Ownable {

    string public baseURI = "https://gateway.pinata.cloud/ipfs/QmUeHJSBAw4P7jmHht6fvERw9y4kNV5sUMRdKjk8qDvyxv/";

    uint256 public tokenPrice = 4200000000000000; //0.0042 ETH

    uint public maxTokensPerTx = 100;

    uint public defaultTokensPerTx = 3;

    uint256 public MAX_TOKENS = 7001;

    bool public saleIsActive = true;

    uint256 public whitelistMintRemains = 1;

    // = 0 if there are all free
    // = maxTokensPerTx if there are all with fee
    uint public maxTokensWithFeePerTx = 10;

    enum TokenURIMode {
        MODE_ONE,
        MODE_TWO
    }

    TokenURIMode private tokenUriMode = TokenURIMode.MODE_ONE;

    constructor() ERC721A("SUPER RAYC", "SRAYC", 10001, MAX_TOKENS) {
    }


    struct HelperState {
        uint256 tokenPrice;
        uint256 maxTokensPerTx;
        uint256 MAX_TOKENS;
        bool saleIsActive;
        uint256 totalSupply;
        uint  maxTokensWithFeePerTx;
        uint256 userMinted;
        uint defaultTokensPerTx;
    }

    function _state(address minter) external view returns (HelperState memory) {
        return HelperState({
            tokenPrice: tokenPrice,
            maxTokensPerTx: maxTokensPerTx,
            MAX_TOKENS: MAX_TOKENS,
            saleIsActive: saleIsActive,
            totalSupply: uint256(totalSupply()),
            maxTokensWithFeePerTx : maxTokensWithFeePerTx,
            userMinted: minter == address(0) ? 0 : uint256(_numberMinted(minter)),
            defaultTokensPerTx : defaultTokensPerTx
        });
    }

    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    } 

    function withdrawTo(address to, uint256 amount) public onlyOwner {
        require(amount <= address(this).balance, "Exceed balance of this contract");
        payable(to).transfer(amount);
    } 

    function reserveTokens(address to, uint numberOfTokens) public onlyOwner {        
        require(totalSupply() + numberOfTokens <= MAX_TOKENS, "Exceed max supply of tokens");
        _safeMint(to, numberOfTokens);
    }         
    
    function setBaseURI(string memory newURI) public onlyOwner {
        baseURI = newURI;
    }    

    function flipSaleState() public onlyOwner {
        saleIsActive = !saleIsActive;
    }


    function getPrice(uint numberOfTokens, address minter) public view returns (uint256) {
        if(numberMinted(minter) > 0){
            return numberOfTokens * tokenPrice;
        } else if(numberOfTokens > maxTokensWithFeePerTx){
            return maxTokensWithFeePerTx * tokenPrice;
        } else if(numberOfTokens <= maxTokensWithFeePerTx){
            return numberOfTokens * tokenPrice;
        }
        return 0;
    }

    // if numberMinted(msg.sender) > 0 -> no whitelist, no free.
    function mintToken(uint numberOfTokens) public payable {
        require(saleIsActive, "Sale must be active");
        require(numberOfTokens <= maxTokensPerTx, "Exceed max tokens per tx");
        require(numberOfTokens > 0, "Must mint at least one");
        require(totalSupply() + numberOfTokens <= MAX_TOKENS, "Exceed max supply");
        
        if(whitelistMintRemains > 0 && numberMinted(msg.sender) <= 0){
            if(numberOfTokens >= whitelistMintRemains){
                numberOfTokens = whitelistMintRemains;
            }
            _safeMint(msg.sender, numberOfTokens);
            whitelistMintRemains = whitelistMintRemains - numberOfTokens;
        } else{
            if(_numberMinted(msg.sender) > 0){
                require(msg.value >= numberOfTokens * tokenPrice, "Not enough ether");
            } else  if(numberOfTokens > maxTokensWithFeePerTx){
                require(msg.value >= maxTokensWithFeePerTx * tokenPrice, "Not enough ether");
            } else if(numberOfTokens <= maxTokensWithFeePerTx){
                require(msg.value >= numberOfTokens * tokenPrice, "Not enough ether");
            }
            _safeMint(msg.sender, numberOfTokens);
        }
    }

    function setTokenPrice(uint256 newTokenPrice) public onlyOwner{
        tokenPrice = newTokenPrice;
    }

    function tokenURI(uint256 _tokenId) public view override returns (string memory) 
    {
        require(_exists(_tokenId), "Token does not exist.");
        if (tokenUriMode == TokenURIMode.MODE_TWO) {
          return bytes(baseURI).length > 0 ? string(
            abi.encodePacked(
              baseURI,
              Strings.toString(_tokenId)
            )
          ) : "";
        } else {
          return bytes(baseURI).length > 0 ? string(
            abi.encodePacked(
              baseURI,
              Strings.toString(_tokenId),
              ".json"
            )
          ) : "";
        }
    }

    function setTokenURIMode(uint256 mode) external onlyOwner {
        if (mode == 2) {
            tokenUriMode = TokenURIMode.MODE_TWO;
        } else {
            tokenUriMode = TokenURIMode.MODE_ONE;
        }
    }

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

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

    function setMaxSupply(uint256 _maxSupply) public onlyOwner {
      MAX_TOKENS = _maxSupply;
    }

    function setMaxTokensPerTx(uint _maxTokensPerTx) public onlyOwner{
        maxTokensPerTx = _maxTokensPerTx;
    }

    function setMaxTokensWithFeePerTx(uint _maxTokensWithFeePerTx) public onlyOwner{
        maxTokensWithFeePerTx = _maxTokensWithFeePerTx;
    }

    function setDefaultTokensPerTx(uint _defaultTokensPerTx) public onlyOwner{
        defaultTokensPerTx = _defaultTokensPerTx;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"_state","outputs":[{"components":[{"internalType":"uint256","name":"tokenPrice","type":"uint256"},{"internalType":"uint256","name":"maxTokensPerTx","type":"uint256"},{"internalType":"uint256","name":"MAX_TOKENS","type":"uint256"},{"internalType":"bool","name":"saleIsActive","type":"bool"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"maxTokensWithFeePerTx","type":"uint256"},{"internalType":"uint256","name":"userMinted","type":"uint256"},{"internalType":"uint256","name":"defaultTokensPerTx","type":"uint256"}],"internalType":"struct SRAYC.HelperState","name":"","type":"tuple"}],"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultTokensPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"address","name":"minter","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"maxTokensPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensWithFeePerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"reserveTokens","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":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_defaultTokensPerTx","type":"uint256"}],"name":"setDefaultTokensPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTokensPerTx","type":"uint256"}],"name":"setMaxTokensPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTokensWithFeePerTx","type":"uint256"}],"name":"setMaxTokensWithFeePerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTokenPrice","type":"uint256"}],"name":"setTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mode","type":"uint256"}],"name":"setTokenURIMode","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":[],"name":"tokenPrice","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":"whitelistMintRemains","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTo","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526000805560006007556040518060800160405280605181526020016200589d60519139600990805190602001906200003e929190620002f3565b50660eebe0b40e8000600a556064600b556003600c55611b59600d556001600e60006101000a81548160ff0219169083151502179055506001600f55600a6010556000601160006101000a81548160ff02191690836001811115620000a857620000a76200047c565b5b0217905550348015620000ba57600080fd5b506040518060400160405280600a81526020017f53555045522052415943000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f5352415943000000000000000000000000000000000000000000000000000000815250612711600d546000811162000173576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200016a9062000413565b60405180910390fd5b60008211620001b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001b090620003f1565b60405180910390fd5b8360019080519060200190620001d1929190620002f3565b508260029080519060200190620001ea929190620002f3565b508160a081815250508060808181525050505050506200021f620002136200022560201b60201c565b6200022d60201b60201c565b62000578565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003019062000446565b90600052602060002090601f01602090048101928262000325576000855562000371565b82601f106200034057805160ff191683800117855562000371565b8280016001018555821562000371579182015b828111156200037057825182559160200191906001019062000353565b5b50905062000380919062000384565b5090565b5b808211156200039f57600081600090555060010162000385565b5090565b6000620003b260278362000435565b9150620003bf82620004da565b604082019050919050565b6000620003d9602e8362000435565b9150620003e68262000529565b604082019050919050565b600060208201905081810360008301526200040c81620003a3565b9050919050565b600060208201905081810360008301526200042e81620003ca565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200045f57607f821691505b60208210811415620004765762000475620004ab565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a0516152f4620005a960003960008181612b3401528181612b5d015261318c0152600050506152f46000f3fe60806040526004361061025c5760003560e01c80636f8b44b011610144578063b88d4fde116100b6578063d7224ba01161007a578063d7224ba0146108d3578063dc33e681146108fe578063e985e9c51461093b578063eb8d244414610978578063f2fde38b146109a3578063f47c84c5146109cc5761025c565b8063b88d4fde146107fd578063b9bed05e14610826578063c634d0321461084f578063c87b56dd1461086b578063d0a04eac146108a85761025c565b806385c8cc741161010857806385c8cc74146107015780638da5cb5b1461072a5780638f69ae6f14610755578063900c71f51461078057806395d89b41146107a9578063a22cb465146107d45761025c565b80636f8b44b01461063057806370a0823114610659578063715018a61461069657806378cf19e9146106ad5780637ff9b596146106d65761025c565b80633ccfd60b116101dd57806355f804b3116101a157806355f804b3146105205780635e307a48146105495780636352211e14610574578063681c8bac146105b15780636a61e5fc146105dc5780636c0360eb146106055761025c565b80633ccfd60b1461043d57806342842e0e14610454578063495e1eba1461047d5780634df8bb45146104a65780634f6ccce7146104e35761025c565b8063205c287811610224578063205c28781461035a57806323b872dd146103835780632b57cfbb146103ac5780632f745c59146103e957806334918dfd146104265761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b31461030657806318160ddd1461032f575b600080fd5b34801561026d57600080fd5b50610288600480360381019061028391906139ed565b6109f7565b60405161029591906141bd565b60405180910390f35b3480156102aa57600080fd5b506102b3610b41565b6040516102c091906141d8565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb9190613a90565b610bd3565b6040516102fd9190614156565b60405180910390f35b34801561031257600080fd5b5061032d600480360381019061032891906139ad565b610c58565b005b34801561033b57600080fd5b50610344610d71565b6040516103519190614596565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c91906139ad565b610d7a565b005b34801561038f57600080fd5b506103aa60048036038101906103a59190613897565b610e84565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190613abd565b610e94565b6040516103e09190614596565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b91906139ad565b610f05565b60405161041d9190614596565b60405180910390f35b34801561043257600080fd5b5061043b611103565b005b34801561044957600080fd5b506104526111ab565b005b34801561046057600080fd5b5061047b60048036038101906104769190613897565b611276565b005b34801561048957600080fd5b506104a4600480360381019061049f9190613a90565b611296565b005b3480156104b257600080fd5b506104cd60048036038101906104c8919061382a565b61131c565b6040516104da919061457a565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190613a90565b6113cb565b6040516105179190614596565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190613a47565b61141e565b005b34801561055557600080fd5b5061055e6114b4565b60405161056b9190614596565b60405180910390f35b34801561058057600080fd5b5061059b60048036038101906105969190613a90565b6114ba565b6040516105a89190614156565b60405180910390f35b3480156105bd57600080fd5b506105c66114d0565b6040516105d39190614596565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe9190613a90565b6114d6565b005b34801561061157600080fd5b5061061a61155c565b60405161062791906141d8565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190613a90565b6115ea565b005b34801561066557600080fd5b50610680600480360381019061067b919061382a565b611670565b60405161068d9190614596565b60405180910390f35b3480156106a257600080fd5b506106ab611759565b005b3480156106b957600080fd5b506106d460048036038101906106cf91906139ad565b6117e1565b005b3480156106e257600080fd5b506106eb6118c2565b6040516106f89190614596565b60405180910390f35b34801561070d57600080fd5b5061072860048036038101906107239190613a90565b6118c8565b005b34801561073657600080fd5b5061073f61194e565b60405161074c9190614156565b60405180910390f35b34801561076157600080fd5b5061076a611978565b6040516107779190614596565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a29190613a90565b61197e565b005b3480156107b557600080fd5b506107be611a62565b6040516107cb91906141d8565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f6919061396d565b611af4565b005b34801561080957600080fd5b50610824600480360381019061081f91906138ea565b611c75565b005b34801561083257600080fd5b5061084d60048036038101906108489190613a90565b611cd1565b005b61086960048036038101906108649190613a90565b611d57565b005b34801561087757600080fd5b50610892600480360381019061088d9190613a90565b612008565b60405161089f91906141d8565b60405180910390f35b3480156108b457600080fd5b506108bd61214a565b6040516108ca9190614596565b60405180910390f35b3480156108df57600080fd5b506108e8612150565b6040516108f59190614596565b60405180910390f35b34801561090a57600080fd5b506109256004803603810190610920919061382a565b612156565b6040516109329190614596565b60405180910390f35b34801561094757600080fd5b50610962600480360381019061095d9190613857565b612168565b60405161096f91906141bd565b60405180910390f35b34801561098457600080fd5b5061098d6121fc565b60405161099a91906141bd565b60405180910390f35b3480156109af57600080fd5b506109ca60048036038101906109c5919061382a565b61220f565b005b3480156109d857600080fd5b506109e1612307565b6040516109ee9190614596565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ac257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b2a57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b3a5750610b398261230d565b5b9050919050565b606060018054610b509061491b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7c9061491b565b8015610bc95780601f10610b9e57610100808354040283529160200191610bc9565b820191906000526020600020905b815481529060010190602001808311610bac57829003601f168201915b5050505050905090565b6000610bde82612377565b610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c149061453a565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c63826114ba565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb9061445a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cf3612384565b73ffffffffffffffffffffffffffffffffffffffff161480610d225750610d2181610d1c612384565b612168565b5b610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d589061433a565b60405180910390fd5b610d6c83838361238c565b505050565b60008054905090565b610d82612384565b73ffffffffffffffffffffffffffffffffffffffff16610da061194e565b73ffffffffffffffffffffffffffffffffffffffff1614610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded9061431a565b60405180910390fd5b47811115610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061429a565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e7f573d6000803e3d6000fd5b505050565b610e8f83838361243e565b505050565b600080610ea083612156565b1115610ebb57600a5483610eb4919061475d565b9050610eff565b601054831115610edc57600a54601054610ed5919061475d565b9050610eff565b6010548311610efa57600a5483610ef3919061475d565b9050610eff565b600090505b92915050565b6000610f1083611670565b8210610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f48906141fa565b60405180910390fd5b6000610f5b610d71565b905060008060005b838110156110c1576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461105557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110ad578684141561109e5781955050505050506110fd565b83806110a99061497e565b9450505b5080806110b99061497e565b915050610f63565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f4906144da565b60405180910390fd5b92915050565b61110b612384565b73ffffffffffffffffffffffffffffffffffffffff1661112961194e565b73ffffffffffffffffffffffffffffffffffffffff161461117f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111769061431a565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6111b3612384565b73ffffffffffffffffffffffffffffffffffffffff166111d161194e565b73ffffffffffffffffffffffffffffffffffffffff1614611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121e9061431a565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611272573d6000803e3d6000fd5b5050565b61129183838360405180602001604052806000815250611c75565b505050565b61129e612384565b73ffffffffffffffffffffffffffffffffffffffff166112bc61194e565b73ffffffffffffffffffffffffffffffffffffffff1614611312576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113099061431a565b60405180910390fd5b80600c8190555050565b6113246135bd565b604051806101000160405280600a548152602001600b548152602001600d548152602001600e60009054906101000a900460ff1615158152602001611367610d71565b81526020016010548152602001600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146113b6576113b1846129f7565b6113b9565b60005b8152602001600c548152509050919050565b60006113d5610d71565b8210611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140d906142ba565b60405180910390fd5b819050919050565b611426612384565b73ffffffffffffffffffffffffffffffffffffffff1661144461194e565b73ffffffffffffffffffffffffffffffffffffffff161461149a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114919061431a565b60405180910390fd5b80600990805190602001906114b0929190613604565b5050565b600b5481565b60006114c582612ae0565b600001519050919050565b600c5481565b6114de612384565b73ffffffffffffffffffffffffffffffffffffffff166114fc61194e565b73ffffffffffffffffffffffffffffffffffffffff1614611552576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115499061431a565b60405180910390fd5b80600a8190555050565b600980546115699061491b565b80601f01602080910402602001604051908101604052809291908181526020018280546115959061491b565b80156115e25780601f106115b7576101008083540402835291602001916115e2565b820191906000526020600020905b8154815290600101906020018083116115c557829003601f168201915b505050505081565b6115f2612384565b73ffffffffffffffffffffffffffffffffffffffff1661161061194e565b73ffffffffffffffffffffffffffffffffffffffff1614611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d9061431a565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d89061437a565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611761612384565b73ffffffffffffffffffffffffffffffffffffffff1661177f61194e565b73ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc9061431a565b60405180910390fd5b6117df6000612ce3565b565b6117e9612384565b73ffffffffffffffffffffffffffffffffffffffff1661180761194e565b73ffffffffffffffffffffffffffffffffffffffff161461185d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118549061431a565b60405180910390fd5b600d5481611869610d71565b61187391906146d6565b11156118b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ab9061435a565b60405180910390fd5b6118be8282612da9565b5050565b600a5481565b6118d0612384565b73ffffffffffffffffffffffffffffffffffffffff166118ee61194e565b73ffffffffffffffffffffffffffffffffffffffff1614611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b9061431a565b60405180910390fd5b8060108190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b611986612384565b73ffffffffffffffffffffffffffffffffffffffff166119a461194e565b73ffffffffffffffffffffffffffffffffffffffff16146119fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f19061431a565b60405180910390fd5b6002811415611a33576001601160006101000a81548160ff02191690836001811115611a2957611a28614a56565b5b0217905550611a5f565b6000601160006101000a81548160ff02191690836001811115611a5957611a58614a56565b5b02179055505b50565b606060028054611a719061491b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9d9061491b565b8015611aea5780601f10611abf57610100808354040283529160200191611aea565b820191906000526020600020905b815481529060010190602001808311611acd57829003601f168201915b5050505050905090565b611afc612384565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b61906143fa565b60405180910390fd5b8060066000611b77612384565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c24612384565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c6991906141bd565b60405180910390a35050565b611c8084848461243e565b611c8c84848484612dc7565b611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc29061447a565b60405180910390fd5b50505050565b611cd9612384565b73ffffffffffffffffffffffffffffffffffffffff16611cf761194e565b73ffffffffffffffffffffffffffffffffffffffff1614611d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d449061431a565b60405180910390fd5b80600b8190555050565b600e60009054906101000a900460ff16611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d9061421a565b60405180910390fd5b600b54811115611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de29061443a565b60405180910390fd5b60008111611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e259061451a565b60405180910390fd5b600d5481611e3a610d71565b611e4491906146d6565b1115611e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7c906143ba565b60405180910390fd5b6000600f54118015611ea057506000611e9d33612156565b11155b15611ed757600f548110611eb457600f5490505b611ebe3382612da9565b80600f54611ecc91906147eb565b600f81905550612005565b6000611ee2336129f7565b1115611f3d57600a5481611ef6919061475d565b341015611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f9061423a565b60405180910390fd5b611ffa565b601054811115611f9e57600a54601054611f57919061475d565b341015611f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f909061423a565b60405180910390fd5b611ff9565b6010548111611ff857600a5481611fb5919061475d565b341015611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee9061423a565b60405180910390fd5b5b5b5b6120043382612da9565b5b50565b606061201382612377565b612052576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120499061439a565b60405180910390fd5b60018081111561206557612064614a56565b5b601160009054906101000a900460ff16600181111561208757612086614a56565b5b14156120eb5760006009805461209c9061491b565b9050116120b857604051806020016040528060008152506120e4565b60096120c383612f5e565b6040516020016120d4929190614103565b6040516020818303038152906040525b9050612145565b6000600980546120fa9061491b565b9050116121165760405180602001604052806000815250612142565b600961212183612f5e565b604051602001612132929190614127565b6040516020818303038152906040525b90505b919050565b60105481565b60075481565b6000612161826129f7565b9050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900460ff1681565b612217612384565b73ffffffffffffffffffffffffffffffffffffffff1661223561194e565b73ffffffffffffffffffffffffffffffffffffffff161461228b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122829061431a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f29061425a565b60405180910390fd5b61230481612ce3565b50565b600d5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061244982612ae0565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612470612384565b73ffffffffffffffffffffffffffffffffffffffff1614806124cc5750612495612384565b73ffffffffffffffffffffffffffffffffffffffff166124b484610bd3565b73ffffffffffffffffffffffffffffffffffffffff16145b806124e857506124e782600001516124e2612384565b612168565b5b90508061252a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125219061441a565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461259c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612593906143da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561260c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612603906142da565b60405180910390fd5b61261985858560016130bf565b612629600084846000015161238c565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661269791906147b7565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661273b9190614690565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461284191906146d6565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612987576128b781612377565b15612986576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129ef86868660016130c5565b505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5f906142fa565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b612ae861368a565b612af182612377565b612b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b279061427a565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612b945760017f000000000000000000000000000000000000000000000000000000000000000084612b8791906147eb565b612b9191906146d6565b90505b60008390505b818110612ca2576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c8e57809350505050612cde565b508080612c9a906148f1565b915050612b9a565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd5906144fa565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612dc38282604051806020016040528060008152506130cb565b5050565b6000612de88473ffffffffffffffffffffffffffffffffffffffff166135aa565b15612f51578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e11612384565b8786866040518563ffffffff1660e01b8152600401612e339493929190614171565b602060405180830381600087803b158015612e4d57600080fd5b505af1925050508015612e7e57506040513d601f19601f82011682018060405250810190612e7b9190613a1a565b60015b612f01573d8060008114612eae576040519150601f19603f3d011682016040523d82523d6000602084013e612eb3565b606091505b50600081511415612ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef09061447a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f56565b600190505b949350505050565b60606000821415612fa6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130ba565b600082905060005b60008214612fd8578080612fc19061497e565b915050600a82612fd1919061472c565b9150612fae565b60008167ffffffffffffffff811115612ff457612ff3614ae3565b5b6040519080825280601f01601f1916602001820160405280156130265781602001600182028036833780820191505090505b5090505b600085146130b35760018261303f91906147eb565b9150600a8561304e91906149c7565b603061305a91906146d6565b60f81b8183815181106130705761306f614ab4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130ac919061472c565b945061302a565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613141576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613138906144ba565b60405180910390fd5b61314a81612377565b1561318a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131819061449a565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156131ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e49061455a565b60405180910390fd5b6131fa60008583866130bf565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516132f79190614690565b6fffffffffffffffffffffffffffffffff16815260200185836020015161331e9190614690565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561358d57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461352d6000888488612dc7565b61356c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135639061447a565b60405180910390fd5b81806135779061497e565b92505080806135859061497e565b9150506134bc565b50806000819055506135a260008785886130c5565b505050505050565b600080823b905060008111915050919050565b604051806101000160405280600081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600081525090565b8280546136109061491b565b90600052602060002090601f0160209004810192826136325760008555613679565b82601f1061364b57805160ff1916838001178555613679565b82800160010185558215613679579182015b8281111561367857825182559160200191906001019061365d565b5b50905061368691906136c4565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156136dd5760008160009055506001016136c5565b5090565b60006136f46136ef846145d6565b6145b1565b9050828152602081018484840111156137105761370f614b17565b5b61371b8482856148af565b509392505050565b600061373661373184614607565b6145b1565b90508281526020810184848401111561375257613751614b17565b5b61375d8482856148af565b509392505050565b60008135905061377481615262565b92915050565b60008135905061378981615279565b92915050565b60008135905061379e81615290565b92915050565b6000815190506137b381615290565b92915050565b600082601f8301126137ce576137cd614b12565b5b81356137de8482602086016136e1565b91505092915050565b600082601f8301126137fc576137fb614b12565b5b813561380c848260208601613723565b91505092915050565b600081359050613824816152a7565b92915050565b6000602082840312156138405761383f614b21565b5b600061384e84828501613765565b91505092915050565b6000806040838503121561386e5761386d614b21565b5b600061387c85828601613765565b925050602061388d85828601613765565b9150509250929050565b6000806000606084860312156138b0576138af614b21565b5b60006138be86828701613765565b93505060206138cf86828701613765565b92505060406138e086828701613815565b9150509250925092565b6000806000806080858703121561390457613903614b21565b5b600061391287828801613765565b945050602061392387828801613765565b935050604061393487828801613815565b925050606085013567ffffffffffffffff81111561395557613954614b1c565b5b613961878288016137b9565b91505092959194509250565b6000806040838503121561398457613983614b21565b5b600061399285828601613765565b92505060206139a38582860161377a565b9150509250929050565b600080604083850312156139c4576139c3614b21565b5b60006139d285828601613765565b92505060206139e385828601613815565b9150509250929050565b600060208284031215613a0357613a02614b21565b5b6000613a118482850161378f565b91505092915050565b600060208284031215613a3057613a2f614b21565b5b6000613a3e848285016137a4565b91505092915050565b600060208284031215613a5d57613a5c614b21565b5b600082013567ffffffffffffffff811115613a7b57613a7a614b1c565b5b613a87848285016137e7565b91505092915050565b600060208284031215613aa657613aa5614b21565b5b6000613ab484828501613815565b91505092915050565b60008060408385031215613ad457613ad3614b21565b5b6000613ae285828601613815565b9250506020613af385828601613765565b9150509250929050565b613b068161481f565b82525050565b613b1581614831565b82525050565b613b2481614831565b82525050565b6000613b358261464d565b613b3f8185614663565b9350613b4f8185602086016148be565b613b5881614b26565b840191505092915050565b6000613b6e82614658565b613b788185614674565b9350613b888185602086016148be565b613b9181614b26565b840191505092915050565b6000613ba782614658565b613bb18185614685565b9350613bc18185602086016148be565b80840191505092915050565b60008154613bda8161491b565b613be48186614685565b94506001821660008114613bff5760018114613c1057613c43565b60ff19831686528186019350613c43565b613c1985614638565b60005b83811015613c3b57815481890152600182019150602081019050613c1c565b838801955050505b50505092915050565b6000613c59602283614674565b9150613c6482614b37565b604082019050919050565b6000613c7c601383614674565b9150613c8782614b86565b602082019050919050565b6000613c9f601083614674565b9150613caa82614baf565b602082019050919050565b6000613cc2602683614674565b9150613ccd82614bd8565b604082019050919050565b6000613ce5602a83614674565b9150613cf082614c27565b604082019050919050565b6000613d08601f83614674565b9150613d1382614c76565b602082019050919050565b6000613d2b602383614674565b9150613d3682614c9f565b604082019050919050565b6000613d4e602583614674565b9150613d5982614cee565b604082019050919050565b6000613d71603183614674565b9150613d7c82614d3d565b604082019050919050565b6000613d94601583614674565b9150613d9f82614d8c565b602082019050919050565b6000613db7603983614674565b9150613dc282614db5565b604082019050919050565b6000613dda601b83614674565b9150613de582614e04565b602082019050919050565b6000613dfd602b83614674565b9150613e0882614e2d565b604082019050919050565b6000613e20601583614674565b9150613e2b82614e7c565b602082019050919050565b6000613e43601183614674565b9150613e4e82614ea5565b602082019050919050565b6000613e66602683614674565b9150613e7182614ece565b604082019050919050565b6000613e89600583614685565b9150613e9482614f1d565b600582019050919050565b6000613eac601a83614674565b9150613eb782614f46565b602082019050919050565b6000613ecf603283614674565b9150613eda82614f6f565b604082019050919050565b6000613ef2601883614674565b9150613efd82614fbe565b602082019050919050565b6000613f15602283614674565b9150613f2082614fe7565b604082019050919050565b6000613f38603383614674565b9150613f4382615036565b604082019050919050565b6000613f5b601d83614674565b9150613f6682615085565b602082019050919050565b6000613f7e602183614674565b9150613f89826150ae565b604082019050919050565b6000613fa1602e83614674565b9150613fac826150fd565b604082019050919050565b6000613fc4602f83614674565b9150613fcf8261514c565b604082019050919050565b6000613fe7601683614674565b9150613ff28261519b565b602082019050919050565b600061400a602d83614674565b9150614015826151c4565b604082019050919050565b600061402d602283614674565b915061403882615213565b604082019050919050565b6101008201600082015161405a60008501826140e5565b50602082015161406d60208501826140e5565b50604082015161408060408501826140e5565b5060608201516140936060850182613b0c565b5060808201516140a660808501826140e5565b5060a08201516140b960a08501826140e5565b5060c08201516140cc60c08501826140e5565b5060e08201516140df60e08501826140e5565b50505050565b6140ee816148a5565b82525050565b6140fd816148a5565b82525050565b600061410f8285613bcd565b915061411b8284613b9c565b91508190509392505050565b60006141338285613bcd565b915061413f8284613b9c565b915061414a82613e7c565b91508190509392505050565b600060208201905061416b6000830184613afd565b92915050565b60006080820190506141866000830187613afd565b6141936020830186613afd565b6141a060408301856140f4565b81810360608301526141b28184613b2a565b905095945050505050565b60006020820190506141d26000830184613b1b565b92915050565b600060208201905081810360008301526141f28184613b63565b905092915050565b6000602082019050818103600083015261421381613c4c565b9050919050565b6000602082019050818103600083015261423381613c6f565b9050919050565b6000602082019050818103600083015261425381613c92565b9050919050565b6000602082019050818103600083015261427381613cb5565b9050919050565b6000602082019050818103600083015261429381613cd8565b9050919050565b600060208201905081810360008301526142b381613cfb565b9050919050565b600060208201905081810360008301526142d381613d1e565b9050919050565b600060208201905081810360008301526142f381613d41565b9050919050565b6000602082019050818103600083015261431381613d64565b9050919050565b6000602082019050818103600083015261433381613d87565b9050919050565b6000602082019050818103600083015261435381613daa565b9050919050565b6000602082019050818103600083015261437381613dcd565b9050919050565b6000602082019050818103600083015261439381613df0565b9050919050565b600060208201905081810360008301526143b381613e13565b9050919050565b600060208201905081810360008301526143d381613e36565b9050919050565b600060208201905081810360008301526143f381613e59565b9050919050565b6000602082019050818103600083015261441381613e9f565b9050919050565b6000602082019050818103600083015261443381613ec2565b9050919050565b6000602082019050818103600083015261445381613ee5565b9050919050565b6000602082019050818103600083015261447381613f08565b9050919050565b6000602082019050818103600083015261449381613f2b565b9050919050565b600060208201905081810360008301526144b381613f4e565b9050919050565b600060208201905081810360008301526144d381613f71565b9050919050565b600060208201905081810360008301526144f381613f94565b9050919050565b6000602082019050818103600083015261451381613fb7565b9050919050565b6000602082019050818103600083015261453381613fda565b9050919050565b6000602082019050818103600083015261455381613ffd565b9050919050565b6000602082019050818103600083015261457381614020565b9050919050565b6000610100820190506145906000830184614043565b92915050565b60006020820190506145ab60008301846140f4565b92915050565b60006145bb6145cc565b90506145c7828261494d565b919050565b6000604051905090565b600067ffffffffffffffff8211156145f1576145f0614ae3565b5b6145fa82614b26565b9050602081019050919050565b600067ffffffffffffffff82111561462257614621614ae3565b5b61462b82614b26565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061469b82614869565b91506146a683614869565b9250826fffffffffffffffffffffffffffffffff038211156146cb576146ca6149f8565b5b828201905092915050565b60006146e1826148a5565b91506146ec836148a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614721576147206149f8565b5b828201905092915050565b6000614737826148a5565b9150614742836148a5565b92508261475257614751614a27565b5b828204905092915050565b6000614768826148a5565b9150614773836148a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147ac576147ab6149f8565b5b828202905092915050565b60006147c282614869565b91506147cd83614869565b9250828210156147e0576147df6149f8565b5b828203905092915050565b60006147f6826148a5565b9150614801836148a5565b925082821015614814576148136149f8565b5b828203905092915050565b600061482a82614885565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148dc5780820151818401526020810190506148c1565b838111156148eb576000848401525b50505050565b60006148fc826148a5565b915060008214156149105761490f6149f8565b5b600182039050919050565b6000600282049050600182168061493357607f821691505b6020821081141561494757614946614a85565b5b50919050565b61495682614b26565b810181811067ffffffffffffffff8211171561497557614974614ae3565b5b80604052505050565b6000614989826148a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149bc576149bb6149f8565b5b600182019050919050565b60006149d2826148a5565b91506149dd836148a5565b9250826149ed576149ec614a27565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206d7573742062652061637469766500000000000000000000000000600082015250565b7f4e6f7420656e6f75676820657468657200000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4578636565642062616c616e6365206f66207468697320636f6e747261637400600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420746865206f776e65720000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f457863656564206d617820737570706c79206f6620746f6b656e730000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f457863656564206d617820737570706c79000000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f457863656564206d617820746f6b656e73207065722074780000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374206f6e6500000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61526b8161481f565b811461527657600080fd5b50565b61528281614831565b811461528d57600080fd5b50565b6152998161483d565b81146152a457600080fd5b50565b6152b0816148a5565b81146152bb57600080fd5b5056fea264697066735822122045910b1d1c4fd04a7962bce9364842a066cb0becaf7af1049476cff6a0ce545064736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5565484a534241773450376a6d4868743666764552773979346b4e563573554d52644b6a6b387144767978762f

Deployed Bytecode

0x60806040526004361061025c5760003560e01c80636f8b44b011610144578063b88d4fde116100b6578063d7224ba01161007a578063d7224ba0146108d3578063dc33e681146108fe578063e985e9c51461093b578063eb8d244414610978578063f2fde38b146109a3578063f47c84c5146109cc5761025c565b8063b88d4fde146107fd578063b9bed05e14610826578063c634d0321461084f578063c87b56dd1461086b578063d0a04eac146108a85761025c565b806385c8cc741161010857806385c8cc74146107015780638da5cb5b1461072a5780638f69ae6f14610755578063900c71f51461078057806395d89b41146107a9578063a22cb465146107d45761025c565b80636f8b44b01461063057806370a0823114610659578063715018a61461069657806378cf19e9146106ad5780637ff9b596146106d65761025c565b80633ccfd60b116101dd57806355f804b3116101a157806355f804b3146105205780635e307a48146105495780636352211e14610574578063681c8bac146105b15780636a61e5fc146105dc5780636c0360eb146106055761025c565b80633ccfd60b1461043d57806342842e0e14610454578063495e1eba1461047d5780634df8bb45146104a65780634f6ccce7146104e35761025c565b8063205c287811610224578063205c28781461035a57806323b872dd146103835780632b57cfbb146103ac5780632f745c59146103e957806334918dfd146104265761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b31461030657806318160ddd1461032f575b600080fd5b34801561026d57600080fd5b50610288600480360381019061028391906139ed565b6109f7565b60405161029591906141bd565b60405180910390f35b3480156102aa57600080fd5b506102b3610b41565b6040516102c091906141d8565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb9190613a90565b610bd3565b6040516102fd9190614156565b60405180910390f35b34801561031257600080fd5b5061032d600480360381019061032891906139ad565b610c58565b005b34801561033b57600080fd5b50610344610d71565b6040516103519190614596565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c91906139ad565b610d7a565b005b34801561038f57600080fd5b506103aa60048036038101906103a59190613897565b610e84565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190613abd565b610e94565b6040516103e09190614596565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b91906139ad565b610f05565b60405161041d9190614596565b60405180910390f35b34801561043257600080fd5b5061043b611103565b005b34801561044957600080fd5b506104526111ab565b005b34801561046057600080fd5b5061047b60048036038101906104769190613897565b611276565b005b34801561048957600080fd5b506104a4600480360381019061049f9190613a90565b611296565b005b3480156104b257600080fd5b506104cd60048036038101906104c8919061382a565b61131c565b6040516104da919061457a565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190613a90565b6113cb565b6040516105179190614596565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190613a47565b61141e565b005b34801561055557600080fd5b5061055e6114b4565b60405161056b9190614596565b60405180910390f35b34801561058057600080fd5b5061059b60048036038101906105969190613a90565b6114ba565b6040516105a89190614156565b60405180910390f35b3480156105bd57600080fd5b506105c66114d0565b6040516105d39190614596565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe9190613a90565b6114d6565b005b34801561061157600080fd5b5061061a61155c565b60405161062791906141d8565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190613a90565b6115ea565b005b34801561066557600080fd5b50610680600480360381019061067b919061382a565b611670565b60405161068d9190614596565b60405180910390f35b3480156106a257600080fd5b506106ab611759565b005b3480156106b957600080fd5b506106d460048036038101906106cf91906139ad565b6117e1565b005b3480156106e257600080fd5b506106eb6118c2565b6040516106f89190614596565b60405180910390f35b34801561070d57600080fd5b5061072860048036038101906107239190613a90565b6118c8565b005b34801561073657600080fd5b5061073f61194e565b60405161074c9190614156565b60405180910390f35b34801561076157600080fd5b5061076a611978565b6040516107779190614596565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a29190613a90565b61197e565b005b3480156107b557600080fd5b506107be611a62565b6040516107cb91906141d8565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f6919061396d565b611af4565b005b34801561080957600080fd5b50610824600480360381019061081f91906138ea565b611c75565b005b34801561083257600080fd5b5061084d60048036038101906108489190613a90565b611cd1565b005b61086960048036038101906108649190613a90565b611d57565b005b34801561087757600080fd5b50610892600480360381019061088d9190613a90565b612008565b60405161089f91906141d8565b60405180910390f35b3480156108b457600080fd5b506108bd61214a565b6040516108ca9190614596565b60405180910390f35b3480156108df57600080fd5b506108e8612150565b6040516108f59190614596565b60405180910390f35b34801561090a57600080fd5b506109256004803603810190610920919061382a565b612156565b6040516109329190614596565b60405180910390f35b34801561094757600080fd5b50610962600480360381019061095d9190613857565b612168565b60405161096f91906141bd565b60405180910390f35b34801561098457600080fd5b5061098d6121fc565b60405161099a91906141bd565b60405180910390f35b3480156109af57600080fd5b506109ca60048036038101906109c5919061382a565b61220f565b005b3480156109d857600080fd5b506109e1612307565b6040516109ee9190614596565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ac257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b2a57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b3a5750610b398261230d565b5b9050919050565b606060018054610b509061491b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7c9061491b565b8015610bc95780601f10610b9e57610100808354040283529160200191610bc9565b820191906000526020600020905b815481529060010190602001808311610bac57829003601f168201915b5050505050905090565b6000610bde82612377565b610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c149061453a565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c63826114ba565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb9061445a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cf3612384565b73ffffffffffffffffffffffffffffffffffffffff161480610d225750610d2181610d1c612384565b612168565b5b610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d589061433a565b60405180910390fd5b610d6c83838361238c565b505050565b60008054905090565b610d82612384565b73ffffffffffffffffffffffffffffffffffffffff16610da061194e565b73ffffffffffffffffffffffffffffffffffffffff1614610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded9061431a565b60405180910390fd5b47811115610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061429a565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e7f573d6000803e3d6000fd5b505050565b610e8f83838361243e565b505050565b600080610ea083612156565b1115610ebb57600a5483610eb4919061475d565b9050610eff565b601054831115610edc57600a54601054610ed5919061475d565b9050610eff565b6010548311610efa57600a5483610ef3919061475d565b9050610eff565b600090505b92915050565b6000610f1083611670565b8210610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f48906141fa565b60405180910390fd5b6000610f5b610d71565b905060008060005b838110156110c1576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461105557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110ad578684141561109e5781955050505050506110fd565b83806110a99061497e565b9450505b5080806110b99061497e565b915050610f63565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f4906144da565b60405180910390fd5b92915050565b61110b612384565b73ffffffffffffffffffffffffffffffffffffffff1661112961194e565b73ffffffffffffffffffffffffffffffffffffffff161461117f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111769061431a565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6111b3612384565b73ffffffffffffffffffffffffffffffffffffffff166111d161194e565b73ffffffffffffffffffffffffffffffffffffffff1614611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121e9061431a565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611272573d6000803e3d6000fd5b5050565b61129183838360405180602001604052806000815250611c75565b505050565b61129e612384565b73ffffffffffffffffffffffffffffffffffffffff166112bc61194e565b73ffffffffffffffffffffffffffffffffffffffff1614611312576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113099061431a565b60405180910390fd5b80600c8190555050565b6113246135bd565b604051806101000160405280600a548152602001600b548152602001600d548152602001600e60009054906101000a900460ff1615158152602001611367610d71565b81526020016010548152602001600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146113b6576113b1846129f7565b6113b9565b60005b8152602001600c548152509050919050565b60006113d5610d71565b8210611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140d906142ba565b60405180910390fd5b819050919050565b611426612384565b73ffffffffffffffffffffffffffffffffffffffff1661144461194e565b73ffffffffffffffffffffffffffffffffffffffff161461149a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114919061431a565b60405180910390fd5b80600990805190602001906114b0929190613604565b5050565b600b5481565b60006114c582612ae0565b600001519050919050565b600c5481565b6114de612384565b73ffffffffffffffffffffffffffffffffffffffff166114fc61194e565b73ffffffffffffffffffffffffffffffffffffffff1614611552576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115499061431a565b60405180910390fd5b80600a8190555050565b600980546115699061491b565b80601f01602080910402602001604051908101604052809291908181526020018280546115959061491b565b80156115e25780601f106115b7576101008083540402835291602001916115e2565b820191906000526020600020905b8154815290600101906020018083116115c557829003601f168201915b505050505081565b6115f2612384565b73ffffffffffffffffffffffffffffffffffffffff1661161061194e565b73ffffffffffffffffffffffffffffffffffffffff1614611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d9061431a565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d89061437a565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611761612384565b73ffffffffffffffffffffffffffffffffffffffff1661177f61194e565b73ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc9061431a565b60405180910390fd5b6117df6000612ce3565b565b6117e9612384565b73ffffffffffffffffffffffffffffffffffffffff1661180761194e565b73ffffffffffffffffffffffffffffffffffffffff161461185d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118549061431a565b60405180910390fd5b600d5481611869610d71565b61187391906146d6565b11156118b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ab9061435a565b60405180910390fd5b6118be8282612da9565b5050565b600a5481565b6118d0612384565b73ffffffffffffffffffffffffffffffffffffffff166118ee61194e565b73ffffffffffffffffffffffffffffffffffffffff1614611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b9061431a565b60405180910390fd5b8060108190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b611986612384565b73ffffffffffffffffffffffffffffffffffffffff166119a461194e565b73ffffffffffffffffffffffffffffffffffffffff16146119fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f19061431a565b60405180910390fd5b6002811415611a33576001601160006101000a81548160ff02191690836001811115611a2957611a28614a56565b5b0217905550611a5f565b6000601160006101000a81548160ff02191690836001811115611a5957611a58614a56565b5b02179055505b50565b606060028054611a719061491b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9d9061491b565b8015611aea5780601f10611abf57610100808354040283529160200191611aea565b820191906000526020600020905b815481529060010190602001808311611acd57829003601f168201915b5050505050905090565b611afc612384565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b61906143fa565b60405180910390fd5b8060066000611b77612384565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c24612384565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c6991906141bd565b60405180910390a35050565b611c8084848461243e565b611c8c84848484612dc7565b611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc29061447a565b60405180910390fd5b50505050565b611cd9612384565b73ffffffffffffffffffffffffffffffffffffffff16611cf761194e565b73ffffffffffffffffffffffffffffffffffffffff1614611d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d449061431a565b60405180910390fd5b80600b8190555050565b600e60009054906101000a900460ff16611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d9061421a565b60405180910390fd5b600b54811115611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de29061443a565b60405180910390fd5b60008111611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e259061451a565b60405180910390fd5b600d5481611e3a610d71565b611e4491906146d6565b1115611e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7c906143ba565b60405180910390fd5b6000600f54118015611ea057506000611e9d33612156565b11155b15611ed757600f548110611eb457600f5490505b611ebe3382612da9565b80600f54611ecc91906147eb565b600f81905550612005565b6000611ee2336129f7565b1115611f3d57600a5481611ef6919061475d565b341015611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f9061423a565b60405180910390fd5b611ffa565b601054811115611f9e57600a54601054611f57919061475d565b341015611f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f909061423a565b60405180910390fd5b611ff9565b6010548111611ff857600a5481611fb5919061475d565b341015611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee9061423a565b60405180910390fd5b5b5b5b6120043382612da9565b5b50565b606061201382612377565b612052576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120499061439a565b60405180910390fd5b60018081111561206557612064614a56565b5b601160009054906101000a900460ff16600181111561208757612086614a56565b5b14156120eb5760006009805461209c9061491b565b9050116120b857604051806020016040528060008152506120e4565b60096120c383612f5e565b6040516020016120d4929190614103565b6040516020818303038152906040525b9050612145565b6000600980546120fa9061491b565b9050116121165760405180602001604052806000815250612142565b600961212183612f5e565b604051602001612132929190614127565b6040516020818303038152906040525b90505b919050565b60105481565b60075481565b6000612161826129f7565b9050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900460ff1681565b612217612384565b73ffffffffffffffffffffffffffffffffffffffff1661223561194e565b73ffffffffffffffffffffffffffffffffffffffff161461228b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122829061431a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f29061425a565b60405180910390fd5b61230481612ce3565b50565b600d5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061244982612ae0565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612470612384565b73ffffffffffffffffffffffffffffffffffffffff1614806124cc5750612495612384565b73ffffffffffffffffffffffffffffffffffffffff166124b484610bd3565b73ffffffffffffffffffffffffffffffffffffffff16145b806124e857506124e782600001516124e2612384565b612168565b5b90508061252a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125219061441a565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461259c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612593906143da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561260c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612603906142da565b60405180910390fd5b61261985858560016130bf565b612629600084846000015161238c565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661269791906147b7565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661273b9190614690565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461284191906146d6565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612987576128b781612377565b15612986576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129ef86868660016130c5565b505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5f906142fa565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b612ae861368a565b612af182612377565b612b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b279061427a565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000027118310612b945760017f000000000000000000000000000000000000000000000000000000000000271184612b8791906147eb565b612b9191906146d6565b90505b60008390505b818110612ca2576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c8e57809350505050612cde565b508080612c9a906148f1565b915050612b9a565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd5906144fa565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612dc38282604051806020016040528060008152506130cb565b5050565b6000612de88473ffffffffffffffffffffffffffffffffffffffff166135aa565b15612f51578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e11612384565b8786866040518563ffffffff1660e01b8152600401612e339493929190614171565b602060405180830381600087803b158015612e4d57600080fd5b505af1925050508015612e7e57506040513d601f19601f82011682018060405250810190612e7b9190613a1a565b60015b612f01573d8060008114612eae576040519150601f19603f3d011682016040523d82523d6000602084013e612eb3565b606091505b50600081511415612ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef09061447a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f56565b600190505b949350505050565b60606000821415612fa6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130ba565b600082905060005b60008214612fd8578080612fc19061497e565b915050600a82612fd1919061472c565b9150612fae565b60008167ffffffffffffffff811115612ff457612ff3614ae3565b5b6040519080825280601f01601f1916602001820160405280156130265781602001600182028036833780820191505090505b5090505b600085146130b35760018261303f91906147eb565b9150600a8561304e91906149c7565b603061305a91906146d6565b60f81b8183815181106130705761306f614ab4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130ac919061472c565b945061302a565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613141576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613138906144ba565b60405180910390fd5b61314a81612377565b1561318a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131819061449a565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000027118311156131ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e49061455a565b60405180910390fd5b6131fa60008583866130bf565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516132f79190614690565b6fffffffffffffffffffffffffffffffff16815260200185836020015161331e9190614690565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561358d57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461352d6000888488612dc7565b61356c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135639061447a565b60405180910390fd5b81806135779061497e565b92505080806135859061497e565b9150506134bc565b50806000819055506135a260008785886130c5565b505050505050565b600080823b905060008111915050919050565b604051806101000160405280600081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600081525090565b8280546136109061491b565b90600052602060002090601f0160209004810192826136325760008555613679565b82601f1061364b57805160ff1916838001178555613679565b82800160010185558215613679579182015b8281111561367857825182559160200191906001019061365d565b5b50905061368691906136c4565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156136dd5760008160009055506001016136c5565b5090565b60006136f46136ef846145d6565b6145b1565b9050828152602081018484840111156137105761370f614b17565b5b61371b8482856148af565b509392505050565b600061373661373184614607565b6145b1565b90508281526020810184848401111561375257613751614b17565b5b61375d8482856148af565b509392505050565b60008135905061377481615262565b92915050565b60008135905061378981615279565b92915050565b60008135905061379e81615290565b92915050565b6000815190506137b381615290565b92915050565b600082601f8301126137ce576137cd614b12565b5b81356137de8482602086016136e1565b91505092915050565b600082601f8301126137fc576137fb614b12565b5b813561380c848260208601613723565b91505092915050565b600081359050613824816152a7565b92915050565b6000602082840312156138405761383f614b21565b5b600061384e84828501613765565b91505092915050565b6000806040838503121561386e5761386d614b21565b5b600061387c85828601613765565b925050602061388d85828601613765565b9150509250929050565b6000806000606084860312156138b0576138af614b21565b5b60006138be86828701613765565b93505060206138cf86828701613765565b92505060406138e086828701613815565b9150509250925092565b6000806000806080858703121561390457613903614b21565b5b600061391287828801613765565b945050602061392387828801613765565b935050604061393487828801613815565b925050606085013567ffffffffffffffff81111561395557613954614b1c565b5b613961878288016137b9565b91505092959194509250565b6000806040838503121561398457613983614b21565b5b600061399285828601613765565b92505060206139a38582860161377a565b9150509250929050565b600080604083850312156139c4576139c3614b21565b5b60006139d285828601613765565b92505060206139e385828601613815565b9150509250929050565b600060208284031215613a0357613a02614b21565b5b6000613a118482850161378f565b91505092915050565b600060208284031215613a3057613a2f614b21565b5b6000613a3e848285016137a4565b91505092915050565b600060208284031215613a5d57613a5c614b21565b5b600082013567ffffffffffffffff811115613a7b57613a7a614b1c565b5b613a87848285016137e7565b91505092915050565b600060208284031215613aa657613aa5614b21565b5b6000613ab484828501613815565b91505092915050565b60008060408385031215613ad457613ad3614b21565b5b6000613ae285828601613815565b9250506020613af385828601613765565b9150509250929050565b613b068161481f565b82525050565b613b1581614831565b82525050565b613b2481614831565b82525050565b6000613b358261464d565b613b3f8185614663565b9350613b4f8185602086016148be565b613b5881614b26565b840191505092915050565b6000613b6e82614658565b613b788185614674565b9350613b888185602086016148be565b613b9181614b26565b840191505092915050565b6000613ba782614658565b613bb18185614685565b9350613bc18185602086016148be565b80840191505092915050565b60008154613bda8161491b565b613be48186614685565b94506001821660008114613bff5760018114613c1057613c43565b60ff19831686528186019350613c43565b613c1985614638565b60005b83811015613c3b57815481890152600182019150602081019050613c1c565b838801955050505b50505092915050565b6000613c59602283614674565b9150613c6482614b37565b604082019050919050565b6000613c7c601383614674565b9150613c8782614b86565b602082019050919050565b6000613c9f601083614674565b9150613caa82614baf565b602082019050919050565b6000613cc2602683614674565b9150613ccd82614bd8565b604082019050919050565b6000613ce5602a83614674565b9150613cf082614c27565b604082019050919050565b6000613d08601f83614674565b9150613d1382614c76565b602082019050919050565b6000613d2b602383614674565b9150613d3682614c9f565b604082019050919050565b6000613d4e602583614674565b9150613d5982614cee565b604082019050919050565b6000613d71603183614674565b9150613d7c82614d3d565b604082019050919050565b6000613d94601583614674565b9150613d9f82614d8c565b602082019050919050565b6000613db7603983614674565b9150613dc282614db5565b604082019050919050565b6000613dda601b83614674565b9150613de582614e04565b602082019050919050565b6000613dfd602b83614674565b9150613e0882614e2d565b604082019050919050565b6000613e20601583614674565b9150613e2b82614e7c565b602082019050919050565b6000613e43601183614674565b9150613e4e82614ea5565b602082019050919050565b6000613e66602683614674565b9150613e7182614ece565b604082019050919050565b6000613e89600583614685565b9150613e9482614f1d565b600582019050919050565b6000613eac601a83614674565b9150613eb782614f46565b602082019050919050565b6000613ecf603283614674565b9150613eda82614f6f565b604082019050919050565b6000613ef2601883614674565b9150613efd82614fbe565b602082019050919050565b6000613f15602283614674565b9150613f2082614fe7565b604082019050919050565b6000613f38603383614674565b9150613f4382615036565b604082019050919050565b6000613f5b601d83614674565b9150613f6682615085565b602082019050919050565b6000613f7e602183614674565b9150613f89826150ae565b604082019050919050565b6000613fa1602e83614674565b9150613fac826150fd565b604082019050919050565b6000613fc4602f83614674565b9150613fcf8261514c565b604082019050919050565b6000613fe7601683614674565b9150613ff28261519b565b602082019050919050565b600061400a602d83614674565b9150614015826151c4565b604082019050919050565b600061402d602283614674565b915061403882615213565b604082019050919050565b6101008201600082015161405a60008501826140e5565b50602082015161406d60208501826140e5565b50604082015161408060408501826140e5565b5060608201516140936060850182613b0c565b5060808201516140a660808501826140e5565b5060a08201516140b960a08501826140e5565b5060c08201516140cc60c08501826140e5565b5060e08201516140df60e08501826140e5565b50505050565b6140ee816148a5565b82525050565b6140fd816148a5565b82525050565b600061410f8285613bcd565b915061411b8284613b9c565b91508190509392505050565b60006141338285613bcd565b915061413f8284613b9c565b915061414a82613e7c565b91508190509392505050565b600060208201905061416b6000830184613afd565b92915050565b60006080820190506141866000830187613afd565b6141936020830186613afd565b6141a060408301856140f4565b81810360608301526141b28184613b2a565b905095945050505050565b60006020820190506141d26000830184613b1b565b92915050565b600060208201905081810360008301526141f28184613b63565b905092915050565b6000602082019050818103600083015261421381613c4c565b9050919050565b6000602082019050818103600083015261423381613c6f565b9050919050565b6000602082019050818103600083015261425381613c92565b9050919050565b6000602082019050818103600083015261427381613cb5565b9050919050565b6000602082019050818103600083015261429381613cd8565b9050919050565b600060208201905081810360008301526142b381613cfb565b9050919050565b600060208201905081810360008301526142d381613d1e565b9050919050565b600060208201905081810360008301526142f381613d41565b9050919050565b6000602082019050818103600083015261431381613d64565b9050919050565b6000602082019050818103600083015261433381613d87565b9050919050565b6000602082019050818103600083015261435381613daa565b9050919050565b6000602082019050818103600083015261437381613dcd565b9050919050565b6000602082019050818103600083015261439381613df0565b9050919050565b600060208201905081810360008301526143b381613e13565b9050919050565b600060208201905081810360008301526143d381613e36565b9050919050565b600060208201905081810360008301526143f381613e59565b9050919050565b6000602082019050818103600083015261441381613e9f565b9050919050565b6000602082019050818103600083015261443381613ec2565b9050919050565b6000602082019050818103600083015261445381613ee5565b9050919050565b6000602082019050818103600083015261447381613f08565b9050919050565b6000602082019050818103600083015261449381613f2b565b9050919050565b600060208201905081810360008301526144b381613f4e565b9050919050565b600060208201905081810360008301526144d381613f71565b9050919050565b600060208201905081810360008301526144f381613f94565b9050919050565b6000602082019050818103600083015261451381613fb7565b9050919050565b6000602082019050818103600083015261453381613fda565b9050919050565b6000602082019050818103600083015261455381613ffd565b9050919050565b6000602082019050818103600083015261457381614020565b9050919050565b6000610100820190506145906000830184614043565b92915050565b60006020820190506145ab60008301846140f4565b92915050565b60006145bb6145cc565b90506145c7828261494d565b919050565b6000604051905090565b600067ffffffffffffffff8211156145f1576145f0614ae3565b5b6145fa82614b26565b9050602081019050919050565b600067ffffffffffffffff82111561462257614621614ae3565b5b61462b82614b26565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061469b82614869565b91506146a683614869565b9250826fffffffffffffffffffffffffffffffff038211156146cb576146ca6149f8565b5b828201905092915050565b60006146e1826148a5565b91506146ec836148a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614721576147206149f8565b5b828201905092915050565b6000614737826148a5565b9150614742836148a5565b92508261475257614751614a27565b5b828204905092915050565b6000614768826148a5565b9150614773836148a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147ac576147ab6149f8565b5b828202905092915050565b60006147c282614869565b91506147cd83614869565b9250828210156147e0576147df6149f8565b5b828203905092915050565b60006147f6826148a5565b9150614801836148a5565b925082821015614814576148136149f8565b5b828203905092915050565b600061482a82614885565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148dc5780820151818401526020810190506148c1565b838111156148eb576000848401525b50505050565b60006148fc826148a5565b915060008214156149105761490f6149f8565b5b600182039050919050565b6000600282049050600182168061493357607f821691505b6020821081141561494757614946614a85565b5b50919050565b61495682614b26565b810181811067ffffffffffffffff8211171561497557614974614ae3565b5b80604052505050565b6000614989826148a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149bc576149bb6149f8565b5b600182019050919050565b60006149d2826148a5565b91506149dd836148a5565b9250826149ed576149ec614a27565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206d7573742062652061637469766500000000000000000000000000600082015250565b7f4e6f7420656e6f75676820657468657200000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4578636565642062616c616e6365206f66207468697320636f6e747261637400600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420746865206f776e65720000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f457863656564206d617820737570706c79206f6620746f6b656e730000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f457863656564206d617820737570706c79000000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f457863656564206d617820746f6b656e73207065722074780000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374206f6e6500000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61526b8161481f565b811461527657600080fd5b50565b61528281614831565b811461528d57600080fd5b50565b6152998161483d565b81146152a457600080fd5b50565b6152b0816148a5565b81146152bb57600080fd5b5056fea264697066735822122045910b1d1c4fd04a7962bce9364842a066cb0becaf7af1049476cff6a0ce545064736f6c63430008070033

Deployed Bytecode Sourcemap

39501:5916:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24689:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26415:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27949:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27512:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23250:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41266:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28799:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41923:437;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23881:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41824:89;;;;;;;;;;;;;:::i;:::-;;41117:140;;;;;;;;;;;;;:::i;:::-;;29004:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45282:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40576:533;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23413:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41718:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39727:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26238:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39768:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43670:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39545;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44899:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25115:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38647:103;;;;;;;;;;;;;:::i;:::-;;41473:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39661:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45130:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38007:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39892:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44427:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26570:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28217:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29224:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45006:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42434:1228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43785:634;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40025:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33639:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44777:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28554:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39852:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38905:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39811:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24689:370;24816:4;24861:25;24846:40;;;:11;:40;;;;:99;;;;24912:33;24897:48;;;:11;:48;;;;24846:99;:160;;;;24971:35;24956:50;;;:11;:50;;;;24846:160;:207;;;;25017:36;25041:11;25017:23;:36::i;:::-;24846:207;24832:221;;24689:370;;;:::o;26415:94::-;26469:13;26498:5;26491:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26415:94;:::o;27949:204::-;28017:7;28041:16;28049:7;28041;:16::i;:::-;28033:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28123:15;:24;28139:7;28123:24;;;;;;;;;;;;;;;;;;;;;28116:31;;27949:204;;;:::o;27512:379::-;27581:13;27597:24;27613:7;27597:15;:24::i;:::-;27581:40;;27642:5;27636:11;;:2;:11;;;;27628:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27727:5;27711:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27736:37;27753:5;27760:12;:10;:12::i;:::-;27736:16;:37::i;:::-;27711:62;27695:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;27857:28;27866:2;27870:7;27879:5;27857:8;:28::i;:::-;27574:317;27512:379;;:::o;23250:94::-;23303:7;23326:12;;23319:19;;23250:94;:::o;41266:198::-;38238:12;:10;:12::i;:::-;38227:23;;:7;:5;:7::i;:::-;:23;;;38219:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;41360:21:::1;41350:6;:31;;41342:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;41436:2;41428:20;;:28;41449:6;41428:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41266:198:::0;;:::o;28799:142::-;28907:28;28917:4;28923:2;28927:7;28907:9;:28::i;:::-;28799:142;;;:::o;41923:437::-;41999:7;42045:1;42022:20;42035:6;42022:12;:20::i;:::-;:24;42019:315;;;42086:10;;42069:14;:27;;;;:::i;:::-;42062:34;;;;42019:315;42134:21;;42117:14;:38;42114:220;;;42202:10;;42178:21;;:34;;;;:::i;:::-;42171:41;;;;42114:220;42251:21;;42233:14;:39;42230:104;;42312:10;;42295:14;:27;;;;:::i;:::-;42288:34;;;;42230:104;42351:1;42344:8;;41923:437;;;;;:::o;23881:744::-;23990:7;24025:16;24035:5;24025:9;:16::i;:::-;24017:5;:24;24009:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24087:22;24112:13;:11;:13::i;:::-;24087:38;;24132:19;24162:25;24212:9;24207:350;24231:14;24227:1;:18;24207:350;;;24261:31;24295:11;:14;24307:1;24295:14;;;;;;;;;;;24261:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24348:1;24322:28;;:9;:14;;;:28;;;24318:89;;24383:9;:14;;;24363:34;;24318:89;24440:5;24419:26;;:17;:26;;;24415:135;;;24477:5;24462:11;:20;24458:59;;;24504:1;24497:8;;;;;;;;;24458:59;24527:13;;;;;:::i;:::-;;;;24415:135;24252:305;24247:3;;;;;:::i;:::-;;;;24207:350;;;;24563:56;;;;;;;;;;:::i;:::-;;;;;;;;23881:744;;;;;:::o;41824:89::-;38238:12;:10;:12::i;:::-;38227:23;;:7;:5;:7::i;:::-;:23;;;38219:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;41893:12:::1;;;;;;;;;;;41892:13;41877:12;;:28;;;;;;;;;;;;;;;;;;41824:89::o:0;41117:140::-;38238:12;:10;:12::i;:::-;38227:23;;:7;:5;:7::i;:::-;:23;;;38219:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;41165:12:::1;41180:21;41165:36;;41220:10;41212:28;;:37;41241:7;41212:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41154:103;41117:140::o:0;29004:157::-;29116:39;29133:4;29139:2;29143:7;29116:39;;;;;;;;;;;;:16;:39::i;:::-;29004:157;;;:::o;45282:132::-;38238:12;:10;:12::i;:::-;38227:23;;:7;:5;:7::i;:::-;:23;;;38219:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;45387:19:::1;45366:18;:40;;;;45282:132:::0;:::o;40576:533::-;40631:18;;:::i;:::-;40669:432;;;;;;;;40708:10;;40669:432;;;;40749:14;;40669:432;;;;40790:10;;40669:432;;;;40829:12;;;;;;;;;;;40669:432;;;;;;40877:13;:11;:13::i;:::-;40669:432;;;;40930:21;;40669:432;;;;40996:1;40978:20;;:6;:20;;;:57;;41013:21;41027:6;41013:13;:21::i;:::-;40978:57;;;41001:1;40978:57;40669:432;;;;41071:18;;40669:432;;;40662:439;;40576:533;;;:::o;23413:177::-;23480:7;23512:13;:11;:13::i;:::-;23504:5;:21;23496:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23579:5;23572:12;;23413:177;;;:::o;41718:94::-;38238:12;:10;:12::i;:::-;38227:23;;:7;:5;:7::i;:::-;:23;;;38219:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;41798:6:::1;41788:7;:16;;;;;;;;;;;;:::i;:::-;;41718:94:::0;:::o;39727:32::-;;;;:::o;26238:118::-;26302:7;26325:20;26337:7;26325:11;:20::i;:::-;:25;;;26318:32;;26238:118;;;:::o;39768:34::-;;;;:::o;43670:107::-;38238:12;:10;:12::i;:::-;38227:23;;:7;:5;:7::i;:::-;:23;;;38219:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;43756:13:::1;43743:10;:26;;;;43670:107:::0;:::o;39545:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44899:99::-;38238:12;:10;:12::i;:::-;38227:23;;:7;:5;:7::i;:::-;:23;;;38219:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44980:10:::1;44967;:23;;;;44899:99:::0;:::o;25115:211::-;25179:7;25220:1;25203:19;;:5;:19;;;;25195:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25292:12;:19;25305:5;25292:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;25284:36;;25277:43;;25115:211;;;:::o;38647:103::-;38238:12;:10;:12::i;:::-;38227:23;;:7;:5;:7::i;:::-;:23;;;38219:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;38712:30:::1;38739:1;38712:18;:30::i;:::-;38647:103::o:0;41473:224::-;38238:12;:10;:12::i;:::-;38227:23;;:7;:5;:7::i;:::-;:23;;;38219:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;41607:10:::1;;41589:14;41573:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:44;;41565:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;41660:29;41670:2;41674:14;41660:9;:29::i;:::-;41473:224:::0;;:::o;39661:44::-;;;;:::o;45130:144::-;38238:12;:10;:12::i;:::-;38227:23;;:7;:5;:7::i;:::-;:23;;;38219:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;45244:22:::1;45220:21;:46;;;;45130:144:::0;:::o;38007:87::-;38053:7;38080:6;;;;;;;;;;;38073:13;;38007:87;:::o;39892:39::-;;;;:::o;44427:223::-;38238:12;:10;:12::i;:::-;38227:23;;:7;:5;:7::i;:::-;:23;;;38219:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44508:1:::1;44500:4;:9;44496:147;;;44541:21;44526:12;;:36;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;44496:147;;;44610:21;44595:12;;:36;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;44496:147;44427:223:::0;:::o;26570:98::-;26626:13;26655:7;26648:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26570:98;:::o;28217:274::-;28320:12;:10;:12::i;:::-;28308:24;;:8;:24;;;;28300:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28417:8;28372:18;:32;28391:12;:10;:12::i;:::-;28372:32;;;;;;;;;;;;;;;:42;28405:8;28372:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28466:8;28437:48;;28452:12;:10;:12::i;:::-;28437:48;;;28476:8;28437:48;;;;;;:::i;:::-;;;;;;;;28217:274;;:::o;29224:311::-;29361:28;29371:4;29377:2;29381:7;29361:9;:28::i;:::-;29412:48;29435:4;29441:2;29445:7;29454:5;29412:22;:48::i;:::-;29396:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;29224:311;;;;:::o;45006:116::-;38238:12;:10;:12::i;:::-;38227:23;;:7;:5;:7::i;:::-;:23;;;38219:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;45099:15:::1;45082:14;:32;;;;45006:116:::0;:::o;42434:1228::-;42508:12;;;;;;;;;;;42500:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;42581:14;;42563;:32;;42555:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42660:1;42643:14;:18;42635:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;42741:10;;42723:14;42707:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:44;;42699:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;42820:1;42797:20;;:24;:57;;;;;42853:1;42825:24;42838:10;42825:12;:24::i;:::-;:29;;42797:57;42794:861;;;42891:20;;42873:14;:38;42870:114;;42948:20;;42931:37;;42870:114;42998:37;43008:10;43020:14;42998:9;:37::i;:::-;43096:14;43073:20;;:37;;;;:::i;:::-;43050:20;:60;;;;42794:861;;;43173:1;43145:25;43159:10;43145:13;:25::i;:::-;:29;43142:450;;;43232:10;;43215:14;:27;;;;:::i;:::-;43202:9;:40;;43194:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;43142:450;;;43306:21;;43289:14;:38;43286:306;;;43392:10;;43368:21;;:34;;;;:::i;:::-;43355:9;:47;;43347:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43286:306;;;43466:21;;43448:14;:39;43445:147;;43545:10;;43528:14;:27;;;;:::i;:::-;43515:9;:40;;43507:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;43445:147;43286:306;43142:450;43606:37;43616:10;43628:14;43606:9;:37::i;:::-;42794:861;42434:1228;:::o;43785:634::-;43851:13;43891:17;43899:8;43891:7;:17::i;:::-;43883:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;43965:21;43949:37;;;;;;;;:::i;:::-;;:12;;;;;;;;;;;:37;;;;;;;;:::i;:::-;;;43945:467;;;44032:1;44014:7;44008:21;;;;;:::i;:::-;;;:25;:165;;;;;;;;;;;;;;;;;44090:7;44114:26;44131:8;44114:16;:26::i;:::-;44057:98;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44008:165;44001:172;;;;43945:467;44235:1;44217:7;44211:21;;;;;:::i;:::-;;;:25;:189;;;;;;;;;;;;;;;;;44293:7;44317:26;44334:8;44317:16;:26::i;:::-;44260:122;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44211:189;44204:196;;43785:634;;;;:::o;40025:38::-;;;;:::o;33639:43::-;;;;:::o;44777:113::-;44835:7;44862:20;44876:5;44862:13;:20::i;:::-;44855:27;;44777:113;;;:::o;28554:186::-;28676:4;28699:18;:25;28718:5;28699:25;;;;;;;;;;;;;;;:35;28725:8;28699:35;;;;;;;;;;;;;;;;;;;;;;;;;28692:42;;28554:186;;;;:::o;39852:31::-;;;;;;;;;;;;;:::o;38905:238::-;38238:12;:10;:12::i;:::-;38227:23;;:7;:5;:7::i;:::-;:23;;;38219:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;39028:1:::1;39008:22;;:8;:22;;;;38986:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;39107:28;39126:8;39107:18;:28::i;:::-;38905:238:::0;:::o;39811:32::-;;;;:::o;8376:207::-;8506:4;8550:25;8535:40;;;:11;:40;;;;8528:47;;8376:207;;;:::o;29774:105::-;29831:4;29861:12;;29851:7;:22;29844:29;;29774:105;;;:::o;17729:98::-;17782:7;17809:10;17802:17;;17729:98;:::o;33461:172::-;33585:2;33558:15;:24;33574:7;33558:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33619:7;33615:2;33599:28;;33608:5;33599:28;;;;;;;;;;;;33461:172;;;:::o;31826:1529::-;31923:35;31961:20;31973:7;31961:11;:20::i;:::-;31923:58;;31990:22;32032:13;:18;;;32016:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;32085:12;:10;:12::i;:::-;32061:36;;:20;32073:7;32061:11;:20::i;:::-;:36;;;32016:81;:142;;;;32108:50;32125:13;:18;;;32145:12;:10;:12::i;:::-;32108:16;:50::i;:::-;32016:142;31990:169;;32184:17;32168:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;32316:4;32294:26;;:13;:18;;;:26;;;32278:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;32405:1;32391:16;;:2;:16;;;;32383:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32458:43;32480:4;32486:2;32490:7;32499:1;32458:21;:43::i;:::-;32558:49;32575:1;32579:7;32588:13;:18;;;32558:8;:49::i;:::-;32646:1;32616:12;:18;32629:4;32616:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32682:1;32654:12;:16;32667:2;32654:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32713:43;;;;;;;;32728:2;32713:43;;;;;;32739:15;32713:43;;;;;32690:11;:20;32702:7;32690:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32984:19;33016:1;33006:7;:11;;;;:::i;:::-;32984:33;;33069:1;33028:43;;:11;:24;33040:11;33028:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;33024:236;;;33086:20;33094:11;33086:7;:20::i;:::-;33082:171;;;33146:97;;;;;;;;33173:13;:18;;;33146:97;;;;;;33204:13;:28;;;33146:97;;;;;33119:11;:24;33131:11;33119:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33082:171;33024:236;33292:7;33288:2;33273:27;;33282:4;33273:27;;;;;;;;;;;;33307:42;33328:4;33334:2;33338:7;33347:1;33307:20;:42::i;:::-;31916:1439;;;31826:1529;;;:::o;25332:240::-;25393:7;25442:1;25425:19;;:5;:19;;;;25409:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;25533:12;:19;25546:5;25533:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;25525:41;;25518:48;;25332:240;;;:::o;25578:606::-;25654:21;;:::i;:::-;25695:16;25703:7;25695;:16::i;:::-;25687:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25767:26;25815:12;25804:7;:23;25800:93;;25884:1;25869:12;25859:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;25838:47;;25800:93;25906:12;25921:7;25906:22;;25901:212;25938:18;25930:4;:26;25901:212;;25975:31;26009:11;:17;26021:4;26009:17;;;;;;;;;;;25975:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26065:1;26039:28;;:9;:14;;;:28;;;26035:71;;26087:9;26080:16;;;;;;;26035:71;25966:147;25958:6;;;;;:::i;:::-;;;;25901:212;;;;26121:57;;;;;;;;;;:::i;:::-;;;;;;;;25578:606;;;;:::o;39303:191::-;39377:16;39396:6;;;;;;;;;;;39377:25;;39422:8;39413:6;;:17;;;;;;;;;;;;;;;;;;39477:8;39446:40;;39467:8;39446:40;;;;;;;;;;;;39366:128;39303:191;:::o;29885:98::-;29950:27;29960:2;29964:8;29950:27;;;;;;;;;;;;:9;:27::i;:::-;29885:98;;:::o;35176:690::-;35313:4;35330:15;:2;:13;;;:15::i;:::-;35326:535;;;35385:2;35369:36;;;35406:12;:10;:12::i;:::-;35420:4;35426:7;35435:5;35369:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35356:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35617:1;35600:6;:13;:18;35596:215;;;35633:61;;;;;;;;;;:::i;:::-;;;;;;;;35596:215;35779:6;35773:13;35764:6;35760:2;35756:15;35749:38;35356:464;35501:45;;;35491:55;;;:6;:55;;;;35484:62;;;;;35326:535;35849:4;35842:11;;35176:690;;;;;;;:::o;18229:723::-;18285:13;18515:1;18506:5;:10;18502:53;;;18533:10;;;;;;;;;;;;;;;;;;;;;18502:53;18565:12;18580:5;18565:20;;18596:14;18621:78;18636:1;18628:4;:9;18621:78;;18654:8;;;;;:::i;:::-;;;;18685:2;18677:10;;;;;:::i;:::-;;;18621:78;;;18709:19;18741:6;18731:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18709:39;;18759:154;18775:1;18766:5;:10;18759:154;;18803:1;18793:11;;;;;:::i;:::-;;;18870:2;18862:5;:10;;;;:::i;:::-;18849:2;:24;;;;:::i;:::-;18836:39;;18819:6;18826;18819:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18899:2;18890:11;;;;;:::i;:::-;;;18759:154;;;18937:6;18923:21;;;;;18229:723;;;;:::o;36328:141::-;;;;;:::o;36855:140::-;;;;;:::o;30322:1272::-;30427:20;30450:12;;30427:35;;30491:1;30477:16;;:2;:16;;;;30469:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30668:21;30676:12;30668:7;:21::i;:::-;30667:22;30659:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30750:12;30738:8;:24;;30730:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30810:61;30840:1;30844:2;30848:12;30862:8;30810:21;:61::i;:::-;30880:30;30913:12;:16;30926:2;30913:16;;;;;;;;;;;;;;;30880:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30955:119;;;;;;;;31005:8;30975:11;:19;;;:39;;;;:::i;:::-;30955:119;;;;;;31058:8;31023:11;:24;;;:44;;;;:::i;:::-;30955:119;;;;;30936:12;:16;30949:2;30936:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31109:43;;;;;;;;31124:2;31109:43;;;;;;31135:15;31109:43;;;;;31081:11;:25;31093:12;31081:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31161:20;31184:12;31161:35;;31210:9;31205:281;31229:8;31225:1;:12;31205:281;;;31283:12;31279:2;31258:38;;31275:1;31258:38;;;;;;;;;;;;31323:59;31354:1;31358:2;31362:12;31376:5;31323:22;:59::i;:::-;31305:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;31464:14;;;;;:::i;:::-;;;;31239:3;;;;;:::i;:::-;;;;31205:281;;;;31509:12;31494;:27;;;;31528:60;31557:1;31561:2;31565:12;31579:8;31528:20;:60::i;:::-;30420:1174;;;30322:1272;;;:::o;9331:387::-;9391:4;9599:12;9666:7;9654:20;9646:28;;9709:1;9702:4;:8;9695:15;;;9331:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:474::-;7226:6;7234;7283:2;7271:9;7262:7;7258:23;7254:32;7251:119;;;7289:79;;:::i;:::-;7251:119;7409:1;7434:53;7479:7;7470:6;7459:9;7455:22;7434:53;:::i;:::-;7424:63;;7380:117;7536:2;7562:53;7607:7;7598:6;7587:9;7583:22;7562:53;:::i;:::-;7552:63;;7507:118;7158:474;;;;;:::o;7638:118::-;7725:24;7743:5;7725:24;:::i;:::-;7720:3;7713:37;7638:118;;:::o;7762:99::-;7833:21;7848:5;7833:21;:::i;:::-;7828:3;7821:34;7762:99;;:::o;7867:109::-;7948:21;7963:5;7948:21;:::i;:::-;7943:3;7936:34;7867:109;;:::o;7982:360::-;8068:3;8096:38;8128:5;8096:38;:::i;:::-;8150:70;8213:6;8208:3;8150:70;:::i;:::-;8143:77;;8229:52;8274:6;8269:3;8262:4;8255:5;8251:16;8229:52;:::i;:::-;8306:29;8328:6;8306:29;:::i;:::-;8301:3;8297:39;8290:46;;8072:270;7982:360;;;;:::o;8348:364::-;8436:3;8464:39;8497:5;8464:39;:::i;:::-;8519:71;8583:6;8578:3;8519:71;:::i;:::-;8512:78;;8599:52;8644:6;8639:3;8632:4;8625:5;8621:16;8599:52;:::i;:::-;8676:29;8698:6;8676:29;:::i;:::-;8671:3;8667:39;8660:46;;8440:272;8348:364;;;;:::o;8718:377::-;8824:3;8852:39;8885:5;8852:39;:::i;:::-;8907:89;8989:6;8984:3;8907:89;:::i;:::-;8900:96;;9005:52;9050:6;9045:3;9038:4;9031:5;9027:16;9005:52;:::i;:::-;9082:6;9077:3;9073:16;9066:23;;8828:267;8718:377;;;;:::o;9125:845::-;9228:3;9265:5;9259:12;9294:36;9320:9;9294:36;:::i;:::-;9346:89;9428:6;9423:3;9346:89;:::i;:::-;9339:96;;9466:1;9455:9;9451:17;9482:1;9477:137;;;;9628:1;9623:341;;;;9444:520;;9477:137;9561:4;9557:9;9546;9542:25;9537:3;9530:38;9597:6;9592:3;9588:16;9581:23;;9477:137;;9623:341;9690:38;9722:5;9690:38;:::i;:::-;9750:1;9764:154;9778:6;9775:1;9772:13;9764:154;;;9852:7;9846:14;9842:1;9837:3;9833:11;9826:35;9902:1;9893:7;9889:15;9878:26;;9800:4;9797:1;9793:12;9788:17;;9764:154;;;9947:6;9942:3;9938:16;9931:23;;9630:334;;9444:520;;9232:738;;9125:845;;;;:::o;9976:366::-;10118:3;10139:67;10203:2;10198:3;10139:67;:::i;:::-;10132:74;;10215:93;10304:3;10215:93;:::i;:::-;10333:2;10328:3;10324:12;10317:19;;9976:366;;;:::o;10348:::-;10490:3;10511:67;10575:2;10570:3;10511:67;:::i;:::-;10504:74;;10587:93;10676:3;10587:93;:::i;:::-;10705:2;10700:3;10696:12;10689:19;;10348:366;;;:::o;10720:::-;10862:3;10883:67;10947:2;10942:3;10883:67;:::i;:::-;10876:74;;10959:93;11048:3;10959:93;:::i;:::-;11077:2;11072:3;11068:12;11061:19;;10720:366;;;:::o;11092:::-;11234:3;11255:67;11319:2;11314:3;11255:67;:::i;:::-;11248:74;;11331:93;11420:3;11331:93;:::i;:::-;11449:2;11444:3;11440:12;11433:19;;11092:366;;;:::o;11464:::-;11606:3;11627:67;11691:2;11686:3;11627:67;:::i;:::-;11620:74;;11703:93;11792:3;11703:93;:::i;:::-;11821:2;11816:3;11812:12;11805:19;;11464:366;;;:::o;11836:::-;11978:3;11999:67;12063:2;12058:3;11999:67;:::i;:::-;11992:74;;12075:93;12164:3;12075:93;:::i;:::-;12193:2;12188:3;12184:12;12177:19;;11836:366;;;:::o;12208:::-;12350:3;12371:67;12435:2;12430:3;12371:67;:::i;:::-;12364:74;;12447:93;12536:3;12447:93;:::i;:::-;12565:2;12560:3;12556:12;12549:19;;12208:366;;;:::o;12580:::-;12722:3;12743:67;12807:2;12802:3;12743:67;:::i;:::-;12736:74;;12819:93;12908:3;12819:93;:::i;:::-;12937:2;12932:3;12928:12;12921:19;;12580:366;;;:::o;12952:::-;13094:3;13115:67;13179:2;13174:3;13115:67;:::i;:::-;13108:74;;13191:93;13280:3;13191:93;:::i;:::-;13309:2;13304:3;13300:12;13293:19;;12952:366;;;:::o;13324:::-;13466:3;13487:67;13551:2;13546:3;13487:67;:::i;:::-;13480:74;;13563:93;13652:3;13563:93;:::i;:::-;13681:2;13676:3;13672:12;13665:19;;13324:366;;;:::o;13696:::-;13838:3;13859:67;13923:2;13918:3;13859:67;:::i;:::-;13852:74;;13935:93;14024:3;13935:93;:::i;:::-;14053:2;14048:3;14044:12;14037:19;;13696:366;;;:::o;14068:::-;14210:3;14231:67;14295:2;14290:3;14231:67;:::i;:::-;14224:74;;14307:93;14396:3;14307:93;:::i;:::-;14425:2;14420:3;14416:12;14409:19;;14068:366;;;:::o;14440:::-;14582:3;14603:67;14667:2;14662:3;14603:67;:::i;:::-;14596:74;;14679:93;14768:3;14679:93;:::i;:::-;14797:2;14792:3;14788:12;14781:19;;14440:366;;;:::o;14812:::-;14954:3;14975:67;15039:2;15034:3;14975:67;:::i;:::-;14968:74;;15051:93;15140:3;15051:93;:::i;:::-;15169:2;15164:3;15160:12;15153:19;;14812:366;;;:::o;15184:::-;15326:3;15347:67;15411:2;15406:3;15347:67;:::i;:::-;15340:74;;15423:93;15512:3;15423:93;:::i;:::-;15541:2;15536:3;15532:12;15525:19;;15184:366;;;:::o;15556:::-;15698:3;15719:67;15783:2;15778:3;15719:67;:::i;:::-;15712:74;;15795:93;15884:3;15795:93;:::i;:::-;15913:2;15908:3;15904:12;15897:19;;15556:366;;;:::o;15928:400::-;16088:3;16109:84;16191:1;16186:3;16109:84;:::i;:::-;16102:91;;16202:93;16291:3;16202:93;:::i;:::-;16320:1;16315:3;16311:11;16304:18;;15928:400;;;:::o;16334:366::-;16476:3;16497:67;16561:2;16556:3;16497:67;:::i;:::-;16490:74;;16573:93;16662:3;16573:93;:::i;:::-;16691:2;16686:3;16682:12;16675:19;;16334:366;;;:::o;16706:::-;16848:3;16869:67;16933:2;16928:3;16869:67;:::i;:::-;16862:74;;16945:93;17034:3;16945:93;:::i;:::-;17063:2;17058:3;17054:12;17047:19;;16706:366;;;:::o;17078:::-;17220:3;17241:67;17305:2;17300:3;17241:67;:::i;:::-;17234:74;;17317:93;17406:3;17317:93;:::i;:::-;17435:2;17430:3;17426:12;17419:19;;17078:366;;;:::o;17450:::-;17592:3;17613:67;17677:2;17672:3;17613:67;:::i;:::-;17606:74;;17689:93;17778:3;17689:93;:::i;:::-;17807:2;17802:3;17798:12;17791:19;;17450:366;;;:::o;17822:::-;17964:3;17985:67;18049:2;18044:3;17985:67;:::i;:::-;17978:74;;18061:93;18150:3;18061:93;:::i;:::-;18179:2;18174:3;18170:12;18163:19;;17822:366;;;:::o;18194:::-;18336:3;18357:67;18421:2;18416:3;18357:67;:::i;:::-;18350:74;;18433:93;18522:3;18433:93;:::i;:::-;18551:2;18546:3;18542:12;18535:19;;18194:366;;;:::o;18566:::-;18708:3;18729:67;18793:2;18788:3;18729:67;:::i;:::-;18722:74;;18805:93;18894:3;18805:93;:::i;:::-;18923:2;18918:3;18914:12;18907:19;;18566:366;;;:::o;18938:::-;19080:3;19101:67;19165:2;19160:3;19101:67;:::i;:::-;19094:74;;19177:93;19266:3;19177:93;:::i;:::-;19295:2;19290:3;19286:12;19279:19;;18938:366;;;:::o;19310:::-;19452:3;19473:67;19537:2;19532:3;19473:67;:::i;:::-;19466:74;;19549:93;19638:3;19549:93;:::i;:::-;19667:2;19662:3;19658:12;19651:19;;19310:366;;;:::o;19682:::-;19824:3;19845:67;19909:2;19904:3;19845:67;:::i;:::-;19838:74;;19921:93;20010:3;19921:93;:::i;:::-;20039:2;20034:3;20030:12;20023:19;;19682:366;;;:::o;20054:::-;20196:3;20217:67;20281:2;20276:3;20217:67;:::i;:::-;20210:74;;20293:93;20382:3;20293:93;:::i;:::-;20411:2;20406:3;20402:12;20395:19;;20054:366;;;:::o;20426:::-;20568:3;20589:67;20653:2;20648:3;20589:67;:::i;:::-;20582:74;;20665:93;20754:3;20665:93;:::i;:::-;20783:2;20778:3;20774:12;20767:19;;20426:366;;;:::o;20858:1629::-;21013:6;21008:3;21004:16;21108:4;21101:5;21097:16;21091:23;21127:63;21184:4;21179:3;21175:14;21161:12;21127:63;:::i;:::-;21030:170;21292:4;21285:5;21281:16;21275:23;21311:63;21368:4;21363:3;21359:14;21345:12;21311:63;:::i;:::-;21210:174;21472:4;21465:5;21461:16;21455:23;21491:63;21548:4;21543:3;21539:14;21525:12;21491:63;:::i;:::-;21394:170;21654:4;21647:5;21643:16;21637:23;21673:57;21724:4;21719:3;21715:14;21701:12;21673:57;:::i;:::-;21574:166;21829:4;21822:5;21818:16;21812:23;21848:63;21905:4;21900:3;21896:14;21882:12;21848:63;:::i;:::-;21750:171;22020:4;22013:5;22009:16;22003:23;22039:63;22096:4;22091:3;22087:14;22073:12;22039:63;:::i;:::-;21931:181;22200:4;22193:5;22189:16;22183:23;22219:63;22276:4;22271:3;22267:14;22253:12;22219:63;:::i;:::-;22122:170;22388:4;22381:5;22377:16;22371:23;22407:63;22464:4;22459:3;22455:14;22441:12;22407:63;:::i;:::-;22302:178;20982:1505;20858:1629;;:::o;22493:108::-;22570:24;22588:5;22570:24;:::i;:::-;22565:3;22558:37;22493:108;;:::o;22607:118::-;22694:24;22712:5;22694:24;:::i;:::-;22689:3;22682:37;22607:118;;:::o;22731:429::-;22908:3;22930:92;23018:3;23009:6;22930:92;:::i;:::-;22923:99;;23039:95;23130:3;23121:6;23039:95;:::i;:::-;23032:102;;23151:3;23144:10;;22731:429;;;;;:::o;23166:695::-;23444:3;23466:92;23554:3;23545:6;23466:92;:::i;:::-;23459:99;;23575:95;23666:3;23657:6;23575:95;:::i;:::-;23568:102;;23687:148;23831:3;23687:148;:::i;:::-;23680:155;;23852:3;23845:10;;23166:695;;;;;:::o;23867:222::-;23960:4;23998:2;23987:9;23983:18;23975:26;;24011:71;24079:1;24068:9;24064:17;24055:6;24011:71;:::i;:::-;23867:222;;;;:::o;24095:640::-;24290:4;24328:3;24317:9;24313:19;24305:27;;24342:71;24410:1;24399:9;24395:17;24386:6;24342:71;:::i;:::-;24423:72;24491:2;24480:9;24476:18;24467:6;24423:72;:::i;:::-;24505;24573:2;24562:9;24558:18;24549:6;24505:72;:::i;:::-;24624:9;24618:4;24614:20;24609:2;24598:9;24594:18;24587:48;24652:76;24723:4;24714:6;24652:76;:::i;:::-;24644:84;;24095:640;;;;;;;:::o;24741:210::-;24828:4;24866:2;24855:9;24851:18;24843:26;;24879:65;24941:1;24930:9;24926:17;24917:6;24879:65;:::i;:::-;24741:210;;;;:::o;24957:313::-;25070:4;25108:2;25097:9;25093:18;25085:26;;25157:9;25151:4;25147:20;25143:1;25132:9;25128:17;25121:47;25185:78;25258:4;25249:6;25185:78;:::i;:::-;25177:86;;24957:313;;;;:::o;25276:419::-;25442:4;25480:2;25469:9;25465:18;25457:26;;25529:9;25523:4;25519:20;25515:1;25504:9;25500:17;25493:47;25557:131;25683:4;25557:131;:::i;:::-;25549:139;;25276:419;;;:::o;25701:::-;25867:4;25905:2;25894:9;25890:18;25882:26;;25954:9;25948:4;25944:20;25940:1;25929:9;25925:17;25918:47;25982:131;26108:4;25982:131;:::i;:::-;25974:139;;25701:419;;;:::o;26126:::-;26292:4;26330:2;26319:9;26315:18;26307:26;;26379:9;26373:4;26369:20;26365:1;26354:9;26350:17;26343:47;26407:131;26533:4;26407:131;:::i;:::-;26399:139;;26126:419;;;:::o;26551:::-;26717:4;26755:2;26744:9;26740:18;26732:26;;26804:9;26798:4;26794:20;26790:1;26779:9;26775:17;26768:47;26832:131;26958:4;26832:131;:::i;:::-;26824:139;;26551:419;;;:::o;26976:::-;27142:4;27180:2;27169:9;27165:18;27157:26;;27229:9;27223:4;27219:20;27215:1;27204:9;27200:17;27193:47;27257:131;27383:4;27257:131;:::i;:::-;27249:139;;26976:419;;;:::o;27401:::-;27567:4;27605:2;27594:9;27590:18;27582:26;;27654:9;27648:4;27644:20;27640:1;27629:9;27625:17;27618:47;27682:131;27808:4;27682:131;:::i;:::-;27674:139;;27401:419;;;:::o;27826:::-;27992:4;28030:2;28019:9;28015:18;28007:26;;28079:9;28073:4;28069:20;28065:1;28054:9;28050:17;28043:47;28107:131;28233:4;28107:131;:::i;:::-;28099:139;;27826:419;;;:::o;28251:::-;28417:4;28455:2;28444:9;28440:18;28432:26;;28504:9;28498:4;28494:20;28490:1;28479:9;28475:17;28468:47;28532:131;28658:4;28532:131;:::i;:::-;28524:139;;28251:419;;;:::o;28676:::-;28842:4;28880:2;28869:9;28865:18;28857:26;;28929:9;28923:4;28919:20;28915:1;28904:9;28900:17;28893:47;28957:131;29083:4;28957:131;:::i;:::-;28949:139;;28676:419;;;:::o;29101:::-;29267:4;29305:2;29294:9;29290:18;29282:26;;29354:9;29348:4;29344:20;29340:1;29329:9;29325:17;29318:47;29382:131;29508:4;29382:131;:::i;:::-;29374:139;;29101:419;;;:::o;29526:::-;29692:4;29730:2;29719:9;29715:18;29707:26;;29779:9;29773:4;29769:20;29765:1;29754:9;29750:17;29743:47;29807:131;29933:4;29807:131;:::i;:::-;29799:139;;29526:419;;;:::o;29951:::-;30117:4;30155:2;30144:9;30140:18;30132:26;;30204:9;30198:4;30194:20;30190:1;30179:9;30175:17;30168:47;30232:131;30358:4;30232:131;:::i;:::-;30224:139;;29951:419;;;:::o;30376:::-;30542:4;30580:2;30569:9;30565:18;30557:26;;30629:9;30623:4;30619:20;30615:1;30604:9;30600:17;30593:47;30657:131;30783:4;30657:131;:::i;:::-;30649:139;;30376:419;;;:::o;30801:::-;30967:4;31005:2;30994:9;30990:18;30982:26;;31054:9;31048:4;31044:20;31040:1;31029:9;31025:17;31018:47;31082:131;31208:4;31082:131;:::i;:::-;31074:139;;30801:419;;;:::o;31226:::-;31392:4;31430:2;31419:9;31415:18;31407:26;;31479:9;31473:4;31469:20;31465:1;31454:9;31450:17;31443:47;31507:131;31633:4;31507:131;:::i;:::-;31499:139;;31226:419;;;:::o;31651:::-;31817:4;31855:2;31844:9;31840:18;31832:26;;31904:9;31898:4;31894:20;31890:1;31879:9;31875:17;31868:47;31932:131;32058:4;31932:131;:::i;:::-;31924:139;;31651:419;;;:::o;32076:::-;32242:4;32280:2;32269:9;32265:18;32257:26;;32329:9;32323:4;32319:20;32315:1;32304:9;32300:17;32293:47;32357:131;32483:4;32357:131;:::i;:::-;32349:139;;32076:419;;;:::o;32501:::-;32667:4;32705:2;32694:9;32690:18;32682:26;;32754:9;32748:4;32744:20;32740:1;32729:9;32725:17;32718:47;32782:131;32908:4;32782:131;:::i;:::-;32774:139;;32501:419;;;:::o;32926:::-;33092:4;33130:2;33119:9;33115:18;33107:26;;33179:9;33173:4;33169:20;33165:1;33154:9;33150:17;33143:47;33207:131;33333:4;33207:131;:::i;:::-;33199:139;;32926:419;;;:::o;33351:::-;33517:4;33555:2;33544:9;33540:18;33532:26;;33604:9;33598:4;33594:20;33590:1;33579:9;33575:17;33568:47;33632:131;33758:4;33632:131;:::i;:::-;33624:139;;33351:419;;;:::o;33776:::-;33942:4;33980:2;33969:9;33965:18;33957:26;;34029:9;34023:4;34019:20;34015:1;34004:9;34000:17;33993:47;34057:131;34183:4;34057:131;:::i;:::-;34049:139;;33776:419;;;:::o;34201:::-;34367:4;34405:2;34394:9;34390:18;34382:26;;34454:9;34448:4;34444:20;34440:1;34429:9;34425:17;34418:47;34482:131;34608:4;34482:131;:::i;:::-;34474:139;;34201:419;;;:::o;34626:::-;34792:4;34830:2;34819:9;34815:18;34807:26;;34879:9;34873:4;34869:20;34865:1;34854:9;34850:17;34843:47;34907:131;35033:4;34907:131;:::i;:::-;34899:139;;34626:419;;;:::o;35051:::-;35217:4;35255:2;35244:9;35240:18;35232:26;;35304:9;35298:4;35294:20;35290:1;35279:9;35275:17;35268:47;35332:131;35458:4;35332:131;:::i;:::-;35324:139;;35051:419;;;:::o;35476:::-;35642:4;35680:2;35669:9;35665:18;35657:26;;35729:9;35723:4;35719:20;35715:1;35704:9;35700:17;35693:47;35757:131;35883:4;35757:131;:::i;:::-;35749:139;;35476:419;;;:::o;35901:::-;36067:4;36105:2;36094:9;36090:18;36082:26;;36154:9;36148:4;36144:20;36140:1;36129:9;36125:17;36118:47;36182:131;36308:4;36182:131;:::i;:::-;36174:139;;35901:419;;;:::o;36326:::-;36492:4;36530:2;36519:9;36515:18;36507:26;;36579:9;36573:4;36569:20;36565:1;36554:9;36550:17;36543:47;36607:131;36733:4;36607:131;:::i;:::-;36599:139;;36326:419;;;:::o;36751:::-;36917:4;36955:2;36944:9;36940:18;36932:26;;37004:9;36998:4;36994:20;36990:1;36979:9;36975:17;36968:47;37032:131;37158:4;37032:131;:::i;:::-;37024:139;;36751:419;;;:::o;37176:339::-;37327:4;37365:3;37354:9;37350:19;37342:27;;37379:129;37505:1;37494:9;37490:17;37481:6;37379:129;:::i;:::-;37176:339;;;;:::o;37521:222::-;37614:4;37652:2;37641:9;37637:18;37629:26;;37665:71;37733:1;37722:9;37718:17;37709:6;37665:71;:::i;:::-;37521:222;;;;:::o;37749:129::-;37783:6;37810:20;;:::i;:::-;37800:30;;37839:33;37867:4;37859:6;37839:33;:::i;:::-;37749:129;;;:::o;37884:75::-;37917:6;37950:2;37944:9;37934:19;;37884:75;:::o;37965:307::-;38026:4;38116:18;38108:6;38105:30;38102:56;;;38138:18;;:::i;:::-;38102:56;38176:29;38198:6;38176:29;:::i;:::-;38168:37;;38260:4;38254;38250:15;38242:23;;37965:307;;;:::o;38278:308::-;38340:4;38430:18;38422:6;38419:30;38416:56;;;38452:18;;:::i;:::-;38416:56;38490:29;38512:6;38490:29;:::i;:::-;38482:37;;38574:4;38568;38564:15;38556:23;;38278:308;;;:::o;38592:141::-;38641:4;38664:3;38656:11;;38687:3;38684:1;38677:14;38721:4;38718:1;38708:18;38700:26;;38592:141;;;:::o;38739:98::-;38790:6;38824:5;38818:12;38808:22;;38739:98;;;:::o;38843:99::-;38895:6;38929:5;38923:12;38913:22;;38843:99;;;:::o;38948:168::-;39031:11;39065:6;39060:3;39053:19;39105:4;39100:3;39096:14;39081:29;;38948:168;;;;:::o;39122:169::-;39206:11;39240:6;39235:3;39228:19;39280:4;39275:3;39271:14;39256:29;;39122:169;;;;:::o;39297:148::-;39399:11;39436:3;39421:18;;39297:148;;;;:::o;39451:273::-;39491:3;39510:20;39528:1;39510:20;:::i;:::-;39505:25;;39544:20;39562:1;39544:20;:::i;:::-;39539:25;;39666:1;39630:34;39626:42;39623:1;39620:49;39617:75;;;39672:18;;:::i;:::-;39617:75;39716:1;39713;39709:9;39702:16;;39451:273;;;;:::o;39730:305::-;39770:3;39789:20;39807:1;39789:20;:::i;:::-;39784:25;;39823:20;39841:1;39823:20;:::i;:::-;39818:25;;39977:1;39909:66;39905:74;39902:1;39899:81;39896:107;;;39983:18;;:::i;:::-;39896:107;40027:1;40024;40020:9;40013:16;;39730:305;;;;:::o;40041:185::-;40081:1;40098:20;40116:1;40098:20;:::i;:::-;40093:25;;40132:20;40150:1;40132:20;:::i;:::-;40127:25;;40171:1;40161:35;;40176:18;;:::i;:::-;40161:35;40218:1;40215;40211:9;40206:14;;40041:185;;;;:::o;40232:348::-;40272:7;40295:20;40313:1;40295:20;:::i;:::-;40290:25;;40329:20;40347:1;40329:20;:::i;:::-;40324:25;;40517:1;40449:66;40445:74;40442:1;40439:81;40434:1;40427:9;40420:17;40416:105;40413:131;;;40524:18;;:::i;:::-;40413:131;40572:1;40569;40565:9;40554:20;;40232:348;;;;:::o;40586:191::-;40626:4;40646:20;40664:1;40646:20;:::i;:::-;40641:25;;40680:20;40698:1;40680:20;:::i;:::-;40675:25;;40719:1;40716;40713:8;40710:34;;;40724:18;;:::i;:::-;40710:34;40769:1;40766;40762:9;40754:17;;40586:191;;;;:::o;40783:::-;40823:4;40843:20;40861:1;40843:20;:::i;:::-;40838:25;;40877:20;40895:1;40877:20;:::i;:::-;40872:25;;40916:1;40913;40910:8;40907:34;;;40921:18;;:::i;:::-;40907:34;40966:1;40963;40959:9;40951:17;;40783:191;;;;:::o;40980:96::-;41017:7;41046:24;41064:5;41046:24;:::i;:::-;41035:35;;40980:96;;;:::o;41082:90::-;41116:7;41159:5;41152:13;41145:21;41134:32;;41082:90;;;:::o;41178:149::-;41214:7;41254:66;41247:5;41243:78;41232:89;;41178:149;;;:::o;41333:118::-;41370:7;41410:34;41403:5;41399:46;41388:57;;41333:118;;;:::o;41457:126::-;41494:7;41534:42;41527:5;41523:54;41512:65;;41457:126;;;:::o;41589:77::-;41626:7;41655:5;41644:16;;41589:77;;;:::o;41672:154::-;41756:6;41751:3;41746;41733:30;41818:1;41809:6;41804:3;41800:16;41793:27;41672:154;;;:::o;41832:307::-;41900:1;41910:113;41924:6;41921:1;41918:13;41910:113;;;42009:1;42004:3;42000:11;41994:18;41990:1;41985:3;41981:11;41974:39;41946:2;41943:1;41939:10;41934:15;;41910:113;;;42041:6;42038:1;42035:13;42032:101;;;42121:1;42112:6;42107:3;42103:16;42096:27;42032:101;41881:258;41832:307;;;:::o;42145:171::-;42184:3;42207:24;42225:5;42207:24;:::i;:::-;42198:33;;42253:4;42246:5;42243:15;42240:41;;;42261:18;;:::i;:::-;42240:41;42308:1;42301:5;42297:13;42290:20;;42145:171;;;:::o;42322:320::-;42366:6;42403:1;42397:4;42393:12;42383:22;;42450:1;42444:4;42440:12;42471:18;42461:81;;42527:4;42519:6;42515:17;42505:27;;42461:81;42589:2;42581:6;42578:14;42558:18;42555:38;42552:84;;;42608:18;;:::i;:::-;42552:84;42373:269;42322:320;;;:::o;42648:281::-;42731:27;42753:4;42731:27;:::i;:::-;42723:6;42719:40;42861:6;42849:10;42846:22;42825:18;42813:10;42810:34;42807:62;42804:88;;;42872:18;;:::i;:::-;42804:88;42912:10;42908:2;42901:22;42691:238;42648:281;;:::o;42935:233::-;42974:3;42997:24;43015:5;42997:24;:::i;:::-;42988:33;;43043:66;43036:5;43033:77;43030:103;;;43113:18;;:::i;:::-;43030:103;43160:1;43153:5;43149:13;43142:20;;42935:233;;;:::o;43174:176::-;43206:1;43223:20;43241:1;43223:20;:::i;:::-;43218:25;;43257:20;43275:1;43257:20;:::i;:::-;43252:25;;43296:1;43286:35;;43301:18;;:::i;:::-;43286:35;43342:1;43339;43335:9;43330:14;;43174:176;;;;:::o;43356:180::-;43404:77;43401:1;43394:88;43501:4;43498:1;43491:15;43525:4;43522:1;43515:15;43542:180;43590:77;43587:1;43580:88;43687:4;43684:1;43677:15;43711:4;43708:1;43701:15;43728:180;43776:77;43773:1;43766:88;43873:4;43870:1;43863:15;43897:4;43894:1;43887:15;43914:180;43962:77;43959:1;43952:88;44059:4;44056:1;44049:15;44083:4;44080:1;44073:15;44100:180;44148:77;44145:1;44138:88;44245:4;44242:1;44235:15;44269:4;44266:1;44259:15;44286:180;44334:77;44331:1;44324:88;44431:4;44428:1;44421:15;44455:4;44452:1;44445:15;44472:117;44581:1;44578;44571:12;44595:117;44704:1;44701;44694:12;44718:117;44827:1;44824;44817:12;44841:117;44950:1;44947;44940:12;44964:102;45005:6;45056:2;45052:7;45047:2;45040:5;45036:14;45032:28;45022:38;;44964:102;;;:::o;45072:221::-;45212:34;45208:1;45200:6;45196:14;45189:58;45281:4;45276:2;45268:6;45264:15;45257:29;45072:221;:::o;45299:169::-;45439:21;45435:1;45427:6;45423:14;45416:45;45299:169;:::o;45474:166::-;45614:18;45610:1;45602:6;45598:14;45591:42;45474:166;:::o;45646:225::-;45786:34;45782:1;45774:6;45770:14;45763:58;45855:8;45850:2;45842:6;45838:15;45831:33;45646:225;:::o;45877:229::-;46017:34;46013:1;46005:6;46001:14;45994:58;46086:12;46081:2;46073:6;46069:15;46062:37;45877:229;:::o;46112:181::-;46252:33;46248:1;46240:6;46236:14;46229:57;46112:181;:::o;46299:222::-;46439:34;46435:1;46427:6;46423:14;46416:58;46508:5;46503:2;46495:6;46491:15;46484:30;46299:222;:::o;46527:224::-;46667:34;46663:1;46655:6;46651:14;46644:58;46736:7;46731:2;46723:6;46719:15;46712:32;46527:224;:::o;46757:236::-;46897:34;46893:1;46885:6;46881:14;46874:58;46966:19;46961:2;46953:6;46949:15;46942:44;46757:236;:::o;46999:171::-;47139:23;47135:1;47127:6;47123:14;47116:47;46999:171;:::o;47176:244::-;47316:34;47312:1;47304:6;47300:14;47293:58;47385:27;47380:2;47372:6;47368:15;47361:52;47176:244;:::o;47426:177::-;47566:29;47562:1;47554:6;47550:14;47543:53;47426:177;:::o;47609:230::-;47749:34;47745:1;47737:6;47733:14;47726:58;47818:13;47813:2;47805:6;47801:15;47794:38;47609:230;:::o;47845:171::-;47985:23;47981:1;47973:6;47969:14;47962:47;47845:171;:::o;48022:167::-;48162:19;48158:1;48150:6;48146:14;48139:43;48022:167;:::o;48195:225::-;48335:34;48331:1;48323:6;48319:14;48312:58;48404:8;48399:2;48391:6;48387:15;48380:33;48195:225;:::o;48426:155::-;48566:7;48562:1;48554:6;48550:14;48543:31;48426:155;:::o;48587:176::-;48727:28;48723:1;48715:6;48711:14;48704:52;48587:176;:::o;48769:237::-;48909:34;48905:1;48897:6;48893:14;48886:58;48978:20;48973:2;48965:6;48961:15;48954:45;48769:237;:::o;49012:174::-;49152:26;49148:1;49140:6;49136:14;49129:50;49012:174;:::o;49192:221::-;49332:34;49328:1;49320:6;49316:14;49309:58;49401:4;49396:2;49388:6;49384:15;49377:29;49192:221;:::o;49419:238::-;49559:34;49555:1;49547:6;49543:14;49536:58;49628:21;49623:2;49615:6;49611:15;49604:46;49419:238;:::o;49663:179::-;49803:31;49799:1;49791:6;49787:14;49780:55;49663:179;:::o;49848:220::-;49988:34;49984:1;49976:6;49972:14;49965:58;50057:3;50052:2;50044:6;50040:15;50033:28;49848:220;:::o;50074:233::-;50214:34;50210:1;50202:6;50198:14;50191:58;50283:16;50278:2;50270:6;50266:15;50259:41;50074:233;:::o;50313:234::-;50453:34;50449:1;50441:6;50437:14;50430:58;50522:17;50517:2;50509:6;50505:15;50498:42;50313:234;:::o;50553:172::-;50693:24;50689:1;50681:6;50677:14;50670:48;50553:172;:::o;50731:232::-;50871:34;50867:1;50859:6;50855:14;50848:58;50940:15;50935:2;50927:6;50923:15;50916:40;50731:232;:::o;50969:221::-;51109:34;51105:1;51097:6;51093:14;51086:58;51178:4;51173:2;51165:6;51161:15;51154:29;50969:221;:::o;51196:122::-;51269:24;51287:5;51269:24;:::i;:::-;51262:5;51259:35;51249:63;;51308:1;51305;51298:12;51249:63;51196:122;:::o;51324:116::-;51394:21;51409:5;51394:21;:::i;:::-;51387:5;51384:32;51374:60;;51430:1;51427;51420:12;51374:60;51324:116;:::o;51446:120::-;51518:23;51535:5;51518:23;:::i;:::-;51511:5;51508:34;51498:62;;51556:1;51553;51546:12;51498:62;51446:120;:::o;51572:122::-;51645:24;51663:5;51645:24;:::i;:::-;51638:5;51635:35;51625:63;;51684:1;51681;51674:12;51625:63;51572:122;:::o

Swarm Source

ipfs://45910b1d1c4fd04a7962bce9364842a066cb0becaf7af1049476cff6a0ce5450
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.