ETH Price: $3,306.16 (-4.15%)

Token

Alpha Kingdom (GateKeeper)
 

Overview

Max Total Supply

995 GateKeeper

Holders

187

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
politechsguy.eth
Balance
1 GateKeeper
0x0aaf37c3eaaa42d417434fd2cec555846d46415c
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:
AlphaKingdom

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-04-29
*/

// SPDX-License-Identifier: MIT

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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


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

pragma solidity ^0.8.0;

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

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

// File: contracts/ERC721A.sol



pragma solidity ^0.8.0;









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

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 0;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    _approve(to, tokenId, owner);
  }

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

    return _tokenApprovals[tokenId];
  }

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

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

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

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

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

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

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

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

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

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

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

    uint256 updatedIndex = startTokenId;

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

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

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

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

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

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

    _beforeTokenTransfers(from, to, tokenId, 1);

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

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

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

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

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

  uint256 public nextOwnerToExplicitlySet = 0;

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: contracts/AlphaKingdom.sol



pragma solidity ^0.8.0;





contract AlphaKingdom is Ownable, ERC721A, ReentrancyGuard {

  uint256 public immutable maxPerAddressDuringMint;

  struct SaleConfig {
    uint64 publicPrice;
    bool paused;
  }

  SaleConfig public saleConfig;

  mapping(address => uint256) public teamList;

  constructor(
    uint256 maxBatchSize_,
    uint256 maxPerAddressDuringMint_
  ) ERC721A("Alpha Kingdom", "GateKeeper", maxBatchSize_, 4444) {
    maxPerAddressDuringMint = maxPerAddressDuringMint_;
  }

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

  function teamMint() external callerIsUser {
    require(teamList[msg.sender] > 0, "not eligible for teamList mint");
    require(totalSupply() + 3 <= collectionSize, "reached max supply");
    teamList[msg.sender]-- ;
    _safeMint(msg.sender, 3);
  }

  function publicSaleMint(uint256 quantity)
    external
    payable
    callerIsUser
  {
    SaleConfig memory config = saleConfig;
    bool state = config.paused;
    uint256 publicPrice = uint256(config.publicPrice);

    require(
      isPublicSaleOn(publicPrice, state),
      "public sale has not begun yet"
    );
    require(
      numberMinted(msg.sender) + quantity <= maxPerAddressDuringMint,
      "can not mint this many"
    );
    require(totalSupply() + quantity <= collectionSize, "reached max supply");
    _safeMint(msg.sender, quantity);
    refundIfOver(publicPrice * quantity);
  }

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

  function SetupSaleInfo(
    uint64 publicPriceWei,
    bool state
  ) external onlyOwner {
    saleConfig = SaleConfig(
      publicPriceWei,
      state
    );
  }

  function isPublicSaleOn(
    uint256 publicPriceWei,
    bool state
  ) internal view returns (bool) {
    return
      publicPriceWei != 0 &&
      !state;
  }

  function seedteamList(address[] memory addresses)
    external
    onlyOwner
  {
    for (uint256 i = 0; i < addresses.length; i++) {
      teamList[addresses[i]] = 1;
    }
  }

  // For marketing etc.
  function devMint(uint256 quantity) external onlyOwner {
    require(
      quantity % maxBatchSize == 0,
      "can only mint a multiple of the maxBatchSize"
    );
    uint256 numChunks = quantity / maxBatchSize;
    for (uint256 i = 0; i < numChunks; i++) {
      _safeMint(msg.sender, maxBatchSize);
    }
  }
  
  // // metadata URI
  string private _baseTokenURI;

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"maxPerAddressDuringMint_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint64","name":"publicPriceWei","type":"uint64"},{"internalType":"bool","name":"state","type":"bool"}],"name":"SetupSaleInfo","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleConfig","outputs":[{"internalType":"uint64","name":"publicPrice","type":"uint64"},{"internalType":"bool","name":"paused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"seedteamList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"address","name":"","type":"address"}],"name":"teamList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e0604052600060015560006008553480156200001b57600080fd5b5060405162005a8d38038062005a8d83398181016040528101906200004191906200034e565b6040518060400160405280600d81526020017f416c706861204b696e67646f6d000000000000000000000000000000000000008152506040518060400160405280600a81526020017f476174654b6565706572000000000000000000000000000000000000000000008152508361115c620000d1620000c5620001bb60201b60201c565b620001c360201b60201c565b6000811162000117576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010e9062000405565b60405180910390fd5b600082116200015d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015490620003e3565b60405180910390fd5b83600290805190602001906200017592919062000287565b5082600390805190602001906200018e92919062000287565b508160a0818152505080608081815250505050505060016009819055508060c08181525050505062000564565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002959062000442565b90600052602060002090601f016020900481019282620002b9576000855562000305565b82601f10620002d457805160ff191683800117855562000305565b8280016001018555821562000305579182015b8281111562000304578251825591602001919060010190620002e7565b5b50905062000314919062000318565b5090565b5b808211156200033357600081600090555060010162000319565b5090565b60008151905062000348816200054a565b92915050565b60008060408385031215620003685762000367620004a7565b5b6000620003788582860162000337565b92505060206200038b8582860162000337565b9150509250929050565b6000620003a460278362000427565b9150620003b182620004ac565b604082019050919050565b6000620003cb602e8362000427565b9150620003d882620004fb565b604082019050919050565b60006020820190508181036000830152620003fe8162000395565b9050919050565b600060208201905081810360008301526200042081620003bc565b9050919050565b600082825260208201905092915050565b6000819050919050565b600060028204905060018216806200045b57607f821691505b6020821081141562000472576200047162000478565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b620005558162000438565b81146200056157600080fd5b50565b60805160a05160c0516154ba620005d36000396000818161135f01526118bc015260008181610ed401528181610f4201528181610f7f0152818161291801528181612941015261318501526000818161193201528181611b170152818161268201526126b601526154ba6000f3fe6080604052600436106101ee5760003560e01c8063715018a61161010d578063b3ab66b0116100a0578063d7224ba01161006f578063d7224ba0146106ed578063dc33e68114610718578063e985e9c514610755578063eddc080d14610792578063f2fde38b146107bb576101ee565b8063b3ab66b014610654578063b88d4fde14610670578063ba7a86b814610699578063c87b56dd146106b0576101ee565b80639231ab2a116100dc5780639231ab2a146105ac57806395d89b41146105e9578063a22cb46514610614578063ac4460021461063d576101ee565b8063715018a6146105135780638bc35c2f1461052a5780638da5cb5b1461055557806390aa0b0f14610580576101ee565b8063375a069a116101855780634f6ccce7116101545780634f6ccce71461043357806355f804b3146104705780636352211e1461049957806370a08231146104d6576101ee565b8063375a069a1461037b57806342842e0e146103a45780634a62c3a7146103cd5780634b26699b146103f6576101ee565b806318160ddd116101c157806318160ddd146102c157806323b872dd146102ec5780632d20fb60146103155780632f745c591461033e576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190613a91565b6107e4565b60405161022791906141f4565b60405180910390f35b34801561023c57600080fd5b5061024561092e565b604051610252919061420f565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613b38565b6109c0565b60405161028f919061418d565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190613a08565b610a45565b005b3480156102cd57600080fd5b506102d6610b5e565b6040516102e3919061464c565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e91906138f2565b610b68565b005b34801561032157600080fd5b5061033c60048036038101906103379190613b38565b610b78565b005b34801561034a57600080fd5b5061036560048036038101906103609190613a08565b610c56565b604051610372919061464c565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190613b38565b610e54565b005b3480156103b057600080fd5b506103cb60048036038101906103c691906138f2565b610fbb565b005b3480156103d957600080fd5b506103f460048036038101906103ef9190613a48565b610fdb565b005b34801561040257600080fd5b5061041d60048036038101906104189190613885565b6110d9565b60405161042a919061464c565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190613b38565b6110f1565b604051610467919061464c565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190613aeb565b611144565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190613b38565b6111d6565b6040516104cd919061418d565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190613885565b6111ec565b60405161050a919061464c565b60405180910390f35b34801561051f57600080fd5b506105286112d5565b005b34801561053657600080fd5b5061053f61135d565b60405161054c919061464c565b60405180910390f35b34801561056157600080fd5b5061056a611381565b604051610577919061418d565b60405180910390f35b34801561058c57600080fd5b506105956113aa565b6040516105a3929190614667565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce9190613b38565b6113dd565b6040516105e09190614631565b60405180910390f35b3480156105f557600080fd5b506105fe6113f5565b60405161060b919061420f565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906139c8565b611487565b005b34801561064957600080fd5b50610652611608565b005b61066e60048036038101906106699190613b38565b611789565b005b34801561067c57600080fd5b5061069760048036038101906106929190613945565b6119c9565b005b3480156106a557600080fd5b506106ae611a25565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190613b38565b611bed565b6040516106e4919061420f565b60405180910390f35b3480156106f957600080fd5b50610702611c94565b60405161070f919061464c565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a9190613885565b611c9a565b60405161074c919061464c565b60405180910390f35b34801561076157600080fd5b5061077c600480360381019061077791906138b2565b611cac565b60405161078991906141f4565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b49190613b65565b611d40565b005b3480156107c757600080fd5b506107e260048036038101906107dd9190613885565b611e35565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108af57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061091757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610927575061092682611f2d565b5b9050919050565b60606002805461093d906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610969906149ff565b80156109b65780601f1061098b576101008083540402835291602001916109b6565b820191906000526020600020905b81548152906001019060200180831161099957829003601f168201915b5050505050905090565b60006109cb82611f97565b610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a01906145f1565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a50826111d6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab890614491565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ae0611fa5565b73ffffffffffffffffffffffffffffffffffffffff161480610b0f5750610b0e81610b09611fa5565b611cac565b5b610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590614331565b60405180910390fd5b610b59838383611fad565b505050565b6000600154905090565b610b7383838361205f565b505050565b610b80611fa5565b73ffffffffffffffffffffffffffffffffffffffff16610b9e611381565b73ffffffffffffffffffffffffffffffffffffffff1614610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb906143f1565b60405180910390fd5b60026009541415610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c31906145b1565b60405180910390fd5b6002600981905550610c4b81612618565b600160098190555050565b6000610c61836111ec565b8210610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9990614231565b60405180910390fd5b6000610cac610b5e565b905060008060005b83811015610e12576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610da657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dfe5786841415610def578195505050505050610e4e565b8380610dfa90614a62565b9450505b508080610e0a90614a62565b915050610cb4565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4590614571565b60405180910390fd5b92915050565b610e5c611fa5565b73ffffffffffffffffffffffffffffffffffffffff16610e7a611381565b73ffffffffffffffffffffffffffffffffffffffff1614610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec7906143f1565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000082610efe9190614aab565b14610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590614291565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000082610f6c91906147fc565b905060005b81811015610fb657610fa3337f00000000000000000000000000000000000000000000000000000000000000006128a6565b8080610fae90614a62565b915050610f71565b505050565b610fd6838383604051806020016040528060008152506119c9565b505050565b610fe3611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611001611381565b73ffffffffffffffffffffffffffffffffffffffff1614611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e906143f1565b60405180910390fd5b60005b81518110156110d5576001600b600084848151811061107c5761107b614b69565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806110cd90614a62565b91505061105a565b5050565b600b6020528060005260406000206000915090505481565b60006110fb610b5e565b821061113c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611133906142b1565b60405180910390fd5b819050919050565b61114c611fa5565b73ffffffffffffffffffffffffffffffffffffffff1661116a611381565b73ffffffffffffffffffffffffffffffffffffffff16146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b7906143f1565b60405180910390fd5b8181600c91906111d19291906135c6565b505050565b60006111e1826128c4565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561125d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125490614371565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6112dd611fa5565b73ffffffffffffffffffffffffffffffffffffffff166112fb611381565b73ffffffffffffffffffffffffffffffffffffffff1614611351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611348906143f1565b60405180910390fd5b61135b6000612ac7565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a8060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900460ff16905082565b6113e561364c565b6113ee826128c4565b9050919050565b606060038054611404906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611430906149ff565b801561147d5780601f106114525761010080835404028352916020019161147d565b820191906000526020600020905b81548152906001019060200180831161146057829003601f168201915b5050505050905090565b61148f611fa5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f490614431565b60405180910390fd5b806007600061150a611fa5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115b7611fa5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115fc91906141f4565b60405180910390a35050565b611610611fa5565b73ffffffffffffffffffffffffffffffffffffffff1661162e611381565b73ffffffffffffffffffffffffffffffffffffffff1614611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b906143f1565b60405180910390fd5b600260095414156116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c1906145b1565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff16476040516116f890614178565b60006040518083038185875af1925050503d8060008114611735576040519150601f19603f3d011682016040523d82523d6000602084013e61173a565b606091505b505090508061177e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611775906144b1565b60405180910390fd5b506001600981905550565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90614311565b60405180910390fd5b6000600a6040518060400160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900460ff16151515158152505090506000816020015190506000826000015167ffffffffffffffff16905061187b8183612b8b565b6118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b190614471565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000846118e533611c9a565b6118ef91906147a6565b1115611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192790614551565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008461195a610b5e565b61196491906147a6565b11156119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c90614391565b60405180910390fd5b6119af33856128a6565b6119c384826119be919061482d565b612ba3565b50505050565b6119d484848461205f565b6119e084848484612c44565b611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a16906144d1565b60405180910390fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a90614311565b60405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c906143d1565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006003611b40610b5e565b611b4a91906147a6565b1115611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8290614391565b60405180910390fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611bdb906149d5565b9190505550611beb3360036128a6565b565b6060611bf882611f97565b611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90614411565b60405180910390fd5b6000611c41612ddb565b90506000815111611c615760405180602001604052806000815250611c8c565b80611c6b84612e6d565b604051602001611c7c929190614154565b6040516020818303038152906040525b915050919050565b60085481565b6000611ca582612fce565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d48611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611d66611381565b73ffffffffffffffffffffffffffffffffffffffff1614611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db3906143f1565b60405180910390fd5b60405180604001604052808367ffffffffffffffff168152602001821515815250600a60008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a81548160ff0219169083151502179055509050505050565b611e3d611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611e5b611381565b73ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906143f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614251565b60405180910390fd5b611f2a81612ac7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061206a826128c4565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612091611fa5565b73ffffffffffffffffffffffffffffffffffffffff1614806120ed57506120b6611fa5565b73ffffffffffffffffffffffffffffffffffffffff166120d5846109c0565b73ffffffffffffffffffffffffffffffffffffffff16145b8061210957506121088260000151612103611fa5565b611cac565b5b90508061214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214290614451565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b4906143b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561222d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612224906142d1565b60405180910390fd5b61223a85858560016130b7565b61224a6000848460000151611fad565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166122b89190614887565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661235c9190614760565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461246291906147a6565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125a8576124d881611f97565b156125a7576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461261086868660016130bd565b505050505050565b6000600854905060008211612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990614351565b60405180910390fd5b60006001838361267291906147a6565b61267c91906148bb565b905060017f00000000000000000000000000000000000000000000000000000000000000006126ab91906148bb565b8111156126e25760017f00000000000000000000000000000000000000000000000000000000000000006126df91906148bb565b90505b6126eb81611f97565b61272a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272190614591565b60405180910390fd5b60008290505b81811161288d57600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561287a5760006127ad826128c4565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b808061288590614a62565b915050612730565b5060018161289b91906147a6565b600881905550505050565b6128c08282604051806020016040528060008152506130c3565b5050565b6128cc61364c565b6128d582611f97565b612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b90614271565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106129785760017f00000000000000000000000000000000000000000000000000000000000000008461296b91906148bb565b61297591906147a6565b90505b60008390505b818110612a86576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a7257809350505050612ac2565b508080612a7e906149d5565b91505061297e565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab9906145d1565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808314158015612b9b575081155b905092915050565b80341015612be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdd906144f1565b60405180910390fd5b80341115612c41573373ffffffffffffffffffffffffffffffffffffffff166108fc8234612c1491906148bb565b9081150290604051600060405180830381858888f19350505050158015612c3f573d6000803e3d6000fd5b505b50565b6000612c658473ffffffffffffffffffffffffffffffffffffffff166135a3565b15612dce578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c8e611fa5565b8786866040518563ffffffff1660e01b8152600401612cb094939291906141a8565b602060405180830381600087803b158015612cca57600080fd5b505af1925050508015612cfb57506040513d601f19601f82011682018060405250810190612cf89190613abe565b60015b612d7e573d8060008114612d2b576040519150601f19603f3d011682016040523d82523d6000602084013e612d30565b606091505b50600081511415612d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6d906144d1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dd3565b600190505b949350505050565b6060600c8054612dea906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054612e16906149ff565b8015612e635780601f10612e3857610100808354040283529160200191612e63565b820191906000526020600020905b815481529060010190602001808311612e4657829003601f168201915b5050505050905090565b60606000821415612eb5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fc9565b600082905060005b60008214612ee7578080612ed090614a62565b915050600a82612ee091906147fc565b9150612ebd565b60008167ffffffffffffffff811115612f0357612f02614b98565b5b6040519080825280601f01601f191660200182016040528015612f355781602001600182028036833780820191505090505b5090505b60008514612fc257600182612f4e91906148bb565b9150600a85612f5d9190614aab565b6030612f6991906147a6565b60f81b818381518110612f7f57612f7e614b69565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fbb91906147fc565b9450612f39565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561303f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613036906142f1565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561313a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313190614531565b60405180910390fd5b61314381611f97565b15613183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317a90614511565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156131e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dd90614611565b60405180910390fd5b6131f360008583866130b7565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516132f09190614760565b6fffffffffffffffffffffffffffffffff1681526020018583602001516133179190614760565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561358657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135266000888488612c44565b613565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355c906144d1565b60405180910390fd5b818061357090614a62565b925050808061357e90614a62565b9150506134b5565b508060018190555061359b60008785886130bd565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546135d2906149ff565b90600052602060002090601f0160209004810192826135f4576000855561363b565b82601f1061360d57803560ff191683800117855561363b565b8280016001018555821561363b579182015b8281111561363a57823582559160200191906001019061361f565b5b5090506136489190613686565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561369f576000816000905550600101613687565b5090565b60006136b66136b1846146b5565b614690565b905080838252602082019050828560208602820111156136d9576136d8614bd1565b5b60005b8581101561370957816136ef8882613755565b8452602084019350602083019250506001810190506136dc565b5050509392505050565b6000613726613721846146e1565b614690565b90508281526020810184848401111561374257613741614bd6565b5b61374d848285614993565b509392505050565b60008135905061376481615411565b92915050565b600082601f83011261377f5761377e614bcc565b5b813561378f8482602086016136a3565b91505092915050565b6000813590506137a781615428565b92915050565b6000813590506137bc8161543f565b92915050565b6000815190506137d18161543f565b92915050565b600082601f8301126137ec576137eb614bcc565b5b81356137fc848260208601613713565b91505092915050565b60008083601f84011261381b5761381a614bcc565b5b8235905067ffffffffffffffff81111561383857613837614bc7565b5b60208301915083600182028301111561385457613853614bd1565b5b9250929050565b60008135905061386a81615456565b92915050565b60008135905061387f8161546d565b92915050565b60006020828403121561389b5761389a614be0565b5b60006138a984828501613755565b91505092915050565b600080604083850312156138c9576138c8614be0565b5b60006138d785828601613755565b92505060206138e885828601613755565b9150509250929050565b60008060006060848603121561390b5761390a614be0565b5b600061391986828701613755565b935050602061392a86828701613755565b925050604061393b8682870161385b565b9150509250925092565b6000806000806080858703121561395f5761395e614be0565b5b600061396d87828801613755565b945050602061397e87828801613755565b935050604061398f8782880161385b565b925050606085013567ffffffffffffffff8111156139b0576139af614bdb565b5b6139bc878288016137d7565b91505092959194509250565b600080604083850312156139df576139de614be0565b5b60006139ed85828601613755565b92505060206139fe85828601613798565b9150509250929050565b60008060408385031215613a1f57613a1e614be0565b5b6000613a2d85828601613755565b9250506020613a3e8582860161385b565b9150509250929050565b600060208284031215613a5e57613a5d614be0565b5b600082013567ffffffffffffffff811115613a7c57613a7b614bdb565b5b613a888482850161376a565b91505092915050565b600060208284031215613aa757613aa6614be0565b5b6000613ab5848285016137ad565b91505092915050565b600060208284031215613ad457613ad3614be0565b5b6000613ae2848285016137c2565b91505092915050565b60008060208385031215613b0257613b01614be0565b5b600083013567ffffffffffffffff811115613b2057613b1f614bdb565b5b613b2c85828601613805565b92509250509250929050565b600060208284031215613b4e57613b4d614be0565b5b6000613b5c8482850161385b565b91505092915050565b60008060408385031215613b7c57613b7b614be0565b5b6000613b8a85828601613870565b9250506020613b9b85828601613798565b9150509250929050565b613bae816148ef565b82525050565b613bbd816148ef565b82525050565b613bcc81614901565b82525050565b6000613bdd82614712565b613be78185614728565b9350613bf78185602086016149a2565b613c0081614be5565b840191505092915050565b6000613c168261471d565b613c208185614744565b9350613c308185602086016149a2565b613c3981614be5565b840191505092915050565b6000613c4f8261471d565b613c598185614755565b9350613c698185602086016149a2565b80840191505092915050565b6000613c82602283614744565b9150613c8d82614bf6565b604082019050919050565b6000613ca5602683614744565b9150613cb082614c45565b604082019050919050565b6000613cc8602a83614744565b9150613cd382614c94565b604082019050919050565b6000613ceb602c83614744565b9150613cf682614ce3565b604082019050919050565b6000613d0e602383614744565b9150613d1982614d32565b604082019050919050565b6000613d31602583614744565b9150613d3c82614d81565b604082019050919050565b6000613d54603183614744565b9150613d5f82614dd0565b604082019050919050565b6000613d77601e83614744565b9150613d8282614e1f565b602082019050919050565b6000613d9a603983614744565b9150613da582614e48565b604082019050919050565b6000613dbd601883614744565b9150613dc882614e97565b602082019050919050565b6000613de0602b83614744565b9150613deb82614ec0565b604082019050919050565b6000613e03601283614744565b9150613e0e82614f0f565b602082019050919050565b6000613e26602683614744565b9150613e3182614f38565b604082019050919050565b6000613e49601e83614744565b9150613e5482614f87565b602082019050919050565b6000613e6c602083614744565b9150613e7782614fb0565b602082019050919050565b6000613e8f602f83614744565b9150613e9a82614fd9565b604082019050919050565b6000613eb2601a83614744565b9150613ebd82615028565b602082019050919050565b6000613ed5603283614744565b9150613ee082615051565b604082019050919050565b6000613ef8601d83614744565b9150613f03826150a0565b602082019050919050565b6000613f1b602283614744565b9150613f26826150c9565b604082019050919050565b6000613f3e600083614739565b9150613f4982615118565b600082019050919050565b6000613f61601083614744565b9150613f6c8261511b565b602082019050919050565b6000613f84603383614744565b9150613f8f82615144565b604082019050919050565b6000613fa7601683614744565b9150613fb282615193565b602082019050919050565b6000613fca601d83614744565b9150613fd5826151bc565b602082019050919050565b6000613fed602183614744565b9150613ff8826151e5565b604082019050919050565b6000614010601683614744565b915061401b82615234565b602082019050919050565b6000614033602e83614744565b915061403e8261525d565b604082019050919050565b6000614056602683614744565b9150614061826152ac565b604082019050919050565b6000614079601f83614744565b9150614084826152fb565b602082019050919050565b600061409c602f83614744565b91506140a782615324565b604082019050919050565b60006140bf602d83614744565b91506140ca82615373565b604082019050919050565b60006140e2602283614744565b91506140ed826153c2565b604082019050919050565b60408201600082015161410e6000850182613ba5565b5060208201516141216020850182614136565b50505050565b61413081614975565b82525050565b61413f8161497f565b82525050565b61414e8161497f565b82525050565b60006141608285613c44565b915061416c8284613c44565b91508190509392505050565b600061418382613f31565b9150819050919050565b60006020820190506141a26000830184613bb4565b92915050565b60006080820190506141bd6000830187613bb4565b6141ca6020830186613bb4565b6141d76040830185614127565b81810360608301526141e98184613bd2565b905095945050505050565b60006020820190506142096000830184613bc3565b92915050565b600060208201905081810360008301526142298184613c0b565b905092915050565b6000602082019050818103600083015261424a81613c75565b9050919050565b6000602082019050818103600083015261426a81613c98565b9050919050565b6000602082019050818103600083015261428a81613cbb565b9050919050565b600060208201905081810360008301526142aa81613cde565b9050919050565b600060208201905081810360008301526142ca81613d01565b9050919050565b600060208201905081810360008301526142ea81613d24565b9050919050565b6000602082019050818103600083015261430a81613d47565b9050919050565b6000602082019050818103600083015261432a81613d6a565b9050919050565b6000602082019050818103600083015261434a81613d8d565b9050919050565b6000602082019050818103600083015261436a81613db0565b9050919050565b6000602082019050818103600083015261438a81613dd3565b9050919050565b600060208201905081810360008301526143aa81613df6565b9050919050565b600060208201905081810360008301526143ca81613e19565b9050919050565b600060208201905081810360008301526143ea81613e3c565b9050919050565b6000602082019050818103600083015261440a81613e5f565b9050919050565b6000602082019050818103600083015261442a81613e82565b9050919050565b6000602082019050818103600083015261444a81613ea5565b9050919050565b6000602082019050818103600083015261446a81613ec8565b9050919050565b6000602082019050818103600083015261448a81613eeb565b9050919050565b600060208201905081810360008301526144aa81613f0e565b9050919050565b600060208201905081810360008301526144ca81613f54565b9050919050565b600060208201905081810360008301526144ea81613f77565b9050919050565b6000602082019050818103600083015261450a81613f9a565b9050919050565b6000602082019050818103600083015261452a81613fbd565b9050919050565b6000602082019050818103600083015261454a81613fe0565b9050919050565b6000602082019050818103600083015261456a81614003565b9050919050565b6000602082019050818103600083015261458a81614026565b9050919050565b600060208201905081810360008301526145aa81614049565b9050919050565b600060208201905081810360008301526145ca8161406c565b9050919050565b600060208201905081810360008301526145ea8161408f565b9050919050565b6000602082019050818103600083015261460a816140b2565b9050919050565b6000602082019050818103600083015261462a816140d5565b9050919050565b600060408201905061464660008301846140f8565b92915050565b60006020820190506146616000830184614127565b92915050565b600060408201905061467c6000830185614145565b6146896020830184613bc3565b9392505050565b600061469a6146ab565b90506146a68282614a31565b919050565b6000604051905090565b600067ffffffffffffffff8211156146d0576146cf614b98565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156146fc576146fb614b98565b5b61470582614be5565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061476b82614939565b915061477683614939565b9250826fffffffffffffffffffffffffffffffff0382111561479b5761479a614adc565b5b828201905092915050565b60006147b182614975565b91506147bc83614975565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147f1576147f0614adc565b5b828201905092915050565b600061480782614975565b915061481283614975565b92508261482257614821614b0b565b5b828204905092915050565b600061483882614975565b915061484383614975565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561487c5761487b614adc565b5b828202905092915050565b600061489282614939565b915061489d83614939565b9250828210156148b0576148af614adc565b5b828203905092915050565b60006148c682614975565b91506148d183614975565b9250828210156148e4576148e3614adc565b5b828203905092915050565b60006148fa82614955565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156149c05780820151818401526020810190506149a5565b838111156149cf576000848401525b50505050565b60006149e082614975565b915060008214156149f4576149f3614adc565b5b600182039050919050565b60006002820490506001821680614a1757607f821691505b60208210811415614a2b57614a2a614b3a565b5b50919050565b614a3a82614be5565b810181811067ffffffffffffffff82111715614a5957614a58614b98565b5b80604052505050565b6000614a6d82614975565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614aa057614a9f614adc565b5b600182019050919050565b6000614ab682614975565b9150614ac183614975565b925082614ad157614ad0614b0b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656c696769626c6520666f72207465616d4c697374206d696e740000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61541a816148ef565b811461542557600080fd5b50565b61543181614901565b811461543c57600080fd5b50565b6154488161490d565b811461545357600080fd5b50565b61545f81614975565b811461546a57600080fd5b50565b6154768161497f565b811461548157600080fd5b5056fea2646970667358221220948405d2dc1329ff01085dd2380be0b140c493f9e15bf773c0974232e95197d664736f6c63430008070033000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000028

Deployed Bytecode

0x6080604052600436106101ee5760003560e01c8063715018a61161010d578063b3ab66b0116100a0578063d7224ba01161006f578063d7224ba0146106ed578063dc33e68114610718578063e985e9c514610755578063eddc080d14610792578063f2fde38b146107bb576101ee565b8063b3ab66b014610654578063b88d4fde14610670578063ba7a86b814610699578063c87b56dd146106b0576101ee565b80639231ab2a116100dc5780639231ab2a146105ac57806395d89b41146105e9578063a22cb46514610614578063ac4460021461063d576101ee565b8063715018a6146105135780638bc35c2f1461052a5780638da5cb5b1461055557806390aa0b0f14610580576101ee565b8063375a069a116101855780634f6ccce7116101545780634f6ccce71461043357806355f804b3146104705780636352211e1461049957806370a08231146104d6576101ee565b8063375a069a1461037b57806342842e0e146103a45780634a62c3a7146103cd5780634b26699b146103f6576101ee565b806318160ddd116101c157806318160ddd146102c157806323b872dd146102ec5780632d20fb60146103155780632f745c591461033e576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190613a91565b6107e4565b60405161022791906141f4565b60405180910390f35b34801561023c57600080fd5b5061024561092e565b604051610252919061420f565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613b38565b6109c0565b60405161028f919061418d565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190613a08565b610a45565b005b3480156102cd57600080fd5b506102d6610b5e565b6040516102e3919061464c565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e91906138f2565b610b68565b005b34801561032157600080fd5b5061033c60048036038101906103379190613b38565b610b78565b005b34801561034a57600080fd5b5061036560048036038101906103609190613a08565b610c56565b604051610372919061464c565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190613b38565b610e54565b005b3480156103b057600080fd5b506103cb60048036038101906103c691906138f2565b610fbb565b005b3480156103d957600080fd5b506103f460048036038101906103ef9190613a48565b610fdb565b005b34801561040257600080fd5b5061041d60048036038101906104189190613885565b6110d9565b60405161042a919061464c565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190613b38565b6110f1565b604051610467919061464c565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190613aeb565b611144565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190613b38565b6111d6565b6040516104cd919061418d565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190613885565b6111ec565b60405161050a919061464c565b60405180910390f35b34801561051f57600080fd5b506105286112d5565b005b34801561053657600080fd5b5061053f61135d565b60405161054c919061464c565b60405180910390f35b34801561056157600080fd5b5061056a611381565b604051610577919061418d565b60405180910390f35b34801561058c57600080fd5b506105956113aa565b6040516105a3929190614667565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce9190613b38565b6113dd565b6040516105e09190614631565b60405180910390f35b3480156105f557600080fd5b506105fe6113f5565b60405161060b919061420f565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906139c8565b611487565b005b34801561064957600080fd5b50610652611608565b005b61066e60048036038101906106699190613b38565b611789565b005b34801561067c57600080fd5b5061069760048036038101906106929190613945565b6119c9565b005b3480156106a557600080fd5b506106ae611a25565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190613b38565b611bed565b6040516106e4919061420f565b60405180910390f35b3480156106f957600080fd5b50610702611c94565b60405161070f919061464c565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a9190613885565b611c9a565b60405161074c919061464c565b60405180910390f35b34801561076157600080fd5b5061077c600480360381019061077791906138b2565b611cac565b60405161078991906141f4565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b49190613b65565b611d40565b005b3480156107c757600080fd5b506107e260048036038101906107dd9190613885565b611e35565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108af57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061091757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610927575061092682611f2d565b5b9050919050565b60606002805461093d906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610969906149ff565b80156109b65780601f1061098b576101008083540402835291602001916109b6565b820191906000526020600020905b81548152906001019060200180831161099957829003601f168201915b5050505050905090565b60006109cb82611f97565b610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a01906145f1565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a50826111d6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab890614491565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ae0611fa5565b73ffffffffffffffffffffffffffffffffffffffff161480610b0f5750610b0e81610b09611fa5565b611cac565b5b610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590614331565b60405180910390fd5b610b59838383611fad565b505050565b6000600154905090565b610b7383838361205f565b505050565b610b80611fa5565b73ffffffffffffffffffffffffffffffffffffffff16610b9e611381565b73ffffffffffffffffffffffffffffffffffffffff1614610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb906143f1565b60405180910390fd5b60026009541415610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c31906145b1565b60405180910390fd5b6002600981905550610c4b81612618565b600160098190555050565b6000610c61836111ec565b8210610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9990614231565b60405180910390fd5b6000610cac610b5e565b905060008060005b83811015610e12576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610da657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dfe5786841415610def578195505050505050610e4e565b8380610dfa90614a62565b9450505b508080610e0a90614a62565b915050610cb4565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4590614571565b60405180910390fd5b92915050565b610e5c611fa5565b73ffffffffffffffffffffffffffffffffffffffff16610e7a611381565b73ffffffffffffffffffffffffffffffffffffffff1614610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec7906143f1565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a82610efe9190614aab565b14610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590614291565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a82610f6c91906147fc565b905060005b81811015610fb657610fa3337f000000000000000000000000000000000000000000000000000000000000000a6128a6565b8080610fae90614a62565b915050610f71565b505050565b610fd6838383604051806020016040528060008152506119c9565b505050565b610fe3611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611001611381565b73ffffffffffffffffffffffffffffffffffffffff1614611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e906143f1565b60405180910390fd5b60005b81518110156110d5576001600b600084848151811061107c5761107b614b69565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806110cd90614a62565b91505061105a565b5050565b600b6020528060005260406000206000915090505481565b60006110fb610b5e565b821061113c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611133906142b1565b60405180910390fd5b819050919050565b61114c611fa5565b73ffffffffffffffffffffffffffffffffffffffff1661116a611381565b73ffffffffffffffffffffffffffffffffffffffff16146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b7906143f1565b60405180910390fd5b8181600c91906111d19291906135c6565b505050565b60006111e1826128c4565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561125d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125490614371565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6112dd611fa5565b73ffffffffffffffffffffffffffffffffffffffff166112fb611381565b73ffffffffffffffffffffffffffffffffffffffff1614611351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611348906143f1565b60405180910390fd5b61135b6000612ac7565b565b7f000000000000000000000000000000000000000000000000000000000000002881565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a8060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900460ff16905082565b6113e561364c565b6113ee826128c4565b9050919050565b606060038054611404906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611430906149ff565b801561147d5780601f106114525761010080835404028352916020019161147d565b820191906000526020600020905b81548152906001019060200180831161146057829003601f168201915b5050505050905090565b61148f611fa5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f490614431565b60405180910390fd5b806007600061150a611fa5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115b7611fa5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115fc91906141f4565b60405180910390a35050565b611610611fa5565b73ffffffffffffffffffffffffffffffffffffffff1661162e611381565b73ffffffffffffffffffffffffffffffffffffffff1614611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b906143f1565b60405180910390fd5b600260095414156116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c1906145b1565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff16476040516116f890614178565b60006040518083038185875af1925050503d8060008114611735576040519150601f19603f3d011682016040523d82523d6000602084013e61173a565b606091505b505090508061177e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611775906144b1565b60405180910390fd5b506001600981905550565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90614311565b60405180910390fd5b6000600a6040518060400160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900460ff16151515158152505090506000816020015190506000826000015167ffffffffffffffff16905061187b8183612b8b565b6118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b190614471565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000028846118e533611c9a565b6118ef91906147a6565b1115611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192790614551565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000115c8461195a610b5e565b61196491906147a6565b11156119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c90614391565b60405180910390fd5b6119af33856128a6565b6119c384826119be919061482d565b612ba3565b50505050565b6119d484848461205f565b6119e084848484612c44565b611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a16906144d1565b60405180910390fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a90614311565b60405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c906143d1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000115c6003611b40610b5e565b611b4a91906147a6565b1115611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8290614391565b60405180910390fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611bdb906149d5565b9190505550611beb3360036128a6565b565b6060611bf882611f97565b611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90614411565b60405180910390fd5b6000611c41612ddb565b90506000815111611c615760405180602001604052806000815250611c8c565b80611c6b84612e6d565b604051602001611c7c929190614154565b6040516020818303038152906040525b915050919050565b60085481565b6000611ca582612fce565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d48611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611d66611381565b73ffffffffffffffffffffffffffffffffffffffff1614611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db3906143f1565b60405180910390fd5b60405180604001604052808367ffffffffffffffff168152602001821515815250600a60008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a81548160ff0219169083151502179055509050505050565b611e3d611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611e5b611381565b73ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906143f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614251565b60405180910390fd5b611f2a81612ac7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061206a826128c4565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612091611fa5565b73ffffffffffffffffffffffffffffffffffffffff1614806120ed57506120b6611fa5565b73ffffffffffffffffffffffffffffffffffffffff166120d5846109c0565b73ffffffffffffffffffffffffffffffffffffffff16145b8061210957506121088260000151612103611fa5565b611cac565b5b90508061214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214290614451565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b4906143b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561222d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612224906142d1565b60405180910390fd5b61223a85858560016130b7565b61224a6000848460000151611fad565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166122b89190614887565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661235c9190614760565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461246291906147a6565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125a8576124d881611f97565b156125a7576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461261086868660016130bd565b505050505050565b6000600854905060008211612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990614351565b60405180910390fd5b60006001838361267291906147a6565b61267c91906148bb565b905060017f000000000000000000000000000000000000000000000000000000000000115c6126ab91906148bb565b8111156126e25760017f000000000000000000000000000000000000000000000000000000000000115c6126df91906148bb565b90505b6126eb81611f97565b61272a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272190614591565b60405180910390fd5b60008290505b81811161288d57600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561287a5760006127ad826128c4565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b808061288590614a62565b915050612730565b5060018161289b91906147a6565b600881905550505050565b6128c08282604051806020016040528060008152506130c3565b5050565b6128cc61364c565b6128d582611f97565b612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b90614271565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a83106129785760017f000000000000000000000000000000000000000000000000000000000000000a8461296b91906148bb565b61297591906147a6565b90505b60008390505b818110612a86576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a7257809350505050612ac2565b508080612a7e906149d5565b91505061297e565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab9906145d1565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808314158015612b9b575081155b905092915050565b80341015612be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdd906144f1565b60405180910390fd5b80341115612c41573373ffffffffffffffffffffffffffffffffffffffff166108fc8234612c1491906148bb565b9081150290604051600060405180830381858888f19350505050158015612c3f573d6000803e3d6000fd5b505b50565b6000612c658473ffffffffffffffffffffffffffffffffffffffff166135a3565b15612dce578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c8e611fa5565b8786866040518563ffffffff1660e01b8152600401612cb094939291906141a8565b602060405180830381600087803b158015612cca57600080fd5b505af1925050508015612cfb57506040513d601f19601f82011682018060405250810190612cf89190613abe565b60015b612d7e573d8060008114612d2b576040519150601f19603f3d011682016040523d82523d6000602084013e612d30565b606091505b50600081511415612d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6d906144d1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dd3565b600190505b949350505050565b6060600c8054612dea906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054612e16906149ff565b8015612e635780601f10612e3857610100808354040283529160200191612e63565b820191906000526020600020905b815481529060010190602001808311612e4657829003601f168201915b5050505050905090565b60606000821415612eb5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fc9565b600082905060005b60008214612ee7578080612ed090614a62565b915050600a82612ee091906147fc565b9150612ebd565b60008167ffffffffffffffff811115612f0357612f02614b98565b5b6040519080825280601f01601f191660200182016040528015612f355781602001600182028036833780820191505090505b5090505b60008514612fc257600182612f4e91906148bb565b9150600a85612f5d9190614aab565b6030612f6991906147a6565b60f81b818381518110612f7f57612f7e614b69565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fbb91906147fc565b9450612f39565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561303f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613036906142f1565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561313a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313190614531565b60405180910390fd5b61314381611f97565b15613183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317a90614511565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a8311156131e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dd90614611565b60405180910390fd5b6131f360008583866130b7565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516132f09190614760565b6fffffffffffffffffffffffffffffffff1681526020018583602001516133179190614760565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561358657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135266000888488612c44565b613565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355c906144d1565b60405180910390fd5b818061357090614a62565b925050808061357e90614a62565b9150506134b5565b508060018190555061359b60008785886130bd565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546135d2906149ff565b90600052602060002090601f0160209004810192826135f4576000855561363b565b82601f1061360d57803560ff191683800117855561363b565b8280016001018555821561363b579182015b8281111561363a57823582559160200191906001019061361f565b5b5090506136489190613686565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561369f576000816000905550600101613687565b5090565b60006136b66136b1846146b5565b614690565b905080838252602082019050828560208602820111156136d9576136d8614bd1565b5b60005b8581101561370957816136ef8882613755565b8452602084019350602083019250506001810190506136dc565b5050509392505050565b6000613726613721846146e1565b614690565b90508281526020810184848401111561374257613741614bd6565b5b61374d848285614993565b509392505050565b60008135905061376481615411565b92915050565b600082601f83011261377f5761377e614bcc565b5b813561378f8482602086016136a3565b91505092915050565b6000813590506137a781615428565b92915050565b6000813590506137bc8161543f565b92915050565b6000815190506137d18161543f565b92915050565b600082601f8301126137ec576137eb614bcc565b5b81356137fc848260208601613713565b91505092915050565b60008083601f84011261381b5761381a614bcc565b5b8235905067ffffffffffffffff81111561383857613837614bc7565b5b60208301915083600182028301111561385457613853614bd1565b5b9250929050565b60008135905061386a81615456565b92915050565b60008135905061387f8161546d565b92915050565b60006020828403121561389b5761389a614be0565b5b60006138a984828501613755565b91505092915050565b600080604083850312156138c9576138c8614be0565b5b60006138d785828601613755565b92505060206138e885828601613755565b9150509250929050565b60008060006060848603121561390b5761390a614be0565b5b600061391986828701613755565b935050602061392a86828701613755565b925050604061393b8682870161385b565b9150509250925092565b6000806000806080858703121561395f5761395e614be0565b5b600061396d87828801613755565b945050602061397e87828801613755565b935050604061398f8782880161385b565b925050606085013567ffffffffffffffff8111156139b0576139af614bdb565b5b6139bc878288016137d7565b91505092959194509250565b600080604083850312156139df576139de614be0565b5b60006139ed85828601613755565b92505060206139fe85828601613798565b9150509250929050565b60008060408385031215613a1f57613a1e614be0565b5b6000613a2d85828601613755565b9250506020613a3e8582860161385b565b9150509250929050565b600060208284031215613a5e57613a5d614be0565b5b600082013567ffffffffffffffff811115613a7c57613a7b614bdb565b5b613a888482850161376a565b91505092915050565b600060208284031215613aa757613aa6614be0565b5b6000613ab5848285016137ad565b91505092915050565b600060208284031215613ad457613ad3614be0565b5b6000613ae2848285016137c2565b91505092915050565b60008060208385031215613b0257613b01614be0565b5b600083013567ffffffffffffffff811115613b2057613b1f614bdb565b5b613b2c85828601613805565b92509250509250929050565b600060208284031215613b4e57613b4d614be0565b5b6000613b5c8482850161385b565b91505092915050565b60008060408385031215613b7c57613b7b614be0565b5b6000613b8a85828601613870565b9250506020613b9b85828601613798565b9150509250929050565b613bae816148ef565b82525050565b613bbd816148ef565b82525050565b613bcc81614901565b82525050565b6000613bdd82614712565b613be78185614728565b9350613bf78185602086016149a2565b613c0081614be5565b840191505092915050565b6000613c168261471d565b613c208185614744565b9350613c308185602086016149a2565b613c3981614be5565b840191505092915050565b6000613c4f8261471d565b613c598185614755565b9350613c698185602086016149a2565b80840191505092915050565b6000613c82602283614744565b9150613c8d82614bf6565b604082019050919050565b6000613ca5602683614744565b9150613cb082614c45565b604082019050919050565b6000613cc8602a83614744565b9150613cd382614c94565b604082019050919050565b6000613ceb602c83614744565b9150613cf682614ce3565b604082019050919050565b6000613d0e602383614744565b9150613d1982614d32565b604082019050919050565b6000613d31602583614744565b9150613d3c82614d81565b604082019050919050565b6000613d54603183614744565b9150613d5f82614dd0565b604082019050919050565b6000613d77601e83614744565b9150613d8282614e1f565b602082019050919050565b6000613d9a603983614744565b9150613da582614e48565b604082019050919050565b6000613dbd601883614744565b9150613dc882614e97565b602082019050919050565b6000613de0602b83614744565b9150613deb82614ec0565b604082019050919050565b6000613e03601283614744565b9150613e0e82614f0f565b602082019050919050565b6000613e26602683614744565b9150613e3182614f38565b604082019050919050565b6000613e49601e83614744565b9150613e5482614f87565b602082019050919050565b6000613e6c602083614744565b9150613e7782614fb0565b602082019050919050565b6000613e8f602f83614744565b9150613e9a82614fd9565b604082019050919050565b6000613eb2601a83614744565b9150613ebd82615028565b602082019050919050565b6000613ed5603283614744565b9150613ee082615051565b604082019050919050565b6000613ef8601d83614744565b9150613f03826150a0565b602082019050919050565b6000613f1b602283614744565b9150613f26826150c9565b604082019050919050565b6000613f3e600083614739565b9150613f4982615118565b600082019050919050565b6000613f61601083614744565b9150613f6c8261511b565b602082019050919050565b6000613f84603383614744565b9150613f8f82615144565b604082019050919050565b6000613fa7601683614744565b9150613fb282615193565b602082019050919050565b6000613fca601d83614744565b9150613fd5826151bc565b602082019050919050565b6000613fed602183614744565b9150613ff8826151e5565b604082019050919050565b6000614010601683614744565b915061401b82615234565b602082019050919050565b6000614033602e83614744565b915061403e8261525d565b604082019050919050565b6000614056602683614744565b9150614061826152ac565b604082019050919050565b6000614079601f83614744565b9150614084826152fb565b602082019050919050565b600061409c602f83614744565b91506140a782615324565b604082019050919050565b60006140bf602d83614744565b91506140ca82615373565b604082019050919050565b60006140e2602283614744565b91506140ed826153c2565b604082019050919050565b60408201600082015161410e6000850182613ba5565b5060208201516141216020850182614136565b50505050565b61413081614975565b82525050565b61413f8161497f565b82525050565b61414e8161497f565b82525050565b60006141608285613c44565b915061416c8284613c44565b91508190509392505050565b600061418382613f31565b9150819050919050565b60006020820190506141a26000830184613bb4565b92915050565b60006080820190506141bd6000830187613bb4565b6141ca6020830186613bb4565b6141d76040830185614127565b81810360608301526141e98184613bd2565b905095945050505050565b60006020820190506142096000830184613bc3565b92915050565b600060208201905081810360008301526142298184613c0b565b905092915050565b6000602082019050818103600083015261424a81613c75565b9050919050565b6000602082019050818103600083015261426a81613c98565b9050919050565b6000602082019050818103600083015261428a81613cbb565b9050919050565b600060208201905081810360008301526142aa81613cde565b9050919050565b600060208201905081810360008301526142ca81613d01565b9050919050565b600060208201905081810360008301526142ea81613d24565b9050919050565b6000602082019050818103600083015261430a81613d47565b9050919050565b6000602082019050818103600083015261432a81613d6a565b9050919050565b6000602082019050818103600083015261434a81613d8d565b9050919050565b6000602082019050818103600083015261436a81613db0565b9050919050565b6000602082019050818103600083015261438a81613dd3565b9050919050565b600060208201905081810360008301526143aa81613df6565b9050919050565b600060208201905081810360008301526143ca81613e19565b9050919050565b600060208201905081810360008301526143ea81613e3c565b9050919050565b6000602082019050818103600083015261440a81613e5f565b9050919050565b6000602082019050818103600083015261442a81613e82565b9050919050565b6000602082019050818103600083015261444a81613ea5565b9050919050565b6000602082019050818103600083015261446a81613ec8565b9050919050565b6000602082019050818103600083015261448a81613eeb565b9050919050565b600060208201905081810360008301526144aa81613f0e565b9050919050565b600060208201905081810360008301526144ca81613f54565b9050919050565b600060208201905081810360008301526144ea81613f77565b9050919050565b6000602082019050818103600083015261450a81613f9a565b9050919050565b6000602082019050818103600083015261452a81613fbd565b9050919050565b6000602082019050818103600083015261454a81613fe0565b9050919050565b6000602082019050818103600083015261456a81614003565b9050919050565b6000602082019050818103600083015261458a81614026565b9050919050565b600060208201905081810360008301526145aa81614049565b9050919050565b600060208201905081810360008301526145ca8161406c565b9050919050565b600060208201905081810360008301526145ea8161408f565b9050919050565b6000602082019050818103600083015261460a816140b2565b9050919050565b6000602082019050818103600083015261462a816140d5565b9050919050565b600060408201905061464660008301846140f8565b92915050565b60006020820190506146616000830184614127565b92915050565b600060408201905061467c6000830185614145565b6146896020830184613bc3565b9392505050565b600061469a6146ab565b90506146a68282614a31565b919050565b6000604051905090565b600067ffffffffffffffff8211156146d0576146cf614b98565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156146fc576146fb614b98565b5b61470582614be5565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061476b82614939565b915061477683614939565b9250826fffffffffffffffffffffffffffffffff0382111561479b5761479a614adc565b5b828201905092915050565b60006147b182614975565b91506147bc83614975565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147f1576147f0614adc565b5b828201905092915050565b600061480782614975565b915061481283614975565b92508261482257614821614b0b565b5b828204905092915050565b600061483882614975565b915061484383614975565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561487c5761487b614adc565b5b828202905092915050565b600061489282614939565b915061489d83614939565b9250828210156148b0576148af614adc565b5b828203905092915050565b60006148c682614975565b91506148d183614975565b9250828210156148e4576148e3614adc565b5b828203905092915050565b60006148fa82614955565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156149c05780820151818401526020810190506149a5565b838111156149cf576000848401525b50505050565b60006149e082614975565b915060008214156149f4576149f3614adc565b5b600182039050919050565b60006002820490506001821680614a1757607f821691505b60208210811415614a2b57614a2a614b3a565b5b50919050565b614a3a82614be5565b810181811067ffffffffffffffff82111715614a5957614a58614b98565b5b80604052505050565b6000614a6d82614975565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614aa057614a9f614adc565b5b600182019050919050565b6000614ab682614975565b9150614ac183614975565b925082614ad157614ad0614b0b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656c696769626c6520666f72207465616d4c697374206d696e740000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61541a816148ef565b811461542557600080fd5b50565b61543181614901565b811461543c57600080fd5b50565b6154488161490d565b811461545357600080fd5b50565b61545f81614975565b811461546a57600080fd5b50565b6154768161497f565b811461548157600080fd5b5056fea2646970667358221220948405d2dc1329ff01085dd2380be0b140c493f9e15bf773c0974232e95197d664736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000028

-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 10
Arg [1] : maxPerAddressDuringMint_ (uint256): 40

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000028


Deployed Bytecode Sourcemap

42711:3454:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27801:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29527:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31052:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30615:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26362:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31902:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45778:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26993:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44985:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32107:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44770:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42940:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26525:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45485:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29350:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28227:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41816:103;;;;;;;;;;;;;:::i;:::-;;42777:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41165:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42905:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;46015:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29682:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31320:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45591:181;;;;;;;;;;;;;:::i;:::-;;43582:621;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32327:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43320:256;;;;;;;;;;;;;:::i;:::-;;29843:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36742:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45902:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31657:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44419:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42074:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27801:370;27928:4;27973:25;27958:40;;;:11;:40;;;;:99;;;;28024:33;28009:48;;;:11;:48;;;;27958:99;:160;;;;28083:35;28068:50;;;:11;:50;;;;27958:160;:207;;;;28129:36;28153:11;28129:23;:36::i;:::-;27958:207;27944:221;;27801:370;;;:::o;29527:94::-;29581:13;29610:5;29603:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29527:94;:::o;31052:204::-;31120:7;31144:16;31152:7;31144;:16::i;:::-;31136:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31226:15;:24;31242:7;31226:24;;;;;;;;;;;;;;;;;;;;;31219:31;;31052:204;;;:::o;30615:379::-;30684:13;30700:24;30716:7;30700:15;:24::i;:::-;30684:40;;30745:5;30739:11;;:2;:11;;;;30731:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30830:5;30814:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30839:37;30856:5;30863:12;:10;:12::i;:::-;30839:16;:37::i;:::-;30814:62;30798:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;30960:28;30969:2;30973:7;30982:5;30960:8;:28::i;:::-;30677:317;30615:379;;:::o;26362:94::-;26415:7;26438:12;;26431:19;;26362:94;:::o;31902:142::-;32010:28;32020:4;32026:2;32030:7;32010:9;:28::i;:::-;31902:142;;;:::o;45778:118::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22206:1:::1;22804:7;;:19;;22796:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22206:1;22937:7;:18;;;;45862:28:::2;45881:8;45862:18;:28::i;:::-;22162:1:::1;23116:7;:22;;;;45778:118:::0;:::o;26993:744::-;27102:7;27137:16;27147:5;27137:9;:16::i;:::-;27129:5;:24;27121:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27199:22;27224:13;:11;:13::i;:::-;27199:38;;27244:19;27274:25;27324:9;27319:350;27343:14;27339:1;:18;27319:350;;;27373:31;27407:11;:14;27419:1;27407:14;;;;;;;;;;;27373:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27460:1;27434:28;;:9;:14;;;:28;;;27430:89;;27495:9;:14;;;27475:34;;27430:89;27552:5;27531:26;;:17;:26;;;27527:135;;;27589:5;27574:11;:20;27570:59;;;27616:1;27609:8;;;;;;;;;27570:59;27639:13;;;;;:::i;:::-;;;;27527:135;27364:305;27359:3;;;;;:::i;:::-;;;;27319:350;;;;27675:56;;;;;;;;;;:::i;:::-;;;;;;;;26993:744;;;;;:::o;44985:321::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45089:1:::1;45073:12;45062:8;:23;;;;:::i;:::-;:28;45046:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;45159:17;45190:12;45179:8;:23;;;;:::i;:::-;45159:43;;45214:9;45209:92;45233:9;45229:1;:13;45209:92;;;45258:35;45268:10;45280:12;45258:9;:35::i;:::-;45244:3;;;;;:::i;:::-;;;;45209:92;;;;45039:267;44985:321:::0;:::o;32107:157::-;32219:39;32236:4;32242:2;32246:7;32219:39;;;;;;;;;;;;:16;:39::i;:::-;32107:157;;;:::o;44770:184::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44864:9:::1;44859:90;44883:9;:16;44879:1;:20;44859:90;;;44940:1;44915:8;:22;44924:9;44934:1;44924:12;;;;;;;;:::i;:::-;;;;;;;;44915:22;;;;;;;;;;;;;;;:26;;;;44901:3;;;;;:::i;:::-;;;;44859:90;;;;44770:184:::0;:::o;42940:43::-;;;;;;;;;;;;;;;;;:::o;26525:177::-;26592:7;26624:13;:11;:13::i;:::-;26616:5;:21;26608:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26691:5;26684:12;;26525:177;;;:::o;45485:100::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45572:7:::1;;45556:13;:23;;;;;;;:::i;:::-;;45485:100:::0;;:::o;29350:118::-;29414:7;29437:20;29449:7;29437:11;:20::i;:::-;:25;;;29430:32;;29350:118;;;:::o;28227:211::-;28291:7;28332:1;28315:19;;:5;:19;;;;28307:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28404:12;:19;28417:5;28404:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;28396:36;;28389:43;;28227:211;;;:::o;41816:103::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41881:30:::1;41908:1;41881:18;:30::i;:::-;41816:103::o:0;42777:48::-;;;:::o;41165:87::-;41211:7;41238:6;;;;;;;;;;;41231:13;;41165:87;:::o;42905:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46015:147::-;46096:21;;:::i;:::-;46136:20;46148:7;46136:11;:20::i;:::-;46129:27;;46015:147;;;:::o;29682:98::-;29738:13;29767:7;29760:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29682:98;:::o;31320:274::-;31423:12;:10;:12::i;:::-;31411:24;;:8;:24;;;;31403:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31520:8;31475:18;:32;31494:12;:10;:12::i;:::-;31475:32;;;;;;;;;;;;;;;:42;31508:8;31475:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31569:8;31540:48;;31555:12;:10;:12::i;:::-;31540:48;;;31579:8;31540:48;;;;;;:::i;:::-;;;;;;;;31320:274;;:::o;45591:181::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22206:1:::1;22804:7;;:19;;22796:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22206:1;22937:7;:18;;;;45656:12:::2;45674:10;:15;;45697:21;45674:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45655:68;;;45738:7;45730:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;45648:124;22162:1:::1;23116:7;:22;;;;45591:181::o:0;43582:621::-;43255:10;43242:23;;:9;:23;;;43234:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43679:24:::1;43706:10;43679:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;43723:10;43736:6;:13;;;43723:26;;43756:19;43786:6;:18;;;43778:27;;43756:49;;43830:34;43845:11;43858:5;43830:14;:34::i;:::-;43814:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;43973:23;43961:8;43934:24;43947:10;43934:12;:24::i;:::-;:35;;;;:::i;:::-;:62;;43918:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;44079:14;44067:8;44051:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;44043:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44123:31;44133:10;44145:8;44123:9;:31::i;:::-;44161:36;44188:8;44174:11;:22;;;;:::i;:::-;44161:12;:36::i;:::-;43672:531;;;43582:621:::0;:::o;32327:311::-;32464:28;32474:4;32480:2;32484:7;32464:9;:28::i;:::-;32515:48;32538:4;32544:2;32548:7;32557:5;32515:22;:48::i;:::-;32499:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;32327:311;;;;:::o;43320:256::-;43255:10;43242:23;;:9;:23;;;43234:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43400:1:::1;43377:8;:20;43386:10;43377:20;;;;;;;;;;;;;;;;:24;43369:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43472:14;43467:1;43451:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:35;;43443:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43516:8;:20;43525:10;43516:20;;;;;;;;;;;;;;;;:22;;;;;;;;;:::i;:::-;;;;;;43546:24;43556:10;43568:1;43546:9;:24::i;:::-;43320:256::o:0;29843:394::-;29941:13;29982:16;29990:7;29982;:16::i;:::-;29966:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;30072:21;30096:10;:8;:10::i;:::-;30072:34;;30151:1;30133:7;30127:21;:25;:104;;;;;;;;;;;;;;;;;30188:7;30197:18;:7;:16;:18::i;:::-;30171:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30127:104;30113:118;;;29843:394;;;:::o;36742:43::-;;;;:::o;45902:107::-;45960:7;45983:20;45997:5;45983:13;:20::i;:::-;45976:27;;45902:107;;;:::o;31657:186::-;31779:4;31802:18;:25;31821:5;31802:25;;;;;;;;;;;;;;;:35;31828:8;31802:35;;;;;;;;;;;;;;;;;;;;;;;;;31795:42;;31657:186;;;;:::o;44419:172::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44531:54:::1;;;;;;;;44550:14;44531:54;;;;;;44573:5;44531:54;;;;::::0;44518:10:::1;:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44419:172:::0;;:::o;42074:201::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42183:1:::1;42163:22;;:8;:22;;;;42155:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42239:28;42258:8;42239:18;:28::i;:::-;42074:201:::0;:::o;13475:157::-;13560:4;13599:25;13584:40;;;:11;:40;;;;13577:47;;13475:157;;;:::o;32877:105::-;32934:4;32964:12;;32954:7;:22;32947:29;;32877:105;;;:::o;23832:98::-;23885:7;23912:10;23905:17;;23832:98;:::o;36564:172::-;36688:2;36661:15;:24;36677:7;36661:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36722:7;36718:2;36702:28;;36711:5;36702:28;;;;;;;;;;;;36564:172;;;:::o;34929:1529::-;35026:35;35064:20;35076:7;35064:11;:20::i;:::-;35026:58;;35093:22;35135:13;:18;;;35119:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;35188:12;:10;:12::i;:::-;35164:36;;:20;35176:7;35164:11;:20::i;:::-;:36;;;35119:81;:142;;;;35211:50;35228:13;:18;;;35248:12;:10;:12::i;:::-;35211:16;:50::i;:::-;35119:142;35093:169;;35287:17;35271:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35419:4;35397:26;;:13;:18;;;:26;;;35381:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;35508:1;35494:16;;:2;:16;;;;35486:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35561:43;35583:4;35589:2;35593:7;35602:1;35561:21;:43::i;:::-;35661:49;35678:1;35682:7;35691:13;:18;;;35661:8;:49::i;:::-;35749:1;35719:12;:18;35732:4;35719:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35785:1;35757:12;:16;35770:2;35757:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35816:43;;;;;;;;35831:2;35816:43;;;;;;35842:15;35816:43;;;;;35793:11;:20;35805:7;35793:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36087:19;36119:1;36109:7;:11;;;;:::i;:::-;36087:33;;36172:1;36131:43;;:11;:24;36143:11;36131:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;36127:236;;;36189:20;36197:11;36189:7;:20::i;:::-;36185:171;;;36249:97;;;;;;;;36276:13;:18;;;36249:97;;;;;;36307:13;:28;;;36249:97;;;;;36222:11;:24;36234:11;36222:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36185:171;36127:236;36395:7;36391:2;36376:27;;36385:4;36376:27;;;;;;;;;;;;36410:42;36431:4;36437:2;36441:7;36450:1;36410:20;:42::i;:::-;35019:1439;;;34929:1529;;;:::o;36890:846::-;36952:25;36980:24;;36952:52;;37030:1;37019:8;:12;37011:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;37067:16;37117:1;37106:8;37086:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;37067:51;;37157:1;37140:14;:18;;;;:::i;:::-;37129:8;:29;37125:81;;;37197:1;37180:14;:18;;;;:::i;:::-;37169:29;;37125:81;37321:17;37329:8;37321:7;:17::i;:::-;37313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37393:9;37405:17;37393:29;;37388:297;37429:8;37424:1;:13;37388:297;;37488:1;37457:33;;:11;:14;37469:1;37457:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;37453:225;;;37503:31;37537:14;37549:1;37537:11;:14::i;:::-;37503:48;;37579:89;;;;;;;;37606:9;:14;;;37579:89;;;;;;37633:9;:24;;;37579:89;;;;;37562:11;:14;37574:1;37562:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37492:186;37453:225;37439:3;;;;;:::i;:::-;;;;37388:297;;;;37729:1;37718:8;:12;;;;:::i;:::-;37691:24;:39;;;;36945:791;;36890:846;:::o;32988:98::-;33053:27;33063:2;33067:8;33053:27;;;;;;;;;;;;:9;:27::i;:::-;32988:98;;:::o;28690:606::-;28766:21;;:::i;:::-;28807:16;28815:7;28807;:16::i;:::-;28799:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28879:26;28927:12;28916:7;:23;28912:93;;28996:1;28981:12;28971:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;28950:47;;28912:93;29018:12;29033:7;29018:22;;29013:212;29050:18;29042:4;:26;29013:212;;29087:31;29121:11;:17;29133:4;29121:17;;;;;;;;;;;29087:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29177:1;29151:28;;:9;:14;;;:28;;;29147:71;;29199:9;29192:16;;;;;;;29147:71;29078:147;29070:6;;;;;:::i;:::-;;;;29013:212;;;;29233:57;;;;;;;;;;:::i;:::-;;;;;;;;28690:606;;;;:::o;42435:191::-;42509:16;42528:6;;;;;;;;;;;42509:25;;42554:8;42545:6;;:17;;;;;;;;;;;;;;;;;;42609:8;42578:40;;42599:8;42578:40;;;;;;;;;;;;42498:128;42435:191;:::o;44597:167::-;44695:4;44740:1;44722:14;:19;;:36;;;;;44753:5;44752:6;44722:36;44708:50;;44597:167;;;;:::o;44209:204::-;44282:5;44269:9;:18;;44261:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;44337:5;44325:9;:17;44321:87;;;44361:10;44353:28;;:47;44394:5;44382:9;:17;;;;:::i;:::-;44353:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44321:87;44209:204;:::o;38279:690::-;38416:4;38433:15;:2;:13;;;:15::i;:::-;38429:535;;;38488:2;38472:36;;;38509:12;:10;:12::i;:::-;38523:4;38529:7;38538:5;38472:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38459:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38720:1;38703:6;:13;:18;38699:215;;;38736:61;;;;;;;;;;:::i;:::-;;;;;;;;38699:215;38882:6;38876:13;38867:6;38863:2;38859:15;38852:38;38459:464;38604:45;;;38594:55;;;:6;:55;;;;38587:62;;;;;38429:535;38952:4;38945:11;;38279:690;;;;;;;:::o;45371:108::-;45431:13;45460;45453:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45371:108;:::o;400:723::-;456:13;686:1;677:5;:10;673:53;;;704:10;;;;;;;;;;;;;;;;;;;;;673:53;736:12;751:5;736:20;;767:14;792:78;807:1;799:4;:9;792:78;;825:8;;;;;:::i;:::-;;;;856:2;848:10;;;;;:::i;:::-;;;792:78;;;880:19;912:6;902:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;880:39;;930:154;946:1;937:5;:10;930:154;;974:1;964:11;;;;;:::i;:::-;;;1041:2;1033:5;:10;;;;:::i;:::-;1020:2;:24;;;;:::i;:::-;1007:39;;990:6;997;990:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1070:2;1061:11;;;;;:::i;:::-;;;930:154;;;1108:6;1094:21;;;;;400:723;;;;:::o;28444:240::-;28505:7;28554:1;28537:19;;:5;:19;;;;28521:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;28645:12;:19;28658:5;28645:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;28637:41;;28630:48;;28444:240;;;:::o;39431:141::-;;;;;:::o;39958:140::-;;;;;:::o;33425:1272::-;33530:20;33553:12;;33530:35;;33594:1;33580:16;;:2;:16;;;;33572:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33771:21;33779:12;33771:7;:21::i;:::-;33770:22;33762:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33853:12;33841:8;:24;;33833:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33913:61;33943:1;33947:2;33951:12;33965:8;33913:21;:61::i;:::-;33983:30;34016:12;:16;34029:2;34016:16;;;;;;;;;;;;;;;33983:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34058:119;;;;;;;;34108:8;34078:11;:19;;;:39;;;;:::i;:::-;34058:119;;;;;;34161:8;34126:11;:24;;;:44;;;;:::i;:::-;34058:119;;;;;34039:12;:16;34052:2;34039:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34212:43;;;;;;;;34227:2;34212:43;;;;;;34238:15;34212:43;;;;;34184:11;:25;34196:12;34184:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34264:20;34287:12;34264:35;;34313:9;34308:281;34332:8;34328:1;:12;34308:281;;;34386:12;34382:2;34361:38;;34378:1;34361:38;;;;;;;;;;;;34426:59;34457:1;34461:2;34465:12;34479:5;34426:22;:59::i;:::-;34408:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;34567:14;;;;;:::i;:::-;;;;34342:3;;;;;:::i;:::-;;;;34308:281;;;;34612:12;34597;:27;;;;34631:60;34660:1;34664:2;34668:12;34682:8;34631:20;:60::i;:::-;33523:1174;;;33425:1272;;;:::o;3392:326::-;3452:4;3709:1;3687:7;:19;;;:23;3680:30;;3392:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:139::-;1214:5;1252:6;1239:20;1230:29;;1268:33;1295:5;1268:33;:::i;:::-;1168:139;;;;:::o;1330:370::-;1401:5;1450:3;1443:4;1435:6;1431:17;1427:27;1417:122;;1458:79;;:::i;:::-;1417:122;1575:6;1562:20;1600:94;1690:3;1682:6;1675:4;1667:6;1663:17;1600:94;:::i;:::-;1591:103;;1407:293;1330:370;;;;:::o;1706:133::-;1749:5;1787:6;1774:20;1765:29;;1803:30;1827:5;1803:30;:::i;:::-;1706:133;;;;:::o;1845:137::-;1890:5;1928:6;1915:20;1906:29;;1944:32;1970:5;1944:32;:::i;:::-;1845:137;;;;:::o;1988:141::-;2044:5;2075:6;2069:13;2060:22;;2091:32;2117:5;2091:32;:::i;:::-;1988:141;;;;:::o;2148:338::-;2203:5;2252:3;2245:4;2237:6;2233:17;2229:27;2219:122;;2260:79;;:::i;:::-;2219:122;2377:6;2364:20;2402:78;2476:3;2468:6;2461:4;2453:6;2449:17;2402:78;:::i;:::-;2393:87;;2209:277;2148:338;;;;:::o;2506:553::-;2564:8;2574:6;2624:3;2617:4;2609:6;2605:17;2601:27;2591:122;;2632:79;;:::i;:::-;2591:122;2745:6;2732:20;2722:30;;2775:18;2767:6;2764:30;2761:117;;;2797:79;;:::i;:::-;2761:117;2911:4;2903:6;2899:17;2887:29;;2965:3;2957:4;2949:6;2945:17;2935:8;2931:32;2928:41;2925:128;;;2972:79;;:::i;:::-;2925:128;2506:553;;;;;:::o;3065:139::-;3111:5;3149:6;3136:20;3127:29;;3165:33;3192:5;3165:33;:::i;:::-;3065:139;;;;:::o;3210:137::-;3255:5;3293:6;3280:20;3271:29;;3309:32;3335:5;3309:32;:::i;:::-;3210:137;;;;:::o;3353:329::-;3412:6;3461:2;3449:9;3440:7;3436:23;3432:32;3429:119;;;3467:79;;:::i;:::-;3429:119;3587:1;3612:53;3657:7;3648:6;3637:9;3633:22;3612:53;:::i;:::-;3602:63;;3558:117;3353:329;;;;:::o;3688:474::-;3756:6;3764;3813:2;3801:9;3792:7;3788:23;3784:32;3781:119;;;3819:79;;:::i;:::-;3781:119;3939:1;3964:53;4009:7;4000:6;3989:9;3985:22;3964:53;:::i;:::-;3954:63;;3910:117;4066:2;4092:53;4137:7;4128:6;4117:9;4113:22;4092:53;:::i;:::-;4082:63;;4037:118;3688:474;;;;;:::o;4168:619::-;4245:6;4253;4261;4310:2;4298:9;4289:7;4285:23;4281:32;4278:119;;;4316:79;;:::i;:::-;4278:119;4436:1;4461:53;4506:7;4497:6;4486:9;4482:22;4461:53;:::i;:::-;4451:63;;4407:117;4563:2;4589:53;4634:7;4625:6;4614:9;4610:22;4589:53;:::i;:::-;4579:63;;4534:118;4691:2;4717:53;4762:7;4753:6;4742:9;4738:22;4717:53;:::i;:::-;4707:63;;4662:118;4168:619;;;;;:::o;4793:943::-;4888:6;4896;4904;4912;4961:3;4949:9;4940:7;4936:23;4932:33;4929:120;;;4968:79;;:::i;:::-;4929:120;5088:1;5113:53;5158:7;5149:6;5138:9;5134:22;5113:53;:::i;:::-;5103:63;;5059:117;5215:2;5241:53;5286:7;5277:6;5266:9;5262:22;5241:53;:::i;:::-;5231:63;;5186:118;5343:2;5369:53;5414:7;5405:6;5394:9;5390:22;5369:53;:::i;:::-;5359:63;;5314:118;5499:2;5488:9;5484:18;5471:32;5530:18;5522:6;5519:30;5516:117;;;5552:79;;:::i;:::-;5516:117;5657:62;5711:7;5702:6;5691:9;5687:22;5657:62;:::i;:::-;5647:72;;5442:287;4793:943;;;;;;;:::o;5742:468::-;5807:6;5815;5864:2;5852:9;5843:7;5839:23;5835:32;5832:119;;;5870:79;;:::i;:::-;5832:119;5990:1;6015:53;6060:7;6051:6;6040:9;6036:22;6015:53;:::i;:::-;6005:63;;5961:117;6117:2;6143:50;6185:7;6176:6;6165:9;6161:22;6143:50;:::i;:::-;6133:60;;6088:115;5742:468;;;;;:::o;6216:474::-;6284:6;6292;6341:2;6329:9;6320:7;6316:23;6312:32;6309:119;;;6347:79;;:::i;:::-;6309:119;6467:1;6492:53;6537:7;6528:6;6517:9;6513:22;6492:53;:::i;:::-;6482:63;;6438:117;6594:2;6620:53;6665:7;6656:6;6645:9;6641:22;6620:53;:::i;:::-;6610:63;;6565:118;6216:474;;;;;:::o;6696:539::-;6780:6;6829:2;6817:9;6808:7;6804:23;6800:32;6797:119;;;6835:79;;:::i;:::-;6797:119;6983:1;6972:9;6968:17;6955:31;7013:18;7005:6;7002:30;6999:117;;;7035:79;;:::i;:::-;6999:117;7140:78;7210:7;7201:6;7190:9;7186:22;7140:78;:::i;:::-;7130:88;;6926:302;6696:539;;;;:::o;7241:327::-;7299:6;7348:2;7336:9;7327:7;7323:23;7319:32;7316:119;;;7354:79;;:::i;:::-;7316:119;7474:1;7499:52;7543:7;7534:6;7523:9;7519:22;7499:52;:::i;:::-;7489:62;;7445:116;7241:327;;;;:::o;7574:349::-;7643:6;7692:2;7680:9;7671:7;7667:23;7663:32;7660:119;;;7698:79;;:::i;:::-;7660:119;7818:1;7843:63;7898:7;7889:6;7878:9;7874:22;7843:63;:::i;:::-;7833:73;;7789:127;7574:349;;;;:::o;7929:529::-;8000:6;8008;8057:2;8045:9;8036:7;8032:23;8028:32;8025:119;;;8063:79;;:::i;:::-;8025:119;8211:1;8200:9;8196:17;8183:31;8241:18;8233:6;8230:30;8227:117;;;8263:79;;:::i;:::-;8227:117;8376:65;8433:7;8424:6;8413:9;8409:22;8376:65;:::i;:::-;8358:83;;;;8154:297;7929:529;;;;;:::o;8464:329::-;8523:6;8572:2;8560:9;8551:7;8547:23;8543:32;8540:119;;;8578:79;;:::i;:::-;8540:119;8698:1;8723:53;8768:7;8759:6;8748:9;8744:22;8723:53;:::i;:::-;8713:63;;8669:117;8464:329;;;;:::o;8799:466::-;8863:6;8871;8920:2;8908:9;8899:7;8895:23;8891:32;8888:119;;;8926:79;;:::i;:::-;8888:119;9046:1;9071:52;9115:7;9106:6;9095:9;9091:22;9071:52;:::i;:::-;9061:62;;9017:116;9172:2;9198:50;9240:7;9231:6;9220:9;9216:22;9198:50;:::i;:::-;9188:60;;9143:115;8799:466;;;;;:::o;9271:108::-;9348:24;9366:5;9348:24;:::i;:::-;9343:3;9336:37;9271:108;;:::o;9385:118::-;9472:24;9490:5;9472:24;:::i;:::-;9467:3;9460:37;9385:118;;:::o;9509:109::-;9590:21;9605:5;9590:21;:::i;:::-;9585:3;9578:34;9509:109;;:::o;9624:360::-;9710:3;9738:38;9770:5;9738:38;:::i;:::-;9792:70;9855:6;9850:3;9792:70;:::i;:::-;9785:77;;9871:52;9916:6;9911:3;9904:4;9897:5;9893:16;9871:52;:::i;:::-;9948:29;9970:6;9948:29;:::i;:::-;9943:3;9939:39;9932:46;;9714:270;9624:360;;;;:::o;9990:364::-;10078:3;10106:39;10139:5;10106:39;:::i;:::-;10161:71;10225:6;10220:3;10161:71;:::i;:::-;10154:78;;10241:52;10286:6;10281:3;10274:4;10267:5;10263:16;10241:52;:::i;:::-;10318:29;10340:6;10318:29;:::i;:::-;10313:3;10309:39;10302:46;;10082:272;9990:364;;;;:::o;10360:377::-;10466:3;10494:39;10527:5;10494:39;:::i;:::-;10549:89;10631:6;10626:3;10549:89;:::i;:::-;10542:96;;10647:52;10692:6;10687:3;10680:4;10673:5;10669:16;10647:52;:::i;:::-;10724:6;10719:3;10715:16;10708:23;;10470:267;10360:377;;;;:::o;10743:366::-;10885:3;10906:67;10970:2;10965:3;10906:67;:::i;:::-;10899:74;;10982:93;11071:3;10982:93;:::i;:::-;11100:2;11095:3;11091:12;11084:19;;10743:366;;;:::o;11115:::-;11257:3;11278:67;11342:2;11337:3;11278:67;:::i;:::-;11271:74;;11354:93;11443:3;11354:93;:::i;:::-;11472:2;11467:3;11463:12;11456:19;;11115:366;;;:::o;11487:::-;11629:3;11650:67;11714:2;11709:3;11650:67;:::i;:::-;11643:74;;11726:93;11815:3;11726:93;:::i;:::-;11844:2;11839:3;11835:12;11828:19;;11487:366;;;:::o;11859:::-;12001:3;12022:67;12086:2;12081:3;12022:67;:::i;:::-;12015:74;;12098:93;12187:3;12098:93;:::i;:::-;12216:2;12211:3;12207:12;12200:19;;11859:366;;;:::o;12231:::-;12373:3;12394:67;12458:2;12453:3;12394:67;:::i;:::-;12387:74;;12470:93;12559:3;12470:93;:::i;:::-;12588:2;12583:3;12579:12;12572:19;;12231:366;;;:::o;12603:::-;12745:3;12766:67;12830:2;12825:3;12766:67;:::i;:::-;12759:74;;12842:93;12931:3;12842:93;:::i;:::-;12960:2;12955:3;12951:12;12944:19;;12603:366;;;:::o;12975:::-;13117:3;13138:67;13202:2;13197:3;13138:67;:::i;:::-;13131:74;;13214:93;13303:3;13214:93;:::i;:::-;13332:2;13327:3;13323:12;13316:19;;12975:366;;;:::o;13347:::-;13489:3;13510:67;13574:2;13569:3;13510:67;:::i;:::-;13503:74;;13586:93;13675:3;13586:93;:::i;:::-;13704:2;13699:3;13695:12;13688:19;;13347:366;;;:::o;13719:::-;13861:3;13882:67;13946:2;13941:3;13882:67;:::i;:::-;13875:74;;13958:93;14047:3;13958:93;:::i;:::-;14076:2;14071:3;14067:12;14060:19;;13719:366;;;:::o;14091:::-;14233:3;14254:67;14318:2;14313:3;14254:67;:::i;:::-;14247:74;;14330:93;14419:3;14330:93;:::i;:::-;14448:2;14443:3;14439:12;14432:19;;14091:366;;;:::o;14463:::-;14605:3;14626:67;14690:2;14685:3;14626:67;:::i;:::-;14619:74;;14702:93;14791:3;14702:93;:::i;:::-;14820:2;14815:3;14811:12;14804:19;;14463:366;;;:::o;14835:::-;14977:3;14998:67;15062:2;15057:3;14998:67;:::i;:::-;14991:74;;15074:93;15163:3;15074:93;:::i;:::-;15192:2;15187:3;15183:12;15176:19;;14835:366;;;:::o;15207:::-;15349:3;15370:67;15434:2;15429:3;15370:67;:::i;:::-;15363:74;;15446:93;15535:3;15446:93;:::i;:::-;15564:2;15559:3;15555:12;15548:19;;15207:366;;;:::o;15579:::-;15721:3;15742:67;15806:2;15801:3;15742:67;:::i;:::-;15735:74;;15818:93;15907:3;15818:93;:::i;:::-;15936:2;15931:3;15927:12;15920:19;;15579:366;;;:::o;15951:::-;16093:3;16114:67;16178:2;16173:3;16114:67;:::i;:::-;16107:74;;16190:93;16279:3;16190:93;:::i;:::-;16308:2;16303:3;16299:12;16292:19;;15951:366;;;:::o;16323:::-;16465:3;16486:67;16550:2;16545:3;16486:67;:::i;:::-;16479:74;;16562:93;16651:3;16562:93;:::i;:::-;16680:2;16675:3;16671:12;16664:19;;16323:366;;;:::o;16695:::-;16837:3;16858:67;16922:2;16917:3;16858:67;:::i;:::-;16851:74;;16934:93;17023:3;16934:93;:::i;:::-;17052:2;17047:3;17043:12;17036:19;;16695:366;;;:::o;17067:::-;17209:3;17230:67;17294:2;17289:3;17230:67;:::i;:::-;17223:74;;17306:93;17395:3;17306:93;:::i;:::-;17424:2;17419:3;17415:12;17408:19;;17067:366;;;:::o;17439:::-;17581:3;17602:67;17666:2;17661:3;17602:67;:::i;:::-;17595:74;;17678:93;17767:3;17678:93;:::i;:::-;17796:2;17791:3;17787:12;17780:19;;17439:366;;;:::o;17811:::-;17953:3;17974:67;18038:2;18033:3;17974:67;:::i;:::-;17967:74;;18050:93;18139:3;18050:93;:::i;:::-;18168:2;18163:3;18159:12;18152:19;;17811:366;;;:::o;18183:398::-;18342:3;18363:83;18444:1;18439:3;18363:83;:::i;:::-;18356:90;;18455:93;18544:3;18455:93;:::i;:::-;18573:1;18568:3;18564:11;18557:18;;18183:398;;;:::o;18587:366::-;18729:3;18750:67;18814:2;18809:3;18750:67;:::i;:::-;18743:74;;18826:93;18915:3;18826:93;:::i;:::-;18944:2;18939:3;18935:12;18928:19;;18587:366;;;:::o;18959:::-;19101:3;19122:67;19186:2;19181:3;19122:67;:::i;:::-;19115:74;;19198:93;19287:3;19198:93;:::i;:::-;19316:2;19311:3;19307:12;19300:19;;18959:366;;;:::o;19331:::-;19473:3;19494:67;19558:2;19553:3;19494:67;:::i;:::-;19487:74;;19570:93;19659:3;19570:93;:::i;:::-;19688:2;19683:3;19679:12;19672:19;;19331:366;;;:::o;19703:::-;19845:3;19866:67;19930:2;19925:3;19866:67;:::i;:::-;19859:74;;19942:93;20031:3;19942:93;:::i;:::-;20060:2;20055:3;20051:12;20044:19;;19703:366;;;:::o;20075:::-;20217:3;20238:67;20302:2;20297:3;20238:67;:::i;:::-;20231:74;;20314:93;20403:3;20314:93;:::i;:::-;20432:2;20427:3;20423:12;20416:19;;20075:366;;;:::o;20447:::-;20589:3;20610:67;20674:2;20669:3;20610:67;:::i;:::-;20603:74;;20686:93;20775:3;20686:93;:::i;:::-;20804:2;20799:3;20795:12;20788:19;;20447:366;;;:::o;20819:::-;20961:3;20982:67;21046:2;21041:3;20982:67;:::i;:::-;20975:74;;21058:93;21147:3;21058:93;:::i;:::-;21176:2;21171:3;21167:12;21160:19;;20819:366;;;:::o;21191:::-;21333:3;21354:67;21418:2;21413:3;21354:67;:::i;:::-;21347:74;;21430:93;21519:3;21430:93;:::i;:::-;21548:2;21543:3;21539:12;21532:19;;21191:366;;;:::o;21563:::-;21705:3;21726:67;21790:2;21785:3;21726:67;:::i;:::-;21719:74;;21802:93;21891:3;21802:93;:::i;:::-;21920:2;21915:3;21911:12;21904:19;;21563:366;;;:::o;21935:::-;22077:3;22098:67;22162:2;22157:3;22098:67;:::i;:::-;22091:74;;22174:93;22263:3;22174:93;:::i;:::-;22292:2;22287:3;22283:12;22276:19;;21935:366;;;:::o;22307:::-;22449:3;22470:67;22534:2;22529:3;22470:67;:::i;:::-;22463:74;;22546:93;22635:3;22546:93;:::i;:::-;22664:2;22659:3;22655:12;22648:19;;22307:366;;;:::o;22679:::-;22821:3;22842:67;22906:2;22901:3;22842:67;:::i;:::-;22835:74;;22918:93;23007:3;22918:93;:::i;:::-;23036:2;23031:3;23027:12;23020:19;;22679:366;;;:::o;23121:527::-;23280:4;23275:3;23271:14;23367:4;23360:5;23356:16;23350:23;23386:63;23443:4;23438:3;23434:14;23420:12;23386:63;:::i;:::-;23295:164;23551:4;23544:5;23540:16;23534:23;23570:61;23625:4;23620:3;23616:14;23602:12;23570:61;:::i;:::-;23469:172;23249:399;23121:527;;:::o;23654:118::-;23741:24;23759:5;23741:24;:::i;:::-;23736:3;23729:37;23654:118;;:::o;23778:105::-;23853:23;23870:5;23853:23;:::i;:::-;23848:3;23841:36;23778:105;;:::o;23889:115::-;23974:23;23991:5;23974:23;:::i;:::-;23969:3;23962:36;23889:115;;:::o;24010:435::-;24190:3;24212:95;24303:3;24294:6;24212:95;:::i;:::-;24205:102;;24324:95;24415:3;24406:6;24324:95;:::i;:::-;24317:102;;24436:3;24429:10;;24010:435;;;;;:::o;24451:379::-;24635:3;24657:147;24800:3;24657:147;:::i;:::-;24650:154;;24821:3;24814:10;;24451:379;;;:::o;24836:222::-;24929:4;24967:2;24956:9;24952:18;24944:26;;24980:71;25048:1;25037:9;25033:17;25024:6;24980:71;:::i;:::-;24836:222;;;;:::o;25064:640::-;25259:4;25297:3;25286:9;25282:19;25274:27;;25311:71;25379:1;25368:9;25364:17;25355:6;25311:71;:::i;:::-;25392:72;25460:2;25449:9;25445:18;25436:6;25392:72;:::i;:::-;25474;25542:2;25531:9;25527:18;25518:6;25474:72;:::i;:::-;25593:9;25587:4;25583:20;25578:2;25567:9;25563:18;25556:48;25621:76;25692:4;25683:6;25621:76;:::i;:::-;25613:84;;25064:640;;;;;;;:::o;25710:210::-;25797:4;25835:2;25824:9;25820:18;25812:26;;25848:65;25910:1;25899:9;25895:17;25886:6;25848:65;:::i;:::-;25710:210;;;;:::o;25926:313::-;26039:4;26077:2;26066:9;26062:18;26054:26;;26126:9;26120:4;26116:20;26112:1;26101:9;26097:17;26090:47;26154:78;26227:4;26218:6;26154:78;:::i;:::-;26146:86;;25926:313;;;;:::o;26245:419::-;26411:4;26449:2;26438:9;26434:18;26426:26;;26498:9;26492:4;26488:20;26484:1;26473:9;26469:17;26462:47;26526:131;26652:4;26526:131;:::i;:::-;26518:139;;26245:419;;;:::o;26670:::-;26836:4;26874:2;26863:9;26859:18;26851:26;;26923:9;26917:4;26913:20;26909:1;26898:9;26894:17;26887:47;26951:131;27077:4;26951:131;:::i;:::-;26943:139;;26670:419;;;:::o;27095:::-;27261:4;27299:2;27288:9;27284:18;27276:26;;27348:9;27342:4;27338:20;27334:1;27323:9;27319:17;27312:47;27376:131;27502:4;27376:131;:::i;:::-;27368:139;;27095:419;;;:::o;27520:::-;27686:4;27724:2;27713:9;27709:18;27701:26;;27773:9;27767:4;27763:20;27759:1;27748:9;27744:17;27737:47;27801:131;27927:4;27801:131;:::i;:::-;27793:139;;27520:419;;;:::o;27945:::-;28111:4;28149:2;28138:9;28134:18;28126:26;;28198:9;28192:4;28188:20;28184:1;28173:9;28169:17;28162:47;28226:131;28352:4;28226:131;:::i;:::-;28218:139;;27945:419;;;:::o;28370:::-;28536:4;28574:2;28563:9;28559:18;28551:26;;28623:9;28617:4;28613:20;28609:1;28598:9;28594:17;28587:47;28651:131;28777:4;28651:131;:::i;:::-;28643:139;;28370:419;;;:::o;28795:::-;28961:4;28999:2;28988:9;28984:18;28976:26;;29048:9;29042:4;29038:20;29034:1;29023:9;29019:17;29012:47;29076:131;29202:4;29076:131;:::i;:::-;29068:139;;28795:419;;;:::o;29220:::-;29386:4;29424:2;29413:9;29409:18;29401:26;;29473:9;29467:4;29463:20;29459:1;29448:9;29444:17;29437:47;29501:131;29627:4;29501:131;:::i;:::-;29493:139;;29220:419;;;:::o;29645:::-;29811:4;29849:2;29838:9;29834:18;29826:26;;29898:9;29892:4;29888:20;29884:1;29873:9;29869:17;29862:47;29926:131;30052:4;29926:131;:::i;:::-;29918:139;;29645:419;;;:::o;30070:::-;30236:4;30274:2;30263:9;30259:18;30251:26;;30323:9;30317:4;30313:20;30309:1;30298:9;30294:17;30287:47;30351:131;30477:4;30351:131;:::i;:::-;30343:139;;30070:419;;;:::o;30495:::-;30661:4;30699:2;30688:9;30684:18;30676:26;;30748:9;30742:4;30738:20;30734:1;30723:9;30719:17;30712:47;30776:131;30902:4;30776:131;:::i;:::-;30768:139;;30495:419;;;:::o;30920:::-;31086:4;31124:2;31113:9;31109:18;31101:26;;31173:9;31167:4;31163:20;31159:1;31148:9;31144:17;31137:47;31201:131;31327:4;31201:131;:::i;:::-;31193:139;;30920:419;;;:::o;31345:::-;31511:4;31549:2;31538:9;31534:18;31526:26;;31598:9;31592:4;31588:20;31584:1;31573:9;31569:17;31562:47;31626:131;31752:4;31626:131;:::i;:::-;31618:139;;31345:419;;;:::o;31770:::-;31936:4;31974:2;31963:9;31959:18;31951:26;;32023:9;32017:4;32013:20;32009:1;31998:9;31994:17;31987:47;32051:131;32177:4;32051:131;:::i;:::-;32043:139;;31770:419;;;:::o;32195:::-;32361:4;32399:2;32388:9;32384:18;32376:26;;32448:9;32442:4;32438:20;32434:1;32423:9;32419:17;32412:47;32476:131;32602:4;32476:131;:::i;:::-;32468:139;;32195:419;;;:::o;32620:::-;32786:4;32824:2;32813:9;32809:18;32801:26;;32873:9;32867:4;32863:20;32859:1;32848:9;32844:17;32837:47;32901:131;33027:4;32901:131;:::i;:::-;32893:139;;32620:419;;;:::o;33045:::-;33211:4;33249:2;33238:9;33234:18;33226:26;;33298:9;33292:4;33288:20;33284:1;33273:9;33269:17;33262:47;33326:131;33452:4;33326:131;:::i;:::-;33318:139;;33045:419;;;:::o;33470:::-;33636:4;33674:2;33663:9;33659:18;33651:26;;33723:9;33717:4;33713:20;33709:1;33698:9;33694:17;33687:47;33751:131;33877:4;33751:131;:::i;:::-;33743:139;;33470:419;;;:::o;33895:::-;34061:4;34099:2;34088:9;34084:18;34076:26;;34148:9;34142:4;34138:20;34134:1;34123:9;34119:17;34112:47;34176:131;34302:4;34176:131;:::i;:::-;34168:139;;33895:419;;;:::o;34320:::-;34486:4;34524:2;34513:9;34509:18;34501:26;;34573:9;34567:4;34563:20;34559:1;34548:9;34544:17;34537:47;34601:131;34727:4;34601:131;:::i;:::-;34593:139;;34320:419;;;:::o;34745:::-;34911:4;34949:2;34938:9;34934:18;34926:26;;34998:9;34992:4;34988:20;34984:1;34973:9;34969:17;34962:47;35026:131;35152:4;35026:131;:::i;:::-;35018:139;;34745:419;;;:::o;35170:::-;35336:4;35374:2;35363:9;35359:18;35351:26;;35423:9;35417:4;35413:20;35409:1;35398:9;35394:17;35387:47;35451:131;35577:4;35451:131;:::i;:::-;35443:139;;35170:419;;;:::o;35595:::-;35761:4;35799:2;35788:9;35784:18;35776:26;;35848:9;35842:4;35838:20;35834:1;35823:9;35819:17;35812:47;35876:131;36002:4;35876:131;:::i;:::-;35868:139;;35595:419;;;:::o;36020:::-;36186:4;36224:2;36213:9;36209:18;36201:26;;36273:9;36267:4;36263:20;36259:1;36248:9;36244:17;36237:47;36301:131;36427:4;36301:131;:::i;:::-;36293:139;;36020:419;;;:::o;36445:::-;36611:4;36649:2;36638:9;36634:18;36626:26;;36698:9;36692:4;36688:20;36684:1;36673:9;36669:17;36662:47;36726:131;36852:4;36726:131;:::i;:::-;36718:139;;36445:419;;;:::o;36870:::-;37036:4;37074:2;37063:9;37059:18;37051:26;;37123:9;37117:4;37113:20;37109:1;37098:9;37094:17;37087:47;37151:131;37277:4;37151:131;:::i;:::-;37143:139;;36870:419;;;:::o;37295:::-;37461:4;37499:2;37488:9;37484:18;37476:26;;37548:9;37542:4;37538:20;37534:1;37523:9;37519:17;37512:47;37576:131;37702:4;37576:131;:::i;:::-;37568:139;;37295:419;;;:::o;37720:::-;37886:4;37924:2;37913:9;37909:18;37901:26;;37973:9;37967:4;37963:20;37959:1;37948:9;37944:17;37937:47;38001:131;38127:4;38001:131;:::i;:::-;37993:139;;37720:419;;;:::o;38145:::-;38311:4;38349:2;38338:9;38334:18;38326:26;;38398:9;38392:4;38388:20;38384:1;38373:9;38369:17;38362:47;38426:131;38552:4;38426:131;:::i;:::-;38418:139;;38145:419;;;:::o;38570:::-;38736:4;38774:2;38763:9;38759:18;38751:26;;38823:9;38817:4;38813:20;38809:1;38798:9;38794:17;38787:47;38851:131;38977:4;38851:131;:::i;:::-;38843:139;;38570:419;;;:::o;38995:::-;39161:4;39199:2;39188:9;39184:18;39176:26;;39248:9;39242:4;39238:20;39234:1;39223:9;39219:17;39212:47;39276:131;39402:4;39276:131;:::i;:::-;39268:139;;38995:419;;;:::o;39420:::-;39586:4;39624:2;39613:9;39609:18;39601:26;;39673:9;39667:4;39663:20;39659:1;39648:9;39644:17;39637:47;39701:131;39827:4;39701:131;:::i;:::-;39693:139;;39420:419;;;:::o;39845:346::-;40000:4;40038:2;40027:9;40023:18;40015:26;;40051:133;40181:1;40170:9;40166:17;40157:6;40051:133;:::i;:::-;39845:346;;;;:::o;40197:222::-;40290:4;40328:2;40317:9;40313:18;40305:26;;40341:71;40409:1;40398:9;40394:17;40385:6;40341:71;:::i;:::-;40197:222;;;;:::o;40425:316::-;40538:4;40576:2;40565:9;40561:18;40553:26;;40589:69;40655:1;40644:9;40640:17;40631:6;40589:69;:::i;:::-;40668:66;40730:2;40719:9;40715:18;40706:6;40668:66;:::i;:::-;40425:316;;;;;:::o;40747:129::-;40781:6;40808:20;;:::i;:::-;40798:30;;40837:33;40865:4;40857:6;40837:33;:::i;:::-;40747:129;;;:::o;40882:75::-;40915:6;40948:2;40942:9;40932:19;;40882:75;:::o;40963:311::-;41040:4;41130:18;41122:6;41119:30;41116:56;;;41152:18;;:::i;:::-;41116:56;41202:4;41194:6;41190:17;41182:25;;41262:4;41256;41252:15;41244:23;;40963:311;;;:::o;41280:307::-;41341:4;41431:18;41423:6;41420:30;41417:56;;;41453:18;;:::i;:::-;41417:56;41491:29;41513:6;41491:29;:::i;:::-;41483:37;;41575:4;41569;41565:15;41557:23;;41280:307;;;:::o;41593:98::-;41644:6;41678:5;41672:12;41662:22;;41593:98;;;:::o;41697:99::-;41749:6;41783:5;41777:12;41767:22;;41697:99;;;:::o;41802:168::-;41885:11;41919:6;41914:3;41907:19;41959:4;41954:3;41950:14;41935:29;;41802:168;;;;:::o;41976:147::-;42077:11;42114:3;42099:18;;41976:147;;;;:::o;42129:169::-;42213:11;42247:6;42242:3;42235:19;42287:4;42282:3;42278:14;42263:29;;42129:169;;;;:::o;42304:148::-;42406:11;42443:3;42428:18;;42304:148;;;;:::o;42458:273::-;42498:3;42517:20;42535:1;42517:20;:::i;:::-;42512:25;;42551:20;42569:1;42551:20;:::i;:::-;42546:25;;42673:1;42637:34;42633:42;42630:1;42627:49;42624:75;;;42679:18;;:::i;:::-;42624:75;42723:1;42720;42716:9;42709:16;;42458:273;;;;:::o;42737:305::-;42777:3;42796:20;42814:1;42796:20;:::i;:::-;42791:25;;42830:20;42848:1;42830:20;:::i;:::-;42825:25;;42984:1;42916:66;42912:74;42909:1;42906:81;42903:107;;;42990:18;;:::i;:::-;42903:107;43034:1;43031;43027:9;43020:16;;42737:305;;;;:::o;43048:185::-;43088:1;43105:20;43123:1;43105:20;:::i;:::-;43100:25;;43139:20;43157:1;43139:20;:::i;:::-;43134:25;;43178:1;43168:35;;43183:18;;:::i;:::-;43168:35;43225:1;43222;43218:9;43213:14;;43048:185;;;;:::o;43239:348::-;43279:7;43302:20;43320:1;43302:20;:::i;:::-;43297:25;;43336:20;43354:1;43336:20;:::i;:::-;43331:25;;43524:1;43456:66;43452:74;43449:1;43446:81;43441:1;43434:9;43427:17;43423:105;43420:131;;;43531:18;;:::i;:::-;43420:131;43579:1;43576;43572:9;43561:20;;43239:348;;;;:::o;43593:191::-;43633:4;43653:20;43671:1;43653:20;:::i;:::-;43648:25;;43687:20;43705:1;43687:20;:::i;:::-;43682:25;;43726:1;43723;43720:8;43717:34;;;43731:18;;:::i;:::-;43717:34;43776:1;43773;43769:9;43761:17;;43593:191;;;;:::o;43790:::-;43830:4;43850:20;43868:1;43850:20;:::i;:::-;43845:25;;43884:20;43902:1;43884:20;:::i;:::-;43879:25;;43923:1;43920;43917:8;43914:34;;;43928:18;;:::i;:::-;43914:34;43973:1;43970;43966:9;43958:17;;43790:191;;;;:::o;43987:96::-;44024:7;44053:24;44071:5;44053:24;:::i;:::-;44042:35;;43987:96;;;:::o;44089:90::-;44123:7;44166:5;44159:13;44152:21;44141:32;;44089:90;;;:::o;44185:149::-;44221:7;44261:66;44254:5;44250:78;44239:89;;44185:149;;;:::o;44340:118::-;44377:7;44417:34;44410:5;44406:46;44395:57;;44340:118;;;:::o;44464:126::-;44501:7;44541:42;44534:5;44530:54;44519:65;;44464:126;;;:::o;44596:77::-;44633:7;44662:5;44651:16;;44596:77;;;:::o;44679:101::-;44715:7;44755:18;44748:5;44744:30;44733:41;;44679:101;;;:::o;44786:154::-;44870:6;44865:3;44860;44847:30;44932:1;44923:6;44918:3;44914:16;44907:27;44786:154;;;:::o;44946:307::-;45014:1;45024:113;45038:6;45035:1;45032:13;45024:113;;;45123:1;45118:3;45114:11;45108:18;45104:1;45099:3;45095:11;45088:39;45060:2;45057:1;45053:10;45048:15;;45024:113;;;45155:6;45152:1;45149:13;45146:101;;;45235:1;45226:6;45221:3;45217:16;45210:27;45146:101;44995:258;44946:307;;;:::o;45259:171::-;45298:3;45321:24;45339:5;45321:24;:::i;:::-;45312:33;;45367:4;45360:5;45357:15;45354:41;;;45375:18;;:::i;:::-;45354:41;45422:1;45415:5;45411:13;45404:20;;45259:171;;;:::o;45436:320::-;45480:6;45517:1;45511:4;45507:12;45497:22;;45564:1;45558:4;45554:12;45585:18;45575:81;;45641:4;45633:6;45629:17;45619:27;;45575:81;45703:2;45695:6;45692:14;45672:18;45669:38;45666:84;;;45722:18;;:::i;:::-;45666:84;45487:269;45436:320;;;:::o;45762:281::-;45845:27;45867:4;45845:27;:::i;:::-;45837:6;45833:40;45975:6;45963:10;45960:22;45939:18;45927:10;45924:34;45921:62;45918:88;;;45986:18;;:::i;:::-;45918:88;46026:10;46022:2;46015:22;45805:238;45762:281;;:::o;46049:233::-;46088:3;46111:24;46129:5;46111:24;:::i;:::-;46102:33;;46157:66;46150:5;46147:77;46144:103;;;46227:18;;:::i;:::-;46144:103;46274:1;46267:5;46263:13;46256:20;;46049:233;;;:::o;46288:176::-;46320:1;46337:20;46355:1;46337:20;:::i;:::-;46332:25;;46371:20;46389:1;46371:20;:::i;:::-;46366:25;;46410:1;46400:35;;46415:18;;:::i;:::-;46400:35;46456:1;46453;46449:9;46444:14;;46288:176;;;;:::o;46470:180::-;46518:77;46515:1;46508:88;46615:4;46612:1;46605:15;46639:4;46636:1;46629:15;46656:180;46704:77;46701:1;46694:88;46801:4;46798:1;46791:15;46825:4;46822:1;46815:15;46842:180;46890:77;46887:1;46880:88;46987:4;46984:1;46977:15;47011:4;47008:1;47001:15;47028:180;47076:77;47073:1;47066:88;47173:4;47170:1;47163:15;47197:4;47194:1;47187:15;47214:180;47262:77;47259:1;47252:88;47359:4;47356:1;47349:15;47383:4;47380:1;47373:15;47400:117;47509:1;47506;47499:12;47523:117;47632:1;47629;47622:12;47646:117;47755:1;47752;47745:12;47769:117;47878:1;47875;47868:12;47892:117;48001:1;47998;47991:12;48015:117;48124:1;48121;48114:12;48138:102;48179:6;48230:2;48226:7;48221:2;48214:5;48210:14;48206:28;48196:38;;48138:102;;;:::o;48246:221::-;48386:34;48382:1;48374:6;48370:14;48363:58;48455:4;48450:2;48442:6;48438:15;48431:29;48246:221;:::o;48473:225::-;48613:34;48609:1;48601:6;48597:14;48590:58;48682:8;48677:2;48669:6;48665:15;48658:33;48473:225;:::o;48704:229::-;48844:34;48840:1;48832:6;48828:14;48821:58;48913:12;48908:2;48900:6;48896:15;48889:37;48704:229;:::o;48939:231::-;49079:34;49075:1;49067:6;49063:14;49056:58;49148:14;49143:2;49135:6;49131:15;49124:39;48939:231;:::o;49176:222::-;49316:34;49312:1;49304:6;49300:14;49293:58;49385:5;49380:2;49372:6;49368:15;49361:30;49176:222;:::o;49404:224::-;49544:34;49540:1;49532:6;49528:14;49521:58;49613:7;49608:2;49600:6;49596:15;49589:32;49404:224;:::o;49634:236::-;49774:34;49770:1;49762:6;49758:14;49751:58;49843:19;49838:2;49830:6;49826:15;49819:44;49634:236;:::o;49876:180::-;50016:32;50012:1;50004:6;50000:14;49993:56;49876:180;:::o;50062:244::-;50202:34;50198:1;50190:6;50186:14;50179:58;50271:27;50266:2;50258:6;50254:15;50247:52;50062:244;:::o;50312:174::-;50452:26;50448:1;50440:6;50436:14;50429:50;50312:174;:::o;50492:230::-;50632:34;50628:1;50620:6;50616:14;50609:58;50701:13;50696:2;50688:6;50684:15;50677:38;50492:230;:::o;50728:168::-;50868:20;50864:1;50856:6;50852:14;50845:44;50728:168;:::o;50902:225::-;51042:34;51038:1;51030:6;51026:14;51019:58;51111:8;51106:2;51098:6;51094:15;51087:33;50902:225;:::o;51133:180::-;51273:32;51269:1;51261:6;51257:14;51250:56;51133:180;:::o;51319:182::-;51459:34;51455:1;51447:6;51443:14;51436:58;51319:182;:::o;51507:234::-;51647:34;51643:1;51635:6;51631:14;51624:58;51716:17;51711:2;51703:6;51699:15;51692:42;51507:234;:::o;51747:176::-;51887:28;51883:1;51875:6;51871:14;51864:52;51747:176;:::o;51929:237::-;52069:34;52065:1;52057:6;52053:14;52046:58;52138:20;52133:2;52125:6;52121:15;52114:45;51929:237;:::o;52172:179::-;52312:31;52308:1;52300:6;52296:14;52289:55;52172:179;:::o;52357:221::-;52497:34;52493:1;52485:6;52481:14;52474:58;52566:4;52561:2;52553:6;52549:15;52542:29;52357:221;:::o;52584:114::-;;:::o;52704:166::-;52844:18;52840:1;52832:6;52828:14;52821:42;52704:166;:::o;52876:238::-;53016:34;53012:1;53004:6;53000:14;52993:58;53085:21;53080:2;53072:6;53068:15;53061:46;52876:238;:::o;53120:172::-;53260:24;53256:1;53248:6;53244:14;53237:48;53120:172;:::o;53298:179::-;53438:31;53434:1;53426:6;53422:14;53415:55;53298:179;:::o;53483:220::-;53623:34;53619:1;53611:6;53607:14;53600:58;53692:3;53687:2;53679:6;53675:15;53668:28;53483:220;:::o;53709:172::-;53849:24;53845:1;53837:6;53833:14;53826:48;53709:172;:::o;53887:233::-;54027:34;54023:1;54015:6;54011:14;54004:58;54096:16;54091:2;54083:6;54079:15;54072:41;53887:233;:::o;54126:225::-;54266:34;54262:1;54254:6;54250:14;54243:58;54335:8;54330:2;54322:6;54318:15;54311:33;54126:225;:::o;54357:181::-;54497:33;54493:1;54485:6;54481:14;54474:57;54357:181;:::o;54544:234::-;54684:34;54680:1;54672:6;54668:14;54661:58;54753:17;54748:2;54740:6;54736:15;54729:42;54544:234;:::o;54784:232::-;54924:34;54920:1;54912:6;54908:14;54901:58;54993:15;54988:2;54980:6;54976:15;54969:40;54784:232;:::o;55022:221::-;55162:34;55158:1;55150:6;55146:14;55139:58;55231:4;55226:2;55218:6;55214:15;55207:29;55022:221;:::o;55249:122::-;55322:24;55340:5;55322:24;:::i;:::-;55315:5;55312:35;55302:63;;55361:1;55358;55351:12;55302:63;55249:122;:::o;55377:116::-;55447:21;55462:5;55447:21;:::i;:::-;55440:5;55437:32;55427:60;;55483:1;55480;55473:12;55427:60;55377:116;:::o;55499:120::-;55571:23;55588:5;55571:23;:::i;:::-;55564:5;55561:34;55551:62;;55609:1;55606;55599:12;55551:62;55499:120;:::o;55625:122::-;55698:24;55716:5;55698:24;:::i;:::-;55691:5;55688:35;55678:63;;55737:1;55734;55727:12;55678:63;55625:122;:::o;55753:120::-;55825:23;55842:5;55825:23;:::i;:::-;55818:5;55815:34;55805:62;;55863:1;55860;55853:12;55805:62;55753:120;:::o

Swarm Source

ipfs://948405d2dc1329ff01085dd2380be0b140c493f9e15bf773c0974232e95197d6
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.