ETH Price: $3,091.32 (+1.92%)
Gas: 3 Gwei

Token

Nipple Killer (NK)
 

Overview

Max Total Supply

1,686 NK

Holders

761

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
imbrickdup.eth
Balance
3 NK
0x150e8906e199a5203a903cd79969235834edd43c
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:
NippleKiller

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.14;

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

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

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


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

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

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

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

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

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

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

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

// Address.sol
/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ERC721A.sol
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 internal currentIndex = 1;

    // 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) internal _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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @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(totalSupply). 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;
        address currOwnershipAddr;

        // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; 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);
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        require(_exists(tokenId), 'ERC721A: owner query for nonexistent token');

        unchecked {
            for (uint256 curr = tokenId; curr >= 0; 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 Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), 'ERC721A: mint to the zero address');
        require(quantity != 0, 'ERC721A: quantity must be greater than 0');

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
        // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint128(quantity);
            _addressData[to].numberMinted += uint128(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;

            for (uint256 i; i < quantity; i++) {
                emit Transfer(address(0), to, updatedIndex);
                if (safe) {
                    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);

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            _ownerships[tokenId].addr = to;
            _ownerships[tokenId].startTimestamp = 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].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = 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);
    }

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



contract NippleKiller is ERC721A, Ownable {
    
    uint256 MAX_SUPPLY = 3333;
    uint256 FreeRemain;
    uint256 Allremain;
    uint256 public mintRate = 0.003 ether;
    uint256 MintForWallet;
    string public base_URI = "ipfs://QmNP4DDx18UbqJSkARJSuV1jCeSjC13bHYLVYLG2omKpcM/";
    string public baseExtension = ".json";
    bool public start = true;

    mapping (address => uint256) private MintedBalance;

    constructor(
        uint32 maxSupply,
        uint32 FreeSupply,
        uint32 walletLimit
    ) ERC721A("Nipple Killer", "NK") {

        Allremain = maxSupply;
        FreeRemain = FreeSupply;
        MintForWallet = walletLimit;
    }


    function withdraw() external payable onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

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



    function setbaseURI(string memory new_uri) public onlyOwner {
        base_URI = new_uri;
    }


    function pauseStartSwitch() public onlyOwner {
        start = !start;
    }

    function RemainingItem() public view returns (uint256) {
        return Allremain;
    }

    function freeItem() public view returns (uint256) {
        return FreeRemain;
    }

    function mint(uint256 quantity) external payable {
        if(FreeRemain>0){
            nipplekillermagic(quantity);
        }else{
            nipplekillerpay(quantity);
        }
    }

    function nipplekillerpay(uint256 quantity) public payable {
        require(start, "Sorry, Minting is paused.");
        require((MintedBalance[msg.sender]  <= MintForWallet - quantity) , "Sorry, there are only 3 items allowed for each wallet.");
        require((totalSupply() + quantity) <= MAX_SUPPLY, "Sorry, There is no more items.");
        
        require(msg.value >= quantity * mintRate, "Ether is not enough.");


        _safeMint(msg.sender, quantity);
        MintedBalance[msg.sender] = MintedBalance[msg.sender] + quantity;
        Allremain -= quantity;
    }

    function nipplekillermagic(uint256 quantity) public payable {
require(start, "Sorry, Minting is paused.");
        require((MintedBalance[msg.sender]  <= MintForWallet - quantity) , "Sorry, there are only 3 items allowed for each wallet.");
        require((totalSupply() + quantity) <= MAX_SUPPLY, "Sorry, There is no more items.");

        uint256 freemints_in_tx = 0;
        if(FreeRemain > 0) {
            if(quantity == 1) {
                freemints_in_tx += 1;
                FreeRemain -= 1;
            } else if (quantity == 2 && FreeRemain > 1) {
                freemints_in_tx += 2;
                FreeRemain -= 2;
            } else if (quantity == 2 && FreeRemain == 1) {
                freemints_in_tx += 1;
                FreeRemain = 0;
            } else if(quantity >= 3 && FreeRemain > 2){
                freemints_in_tx += 3;
                FreeRemain -= 3;
            } else if (quantity >= 3 && FreeRemain == 2) {
                freemints_in_tx += 2;
                FreeRemain -= 2;
            }else if(quantity >= 3 && FreeRemain == 1){
                freemints_in_tx += 1;
                FreeRemain -= 1;
            }
        }
        
        uint256 etherRequired = ((quantity - freemints_in_tx) * mintRate);
        require(msg.value >= etherRequired, "Not enough ether sent");

        _safeMint(msg.sender, quantity);
        MintedBalance[msg.sender] += quantity;
        Allremain -= quantity;
    }

function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

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

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

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint32","name":"maxSupply","type":"uint32"},{"internalType":"uint32","name":"FreeSupply","type":"uint32"},{"internalType":"uint32","name":"walletLimit","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"RemainingItem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"base_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeItem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"nipplekillermagic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"nipplekillerpay","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseStartSwitch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"new_uri","type":"string"}],"name":"setbaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526001600055610d05600855660aa87bee538000600b5560405180606001604052806036815260200162004c0660369139600d90805190602001906200004b929190620002a6565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600e908051906020019062000099929190620002a6565b506001600f60006101000a81548160ff021916908315150217905550348015620000c257600080fd5b5060405162004c3c38038062004c3c8339818101604052810190620000e891906200039c565b6040518060400160405280600d81526020017f4e6970706c65204b696c6c6572000000000000000000000000000000000000008152506040518060400160405280600281526020017f4e4b00000000000000000000000000000000000000000000000000000000000081525081600190805190602001906200016c929190620002a6565b50806002908051906020019062000185929190620002a6565b505050620001a86200019c620001d860201b60201c565b620001e060201b60201c565b8263ffffffff16600a819055508163ffffffff166009819055508063ffffffff16600c819055505050506200045c565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002b49062000427565b90600052602060002090601f016020900481019282620002d8576000855562000324565b82601f10620002f357805160ff191683800117855562000324565b8280016001018555821562000324579182015b828111156200032357825182559160200191906001019062000306565b5b50905062000333919062000337565b5090565b5b808211156200035257600081600090555060010162000338565b5090565b600080fd5b600063ffffffff82169050919050565b62000376816200035b565b81146200038257600080fd5b50565b60008151905062000396816200036b565b92915050565b600080600060608486031215620003b857620003b762000356565b5b6000620003c88682870162000385565b9350506020620003db8682870162000385565b9250506040620003ee8682870162000385565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200044057607f821691505b602082108103620004565762000455620003f8565b5b50919050565b61479a806200046c6000396000f3fe6080604052600436106101e35760003560e01c806370a0823111610102578063a95a91e111610095578063c87b56dd11610064578063c87b56dd14610698578063ca0dcf16146106d5578063e985e9c514610700578063f2fde38b1461073d576101e3565b8063a95a91e1146105ee578063b88d4fde14610619578063be9a655514610642578063c66828621461066d576101e3565b806395d89b41116100d157806395d89b41146105535780639e8903351461057e578063a0712d68146105a9578063a22cb465146105c5576101e3565b806370a08231146104a9578063715018a6146104e65780637f89e973146104fd5780638da5cb5b14610528576101e3565b80633b57d8d01161017a57806346c37f8d1161014957806346c37f8d146103ea5780634a44f379146104065780634f6ccce71461042f5780636352211e1461046c576101e3565b80633b57d8d01461035e5780633ccfd60b1461037a57806342842e0e14610384578063438b6300146103ad576101e3565b806318160ddd116101b657806318160ddd146102b657806323b872dd146102e15780632e84d90e1461030a5780632f745c5914610321576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612f18565b610766565b60405161021c9190612f60565b60405180910390f35b34801561023157600080fd5b5061023a6108b0565b6040516102479190613014565b60405180910390f35b34801561025c57600080fd5b506102776004803603810190610272919061306c565b610942565b60405161028491906130da565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190613121565b6109c7565b005b3480156102c257600080fd5b506102cb610adf565b6040516102d89190613170565b60405180910390f35b3480156102ed57600080fd5b506103086004803603810190610303919061318b565b610af5565b005b34801561031657600080fd5b5061031f610b05565b005b34801561032d57600080fd5b5061034860048036038101906103439190613121565b610bad565b6040516103559190613170565b60405180910390f35b6103786004803603810190610373919061306c565b610d9d565b005b61038261113e565b005b34801561039057600080fd5b506103ab60048036038101906103a6919061318b565b61120a565b005b3480156103b957600080fd5b506103d460048036038101906103cf91906131de565b61122a565b6040516103e191906132c9565b60405180910390f35b61040460048036038101906103ff919061306c565b6112d8565b005b34801561041257600080fd5b5061042d60048036038101906104289190613420565b611511565b005b34801561043b57600080fd5b506104566004803603810190610451919061306c565b6115a7565b6040516104639190613170565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e919061306c565b6115fa565b6040516104a091906130da565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb91906131de565b611610565b6040516104dd9190613170565b60405180910390f35b3480156104f257600080fd5b506104fb6116f8565b005b34801561050957600080fd5b50610512611780565b60405161051f9190613170565b60405180910390f35b34801561053457600080fd5b5061053d61178a565b60405161054a91906130da565b60405180910390f35b34801561055f57600080fd5b506105686117b4565b6040516105759190613014565b60405180910390f35b34801561058a57600080fd5b50610593611846565b6040516105a09190613014565b60405180910390f35b6105c360048036038101906105be919061306c565b6118d4565b005b3480156105d157600080fd5b506105ec60048036038101906105e79190613495565b6118fa565b005b3480156105fa57600080fd5b50610603611a7a565b6040516106109190613170565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190613576565b611a84565b005b34801561064e57600080fd5b50610657611ae0565b6040516106649190612f60565b60405180910390f35b34801561067957600080fd5b50610682611af3565b60405161068f9190613014565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba919061306c565b611b81565b6040516106cc9190613014565b60405180910390f35b3480156106e157600080fd5b506106ea611c2b565b6040516106f79190613170565b60405180910390f35b34801561070c57600080fd5b50610727600480360381019061072291906135f9565b611c31565b6040516107349190612f60565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f91906131de565b611cc5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061083157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061089957507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108a957506108a882611dbc565b5b9050919050565b6060600180546108bf90613668565b80601f01602080910402602001604051908101604052809291908181526020018280546108eb90613668565b80156109385780601f1061090d57610100808354040283529160200191610938565b820191906000526020600020905b81548152906001019060200180831161091b57829003601f168201915b5050505050905090565b600061094d82611e26565b61098c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109839061370b565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109d2826115fa565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a399061379d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a61611e33565b73ffffffffffffffffffffffffffffffffffffffff161480610a905750610a8f81610a8a611e33565b611c31565b5b610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac69061382f565b60405180910390fd5b610ada838383611e3b565b505050565b60006001600054610af0919061387e565b905090565b610b00838383611eed565b505050565b610b0d611e33565b73ffffffffffffffffffffffffffffffffffffffff16610b2b61178a565b73ffffffffffffffffffffffffffffffffffffffff1614610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b78906138fe565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b6000610bb883611610565b8210610bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf090613990565b60405180910390fd5b6000610c03610adf565b905060008060005b83811015610d5b576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610cfd57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d4d57868403610d44578195505050505050610d97565b83806001019450505b508080600101915050610c0b565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90613a22565b60405180910390fd5b92915050565b600f60009054906101000a900460ff16610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390613a8e565b60405180910390fd5b80600c54610dfa919061387e565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290613b20565b60405180910390fd5b60085481610e87610adf565b610e919190613b40565b1115610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec990613be2565b60405180910390fd5b60008060095411156110605760018203610f1457600181610ef39190613b40565b9050600160096000828254610f08919061387e565b9250508190555061105f565b600282148015610f2657506001600954115b15610f5957600281610f389190613b40565b9050600260096000828254610f4d919061387e565b9250508190555061105e565b600282148015610f6b57506001600954145b15610f8c57600181610f7d9190613b40565b9050600060098190555061105d565b60038210158015610f9f57506002600954115b15610fd257600381610fb19190613b40565b9050600360096000828254610fc6919061387e565b9250508190555061105c565b60038210158015610fe557506002600954145b1561101857600281610ff79190613b40565b905060026009600082825461100c919061387e565b9250508190555061105b565b6003821015801561102b57506001600954145b1561105a5760018161103d9190613b40565b9050600160096000828254611052919061387e565b925050819055505b5b5b5b5b5b5b6000600b548284611071919061387e565b61107b9190613c02565b9050803410156110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b790613ca8565b60405180910390fd5b6110ca338461242b565b82601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111199190613b40565b9250508190555082600a6000828254611132919061387e565b92505081905550505050565b611146611e33565b73ffffffffffffffffffffffffffffffffffffffff1661116461178a565b73ffffffffffffffffffffffffffffffffffffffff16146111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b1906138fe565b60405180910390fd5b6111c261178a565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611207573d6000803e3d6000fd5b50565b61122583838360405180602001604052806000815250611a84565b505050565b6060600061123783611610565b905060008167ffffffffffffffff811115611255576112546132f5565b5b6040519080825280602002602001820160405280156112835781602001602082028036833780820191505090505b50905060005b828110156112cd5761129b8582610bad565b8282815181106112ae576112ad613cc8565b5b60200260200101818152505080806112c590613cf7565b915050611289565b508092505050919050565b600f60009054906101000a900460ff16611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e90613a8e565b60405180910390fd5b80600c54611335919061387e565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad90613b20565b60405180910390fd5b600854816113c2610adf565b6113cc9190613b40565b111561140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140490613be2565b60405180910390fd5b600b548161141b9190613c02565b34101561145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490613d8b565b60405180910390fd5b611467338261242b565b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114b29190613b40565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600a6000828254611507919061387e565b9250508190555050565b611519611e33565b73ffffffffffffffffffffffffffffffffffffffff1661153761178a565b73ffffffffffffffffffffffffffffffffffffffff161461158d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611584906138fe565b60405180910390fd5b80600d90805190602001906115a3929190612dcf565b5050565b60006115b1610adf565b82106115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e990613e1d565b60405180910390fd5b819050919050565b600061160582612449565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790613eaf565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611700611e33565b73ffffffffffffffffffffffffffffffffffffffff1661171e61178a565b73ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b906138fe565b60405180910390fd5b61177e60006125e3565b565b6000600954905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546117c390613668565b80601f01602080910402602001604051908101604052809291908181526020018280546117ef90613668565b801561183c5780601f106118115761010080835404028352916020019161183c565b820191906000526020600020905b81548152906001019060200180831161181f57829003601f168201915b5050505050905090565b600d805461185390613668565b80601f016020809104026020016040519081016040528092919081815260200182805461187f90613668565b80156118cc5780601f106118a1576101008083540402835291602001916118cc565b820191906000526020600020905b8154815290600101906020018083116118af57829003601f168201915b505050505081565b600060095411156118ed576118e881610d9d565b6118f7565b6118f6816112d8565b5b50565b611902611e33565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690613f1b565b60405180910390fd5b806006600061197c611e33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a29611e33565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a6e9190612f60565b60405180910390a35050565b6000600a54905090565b611a8f848484611eed565b611a9b848484846126a9565b611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190613fad565b60405180910390fd5b50505050565b600f60009054906101000a900460ff1681565b600e8054611b0090613668565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2c90613668565b8015611b795780601f10611b4e57610100808354040283529160200191611b79565b820191906000526020600020905b815481529060010190602001808311611b5c57829003601f168201915b505050505081565b6060611b8c82611e26565b611bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc29061403f565b60405180910390fd5b6000611bd5612830565b90506000815111611bf55760405180602001604052806000815250611c23565b80611bff846128c2565b600e604051602001611c139392919061412f565b6040516020818303038152906040525b915050919050565b600b5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ccd611e33565b73ffffffffffffffffffffffffffffffffffffffff16611ceb61178a565b73ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d38906138fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da7906141d2565b60405180910390fd5b611db9816125e3565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ef882612449565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611f1f611e33565b73ffffffffffffffffffffffffffffffffffffffff161480611f7b5750611f44611e33565b73ffffffffffffffffffffffffffffffffffffffff16611f6384610942565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f975750611f968260000151611f91611e33565b611c31565b5b905080611fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd090614264565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461204b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612042906142f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b190614388565b60405180910390fd5b6120c78585856001612a22565b6120d76000848460000151611e3b565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036123bb5761231a81611e26565b156123ba5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124248585856001612a28565b5050505050565b612445828260405180602001604052806000815250612a2e565b5050565b612451612e55565b61245a82611e26565b612499576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124909061441a565b60405180910390fd5b60008290505b600081106125a2576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146125935780925050506125de565b5080806001900391505061249f565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d5906144ac565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006126ca8473ffffffffffffffffffffffffffffffffffffffff16612a40565b15612823578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126f3611e33565b8786866040518563ffffffff1660e01b81526004016127159493929190614521565b6020604051808303816000875af192505050801561275157506040513d601f19601f8201168201806040525081019061274e9190614582565b60015b6127d3573d8060008114612781576040519150601f19603f3d011682016040523d82523d6000602084013e612786565b606091505b5060008151036127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c290613fad565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612828565b600190505b949350505050565b6060600d805461283f90613668565b80601f016020809104026020016040519081016040528092919081815260200182805461286b90613668565b80156128b85780601f1061288d576101008083540402835291602001916128b8565b820191906000526020600020905b81548152906001019060200180831161289b57829003601f168201915b5050505050905090565b606060008203612909576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a1d565b600082905060005b6000821461293b57808061292490613cf7565b915050600a8261293491906145de565b9150612911565b60008167ffffffffffffffff811115612957576129566132f5565b5b6040519080825280601f01601f1916602001820160405280156129895781602001600182028036833780820191505090505b5090505b60008514612a16576001826129a2919061387e565b9150600a856129b1919061460f565b60306129bd9190613b40565b60f81b8183815181106129d3576129d2613cc8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a0f91906145de565b945061298d565b8093505050505b919050565b50505050565b50505050565b612a3b8383836001612a53565b505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abf906146b2565b60405180910390fd5b60008403612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0290614744565b60405180910390fd5b612b186000868387612a22565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612db257818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612d9d57612d5d60008884886126a9565b612d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9390613fad565b60405180910390fd5b5b81806001019250508080600101915050612ce6565b508060008190555050612dc86000868387612a28565b5050505050565b828054612ddb90613668565b90600052602060002090601f016020900481019282612dfd5760008555612e44565b82601f10612e1657805160ff1916838001178555612e44565b82800160010185558215612e44579182015b82811115612e43578251825591602001919060010190612e28565b5b509050612e519190612e8f565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612ea8576000816000905550600101612e90565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ef581612ec0565b8114612f0057600080fd5b50565b600081359050612f1281612eec565b92915050565b600060208284031215612f2e57612f2d612eb6565b5b6000612f3c84828501612f03565b91505092915050565b60008115159050919050565b612f5a81612f45565b82525050565b6000602082019050612f756000830184612f51565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fb5578082015181840152602081019050612f9a565b83811115612fc4576000848401525b50505050565b6000601f19601f8301169050919050565b6000612fe682612f7b565b612ff08185612f86565b9350613000818560208601612f97565b61300981612fca565b840191505092915050565b6000602082019050818103600083015261302e8184612fdb565b905092915050565b6000819050919050565b61304981613036565b811461305457600080fd5b50565b60008135905061306681613040565b92915050565b60006020828403121561308257613081612eb6565b5b600061309084828501613057565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130c482613099565b9050919050565b6130d4816130b9565b82525050565b60006020820190506130ef60008301846130cb565b92915050565b6130fe816130b9565b811461310957600080fd5b50565b60008135905061311b816130f5565b92915050565b6000806040838503121561313857613137612eb6565b5b60006131468582860161310c565b925050602061315785828601613057565b9150509250929050565b61316a81613036565b82525050565b60006020820190506131856000830184613161565b92915050565b6000806000606084860312156131a4576131a3612eb6565b5b60006131b28682870161310c565b93505060206131c38682870161310c565b92505060406131d486828701613057565b9150509250925092565b6000602082840312156131f4576131f3612eb6565b5b60006132028482850161310c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61324081613036565b82525050565b60006132528383613237565b60208301905092915050565b6000602082019050919050565b60006132768261320b565b6132808185613216565b935061328b83613227565b8060005b838110156132bc5781516132a38882613246565b97506132ae8361325e565b92505060018101905061328f565b5085935050505092915050565b600060208201905081810360008301526132e3818461326b565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61332d82612fca565b810181811067ffffffffffffffff8211171561334c5761334b6132f5565b5b80604052505050565b600061335f612eac565b905061336b8282613324565b919050565b600067ffffffffffffffff82111561338b5761338a6132f5565b5b61339482612fca565b9050602081019050919050565b82818337600083830152505050565b60006133c36133be84613370565b613355565b9050828152602081018484840111156133df576133de6132f0565b5b6133ea8482856133a1565b509392505050565b600082601f830112613407576134066132eb565b5b81356134178482602086016133b0565b91505092915050565b60006020828403121561343657613435612eb6565b5b600082013567ffffffffffffffff81111561345457613453612ebb565b5b613460848285016133f2565b91505092915050565b61347281612f45565b811461347d57600080fd5b50565b60008135905061348f81613469565b92915050565b600080604083850312156134ac576134ab612eb6565b5b60006134ba8582860161310c565b92505060206134cb85828601613480565b9150509250929050565b600067ffffffffffffffff8211156134f0576134ef6132f5565b5b6134f982612fca565b9050602081019050919050565b6000613519613514846134d5565b613355565b905082815260208101848484011115613535576135346132f0565b5b6135408482856133a1565b509392505050565b600082601f83011261355d5761355c6132eb565b5b813561356d848260208601613506565b91505092915050565b600080600080608085870312156135905761358f612eb6565b5b600061359e8782880161310c565b94505060206135af8782880161310c565b93505060406135c087828801613057565b925050606085013567ffffffffffffffff8111156135e1576135e0612ebb565b5b6135ed87828801613548565b91505092959194509250565b600080604083850312156136105761360f612eb6565b5b600061361e8582860161310c565b925050602061362f8582860161310c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061368057607f821691505b60208210810361369357613692613639565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006136f5602d83612f86565b915061370082613699565b604082019050919050565b60006020820190508181036000830152613724816136e8565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613787602283612f86565b91506137928261372b565b604082019050919050565b600060208201905081810360008301526137b68161377a565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613819603983612f86565b9150613824826137bd565b604082019050919050565b600060208201905081810360008301526138488161380c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061388982613036565b915061389483613036565b9250828210156138a7576138a661384f565b5b828203905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138e8602083612f86565b91506138f3826138b2565b602082019050919050565b60006020820190508181036000830152613917816138db565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b600061397a602283612f86565b91506139858261391e565b604082019050919050565b600060208201905081810360008301526139a98161396d565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000613a0c602e83612f86565b9150613a17826139b0565b604082019050919050565b60006020820190508181036000830152613a3b816139ff565b9050919050565b7f536f7272792c204d696e74696e67206973207061757365642e00000000000000600082015250565b6000613a78601983612f86565b9150613a8382613a42565b602082019050919050565b60006020820190508181036000830152613aa781613a6b565b9050919050565b7f536f7272792c20746865726520617265206f6e6c792033206974656d7320616c60008201527f6c6f77656420666f7220656163682077616c6c65742e00000000000000000000602082015250565b6000613b0a603683612f86565b9150613b1582613aae565b604082019050919050565b60006020820190508181036000830152613b3981613afd565b9050919050565b6000613b4b82613036565b9150613b5683613036565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b8b57613b8a61384f565b5b828201905092915050565b7f536f7272792c205468657265206973206e6f206d6f7265206974656d732e0000600082015250565b6000613bcc601e83612f86565b9150613bd782613b96565b602082019050919050565b60006020820190508181036000830152613bfb81613bbf565b9050919050565b6000613c0d82613036565b9150613c1883613036565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c5157613c5061384f565b5b828202905092915050565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b6000613c92601583612f86565b9150613c9d82613c5c565b602082019050919050565b60006020820190508181036000830152613cc181613c85565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613d0282613036565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d3457613d3361384f565b5b600182019050919050565b7f4574686572206973206e6f7420656e6f7567682e000000000000000000000000600082015250565b6000613d75601483612f86565b9150613d8082613d3f565b602082019050919050565b60006020820190508181036000830152613da481613d68565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e07602383612f86565b9150613e1282613dab565b604082019050919050565b60006020820190508181036000830152613e3681613dfa565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613e99602b83612f86565b9150613ea482613e3d565b604082019050919050565b60006020820190508181036000830152613ec881613e8c565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613f05601a83612f86565b9150613f1082613ecf565b602082019050919050565b60006020820190508181036000830152613f3481613ef8565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000613f97603383612f86565b9150613fa282613f3b565b604082019050919050565b60006020820190508181036000830152613fc681613f8a565b9050919050565b7f455243373231414d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b6000614029603083612f86565b915061403482613fcd565b604082019050919050565b600060208201905081810360008301526140588161401c565b9050919050565b600081905092915050565b600061407582612f7b565b61407f818561405f565b935061408f818560208601612f97565b80840191505092915050565b60008190508160005260206000209050919050565b600081546140bd81613668565b6140c7818661405f565b945060018216600081146140e257600181146140f357614126565b60ff19831686528186019350614126565b6140fc8561409b565b60005b8381101561411e578154818901526001820191506020810190506140ff565b838801955050505b50505092915050565b600061413b828661406a565b9150614147828561406a565b915061415382846140b0565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141bc602683612f86565b91506141c782614160565b604082019050919050565b600060208201905081810360008301526141eb816141af565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b600061424e603283612f86565b9150614259826141f2565b604082019050919050565b6000602082019050818103600083015261427d81614241565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006142e0602683612f86565b91506142eb82614284565b604082019050919050565b6000602082019050818103600083015261430f816142d3565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614372602583612f86565b915061437d82614316565b604082019050919050565b600060208201905081810360008301526143a181614365565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614404602a83612f86565b915061440f826143a8565b604082019050919050565b60006020820190508181036000830152614433816143f7565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b6000614496602f83612f86565b91506144a18261443a565b604082019050919050565b600060208201905081810360008301526144c581614489565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006144f3826144cc565b6144fd81856144d7565b935061450d818560208601612f97565b61451681612fca565b840191505092915050565b600060808201905061453660008301876130cb565b61454360208301866130cb565b6145506040830185613161565b818103606083015261456281846144e8565b905095945050505050565b60008151905061457c81612eec565b92915050565b60006020828403121561459857614597612eb6565b5b60006145a68482850161456d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006145e982613036565b91506145f483613036565b925082614604576146036145af565b5b828204905092915050565b600061461a82613036565b915061462583613036565b925082614635576146346145af565b5b828206905092915050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061469c602183612f86565b91506146a782614640565b604082019050919050565b600060208201905081810360008301526146cb8161468f565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b600061472e602883612f86565b9150614739826146d2565b604082019050919050565b6000602082019050818103600083015261475d81614721565b905091905056fea2646970667358221220b9e10d6704dc26fbd24b5ff802ab526cdb563ca500ff029d331e42e34b13769d64736f6c634300080e0033697066733a2f2f516d4e503444447831385562714a536b41524a537556316a4365536a4331336248594c56594c47326f6d4b70634d2f0000000000000000000000000000000000000000000000000000000000000d0500000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000003

Deployed Bytecode

0x6080604052600436106101e35760003560e01c806370a0823111610102578063a95a91e111610095578063c87b56dd11610064578063c87b56dd14610698578063ca0dcf16146106d5578063e985e9c514610700578063f2fde38b1461073d576101e3565b8063a95a91e1146105ee578063b88d4fde14610619578063be9a655514610642578063c66828621461066d576101e3565b806395d89b41116100d157806395d89b41146105535780639e8903351461057e578063a0712d68146105a9578063a22cb465146105c5576101e3565b806370a08231146104a9578063715018a6146104e65780637f89e973146104fd5780638da5cb5b14610528576101e3565b80633b57d8d01161017a57806346c37f8d1161014957806346c37f8d146103ea5780634a44f379146104065780634f6ccce71461042f5780636352211e1461046c576101e3565b80633b57d8d01461035e5780633ccfd60b1461037a57806342842e0e14610384578063438b6300146103ad576101e3565b806318160ddd116101b657806318160ddd146102b657806323b872dd146102e15780632e84d90e1461030a5780632f745c5914610321576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612f18565b610766565b60405161021c9190612f60565b60405180910390f35b34801561023157600080fd5b5061023a6108b0565b6040516102479190613014565b60405180910390f35b34801561025c57600080fd5b506102776004803603810190610272919061306c565b610942565b60405161028491906130da565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190613121565b6109c7565b005b3480156102c257600080fd5b506102cb610adf565b6040516102d89190613170565b60405180910390f35b3480156102ed57600080fd5b506103086004803603810190610303919061318b565b610af5565b005b34801561031657600080fd5b5061031f610b05565b005b34801561032d57600080fd5b5061034860048036038101906103439190613121565b610bad565b6040516103559190613170565b60405180910390f35b6103786004803603810190610373919061306c565b610d9d565b005b61038261113e565b005b34801561039057600080fd5b506103ab60048036038101906103a6919061318b565b61120a565b005b3480156103b957600080fd5b506103d460048036038101906103cf91906131de565b61122a565b6040516103e191906132c9565b60405180910390f35b61040460048036038101906103ff919061306c565b6112d8565b005b34801561041257600080fd5b5061042d60048036038101906104289190613420565b611511565b005b34801561043b57600080fd5b506104566004803603810190610451919061306c565b6115a7565b6040516104639190613170565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e919061306c565b6115fa565b6040516104a091906130da565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb91906131de565b611610565b6040516104dd9190613170565b60405180910390f35b3480156104f257600080fd5b506104fb6116f8565b005b34801561050957600080fd5b50610512611780565b60405161051f9190613170565b60405180910390f35b34801561053457600080fd5b5061053d61178a565b60405161054a91906130da565b60405180910390f35b34801561055f57600080fd5b506105686117b4565b6040516105759190613014565b60405180910390f35b34801561058a57600080fd5b50610593611846565b6040516105a09190613014565b60405180910390f35b6105c360048036038101906105be919061306c565b6118d4565b005b3480156105d157600080fd5b506105ec60048036038101906105e79190613495565b6118fa565b005b3480156105fa57600080fd5b50610603611a7a565b6040516106109190613170565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190613576565b611a84565b005b34801561064e57600080fd5b50610657611ae0565b6040516106649190612f60565b60405180910390f35b34801561067957600080fd5b50610682611af3565b60405161068f9190613014565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba919061306c565b611b81565b6040516106cc9190613014565b60405180910390f35b3480156106e157600080fd5b506106ea611c2b565b6040516106f79190613170565b60405180910390f35b34801561070c57600080fd5b50610727600480360381019061072291906135f9565b611c31565b6040516107349190612f60565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f91906131de565b611cc5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061083157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061089957507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108a957506108a882611dbc565b5b9050919050565b6060600180546108bf90613668565b80601f01602080910402602001604051908101604052809291908181526020018280546108eb90613668565b80156109385780601f1061090d57610100808354040283529160200191610938565b820191906000526020600020905b81548152906001019060200180831161091b57829003601f168201915b5050505050905090565b600061094d82611e26565b61098c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109839061370b565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109d2826115fa565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a399061379d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a61611e33565b73ffffffffffffffffffffffffffffffffffffffff161480610a905750610a8f81610a8a611e33565b611c31565b5b610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac69061382f565b60405180910390fd5b610ada838383611e3b565b505050565b60006001600054610af0919061387e565b905090565b610b00838383611eed565b505050565b610b0d611e33565b73ffffffffffffffffffffffffffffffffffffffff16610b2b61178a565b73ffffffffffffffffffffffffffffffffffffffff1614610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b78906138fe565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b6000610bb883611610565b8210610bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf090613990565b60405180910390fd5b6000610c03610adf565b905060008060005b83811015610d5b576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610cfd57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d4d57868403610d44578195505050505050610d97565b83806001019450505b508080600101915050610c0b565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90613a22565b60405180910390fd5b92915050565b600f60009054906101000a900460ff16610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390613a8e565b60405180910390fd5b80600c54610dfa919061387e565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290613b20565b60405180910390fd5b60085481610e87610adf565b610e919190613b40565b1115610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec990613be2565b60405180910390fd5b60008060095411156110605760018203610f1457600181610ef39190613b40565b9050600160096000828254610f08919061387e565b9250508190555061105f565b600282148015610f2657506001600954115b15610f5957600281610f389190613b40565b9050600260096000828254610f4d919061387e565b9250508190555061105e565b600282148015610f6b57506001600954145b15610f8c57600181610f7d9190613b40565b9050600060098190555061105d565b60038210158015610f9f57506002600954115b15610fd257600381610fb19190613b40565b9050600360096000828254610fc6919061387e565b9250508190555061105c565b60038210158015610fe557506002600954145b1561101857600281610ff79190613b40565b905060026009600082825461100c919061387e565b9250508190555061105b565b6003821015801561102b57506001600954145b1561105a5760018161103d9190613b40565b9050600160096000828254611052919061387e565b925050819055505b5b5b5b5b5b5b6000600b548284611071919061387e565b61107b9190613c02565b9050803410156110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b790613ca8565b60405180910390fd5b6110ca338461242b565b82601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111199190613b40565b9250508190555082600a6000828254611132919061387e565b92505081905550505050565b611146611e33565b73ffffffffffffffffffffffffffffffffffffffff1661116461178a565b73ffffffffffffffffffffffffffffffffffffffff16146111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b1906138fe565b60405180910390fd5b6111c261178a565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611207573d6000803e3d6000fd5b50565b61122583838360405180602001604052806000815250611a84565b505050565b6060600061123783611610565b905060008167ffffffffffffffff811115611255576112546132f5565b5b6040519080825280602002602001820160405280156112835781602001602082028036833780820191505090505b50905060005b828110156112cd5761129b8582610bad565b8282815181106112ae576112ad613cc8565b5b60200260200101818152505080806112c590613cf7565b915050611289565b508092505050919050565b600f60009054906101000a900460ff16611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e90613a8e565b60405180910390fd5b80600c54611335919061387e565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad90613b20565b60405180910390fd5b600854816113c2610adf565b6113cc9190613b40565b111561140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140490613be2565b60405180910390fd5b600b548161141b9190613c02565b34101561145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490613d8b565b60405180910390fd5b611467338261242b565b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114b29190613b40565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600a6000828254611507919061387e565b9250508190555050565b611519611e33565b73ffffffffffffffffffffffffffffffffffffffff1661153761178a565b73ffffffffffffffffffffffffffffffffffffffff161461158d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611584906138fe565b60405180910390fd5b80600d90805190602001906115a3929190612dcf565b5050565b60006115b1610adf565b82106115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e990613e1d565b60405180910390fd5b819050919050565b600061160582612449565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790613eaf565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611700611e33565b73ffffffffffffffffffffffffffffffffffffffff1661171e61178a565b73ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b906138fe565b60405180910390fd5b61177e60006125e3565b565b6000600954905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546117c390613668565b80601f01602080910402602001604051908101604052809291908181526020018280546117ef90613668565b801561183c5780601f106118115761010080835404028352916020019161183c565b820191906000526020600020905b81548152906001019060200180831161181f57829003601f168201915b5050505050905090565b600d805461185390613668565b80601f016020809104026020016040519081016040528092919081815260200182805461187f90613668565b80156118cc5780601f106118a1576101008083540402835291602001916118cc565b820191906000526020600020905b8154815290600101906020018083116118af57829003601f168201915b505050505081565b600060095411156118ed576118e881610d9d565b6118f7565b6118f6816112d8565b5b50565b611902611e33565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690613f1b565b60405180910390fd5b806006600061197c611e33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a29611e33565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a6e9190612f60565b60405180910390a35050565b6000600a54905090565b611a8f848484611eed565b611a9b848484846126a9565b611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190613fad565b60405180910390fd5b50505050565b600f60009054906101000a900460ff1681565b600e8054611b0090613668565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2c90613668565b8015611b795780601f10611b4e57610100808354040283529160200191611b79565b820191906000526020600020905b815481529060010190602001808311611b5c57829003601f168201915b505050505081565b6060611b8c82611e26565b611bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc29061403f565b60405180910390fd5b6000611bd5612830565b90506000815111611bf55760405180602001604052806000815250611c23565b80611bff846128c2565b600e604051602001611c139392919061412f565b6040516020818303038152906040525b915050919050565b600b5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ccd611e33565b73ffffffffffffffffffffffffffffffffffffffff16611ceb61178a565b73ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d38906138fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da7906141d2565b60405180910390fd5b611db9816125e3565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ef882612449565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611f1f611e33565b73ffffffffffffffffffffffffffffffffffffffff161480611f7b5750611f44611e33565b73ffffffffffffffffffffffffffffffffffffffff16611f6384610942565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f975750611f968260000151611f91611e33565b611c31565b5b905080611fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd090614264565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461204b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612042906142f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b190614388565b60405180910390fd5b6120c78585856001612a22565b6120d76000848460000151611e3b565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036123bb5761231a81611e26565b156123ba5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124248585856001612a28565b5050505050565b612445828260405180602001604052806000815250612a2e565b5050565b612451612e55565b61245a82611e26565b612499576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124909061441a565b60405180910390fd5b60008290505b600081106125a2576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146125935780925050506125de565b5080806001900391505061249f565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d5906144ac565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006126ca8473ffffffffffffffffffffffffffffffffffffffff16612a40565b15612823578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126f3611e33565b8786866040518563ffffffff1660e01b81526004016127159493929190614521565b6020604051808303816000875af192505050801561275157506040513d601f19601f8201168201806040525081019061274e9190614582565b60015b6127d3573d8060008114612781576040519150601f19603f3d011682016040523d82523d6000602084013e612786565b606091505b5060008151036127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c290613fad565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612828565b600190505b949350505050565b6060600d805461283f90613668565b80601f016020809104026020016040519081016040528092919081815260200182805461286b90613668565b80156128b85780601f1061288d576101008083540402835291602001916128b8565b820191906000526020600020905b81548152906001019060200180831161289b57829003601f168201915b5050505050905090565b606060008203612909576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a1d565b600082905060005b6000821461293b57808061292490613cf7565b915050600a8261293491906145de565b9150612911565b60008167ffffffffffffffff811115612957576129566132f5565b5b6040519080825280601f01601f1916602001820160405280156129895781602001600182028036833780820191505090505b5090505b60008514612a16576001826129a2919061387e565b9150600a856129b1919061460f565b60306129bd9190613b40565b60f81b8183815181106129d3576129d2613cc8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a0f91906145de565b945061298d565b8093505050505b919050565b50505050565b50505050565b612a3b8383836001612a53565b505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abf906146b2565b60405180910390fd5b60008403612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0290614744565b60405180910390fd5b612b186000868387612a22565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612db257818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612d9d57612d5d60008884886126a9565b612d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9390613fad565b60405180910390fd5b5b81806001019250508080600101915050612ce6565b508060008190555050612dc86000868387612a28565b5050505050565b828054612ddb90613668565b90600052602060002090601f016020900481019282612dfd5760008555612e44565b82601f10612e1657805160ff1916838001178555612e44565b82800160010185558215612e44579182015b82811115612e43578251825591602001919060010190612e28565b5b509050612e519190612e8f565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612ea8576000816000905550600101612e90565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ef581612ec0565b8114612f0057600080fd5b50565b600081359050612f1281612eec565b92915050565b600060208284031215612f2e57612f2d612eb6565b5b6000612f3c84828501612f03565b91505092915050565b60008115159050919050565b612f5a81612f45565b82525050565b6000602082019050612f756000830184612f51565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fb5578082015181840152602081019050612f9a565b83811115612fc4576000848401525b50505050565b6000601f19601f8301169050919050565b6000612fe682612f7b565b612ff08185612f86565b9350613000818560208601612f97565b61300981612fca565b840191505092915050565b6000602082019050818103600083015261302e8184612fdb565b905092915050565b6000819050919050565b61304981613036565b811461305457600080fd5b50565b60008135905061306681613040565b92915050565b60006020828403121561308257613081612eb6565b5b600061309084828501613057565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130c482613099565b9050919050565b6130d4816130b9565b82525050565b60006020820190506130ef60008301846130cb565b92915050565b6130fe816130b9565b811461310957600080fd5b50565b60008135905061311b816130f5565b92915050565b6000806040838503121561313857613137612eb6565b5b60006131468582860161310c565b925050602061315785828601613057565b9150509250929050565b61316a81613036565b82525050565b60006020820190506131856000830184613161565b92915050565b6000806000606084860312156131a4576131a3612eb6565b5b60006131b28682870161310c565b93505060206131c38682870161310c565b92505060406131d486828701613057565b9150509250925092565b6000602082840312156131f4576131f3612eb6565b5b60006132028482850161310c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61324081613036565b82525050565b60006132528383613237565b60208301905092915050565b6000602082019050919050565b60006132768261320b565b6132808185613216565b935061328b83613227565b8060005b838110156132bc5781516132a38882613246565b97506132ae8361325e565b92505060018101905061328f565b5085935050505092915050565b600060208201905081810360008301526132e3818461326b565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61332d82612fca565b810181811067ffffffffffffffff8211171561334c5761334b6132f5565b5b80604052505050565b600061335f612eac565b905061336b8282613324565b919050565b600067ffffffffffffffff82111561338b5761338a6132f5565b5b61339482612fca565b9050602081019050919050565b82818337600083830152505050565b60006133c36133be84613370565b613355565b9050828152602081018484840111156133df576133de6132f0565b5b6133ea8482856133a1565b509392505050565b600082601f830112613407576134066132eb565b5b81356134178482602086016133b0565b91505092915050565b60006020828403121561343657613435612eb6565b5b600082013567ffffffffffffffff81111561345457613453612ebb565b5b613460848285016133f2565b91505092915050565b61347281612f45565b811461347d57600080fd5b50565b60008135905061348f81613469565b92915050565b600080604083850312156134ac576134ab612eb6565b5b60006134ba8582860161310c565b92505060206134cb85828601613480565b9150509250929050565b600067ffffffffffffffff8211156134f0576134ef6132f5565b5b6134f982612fca565b9050602081019050919050565b6000613519613514846134d5565b613355565b905082815260208101848484011115613535576135346132f0565b5b6135408482856133a1565b509392505050565b600082601f83011261355d5761355c6132eb565b5b813561356d848260208601613506565b91505092915050565b600080600080608085870312156135905761358f612eb6565b5b600061359e8782880161310c565b94505060206135af8782880161310c565b93505060406135c087828801613057565b925050606085013567ffffffffffffffff8111156135e1576135e0612ebb565b5b6135ed87828801613548565b91505092959194509250565b600080604083850312156136105761360f612eb6565b5b600061361e8582860161310c565b925050602061362f8582860161310c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061368057607f821691505b60208210810361369357613692613639565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006136f5602d83612f86565b915061370082613699565b604082019050919050565b60006020820190508181036000830152613724816136e8565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613787602283612f86565b91506137928261372b565b604082019050919050565b600060208201905081810360008301526137b68161377a565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613819603983612f86565b9150613824826137bd565b604082019050919050565b600060208201905081810360008301526138488161380c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061388982613036565b915061389483613036565b9250828210156138a7576138a661384f565b5b828203905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138e8602083612f86565b91506138f3826138b2565b602082019050919050565b60006020820190508181036000830152613917816138db565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b600061397a602283612f86565b91506139858261391e565b604082019050919050565b600060208201905081810360008301526139a98161396d565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000613a0c602e83612f86565b9150613a17826139b0565b604082019050919050565b60006020820190508181036000830152613a3b816139ff565b9050919050565b7f536f7272792c204d696e74696e67206973207061757365642e00000000000000600082015250565b6000613a78601983612f86565b9150613a8382613a42565b602082019050919050565b60006020820190508181036000830152613aa781613a6b565b9050919050565b7f536f7272792c20746865726520617265206f6e6c792033206974656d7320616c60008201527f6c6f77656420666f7220656163682077616c6c65742e00000000000000000000602082015250565b6000613b0a603683612f86565b9150613b1582613aae565b604082019050919050565b60006020820190508181036000830152613b3981613afd565b9050919050565b6000613b4b82613036565b9150613b5683613036565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b8b57613b8a61384f565b5b828201905092915050565b7f536f7272792c205468657265206973206e6f206d6f7265206974656d732e0000600082015250565b6000613bcc601e83612f86565b9150613bd782613b96565b602082019050919050565b60006020820190508181036000830152613bfb81613bbf565b9050919050565b6000613c0d82613036565b9150613c1883613036565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c5157613c5061384f565b5b828202905092915050565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b6000613c92601583612f86565b9150613c9d82613c5c565b602082019050919050565b60006020820190508181036000830152613cc181613c85565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613d0282613036565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d3457613d3361384f565b5b600182019050919050565b7f4574686572206973206e6f7420656e6f7567682e000000000000000000000000600082015250565b6000613d75601483612f86565b9150613d8082613d3f565b602082019050919050565b60006020820190508181036000830152613da481613d68565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e07602383612f86565b9150613e1282613dab565b604082019050919050565b60006020820190508181036000830152613e3681613dfa565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613e99602b83612f86565b9150613ea482613e3d565b604082019050919050565b60006020820190508181036000830152613ec881613e8c565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613f05601a83612f86565b9150613f1082613ecf565b602082019050919050565b60006020820190508181036000830152613f3481613ef8565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000613f97603383612f86565b9150613fa282613f3b565b604082019050919050565b60006020820190508181036000830152613fc681613f8a565b9050919050565b7f455243373231414d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b6000614029603083612f86565b915061403482613fcd565b604082019050919050565b600060208201905081810360008301526140588161401c565b9050919050565b600081905092915050565b600061407582612f7b565b61407f818561405f565b935061408f818560208601612f97565b80840191505092915050565b60008190508160005260206000209050919050565b600081546140bd81613668565b6140c7818661405f565b945060018216600081146140e257600181146140f357614126565b60ff19831686528186019350614126565b6140fc8561409b565b60005b8381101561411e578154818901526001820191506020810190506140ff565b838801955050505b50505092915050565b600061413b828661406a565b9150614147828561406a565b915061415382846140b0565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141bc602683612f86565b91506141c782614160565b604082019050919050565b600060208201905081810360008301526141eb816141af565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b600061424e603283612f86565b9150614259826141f2565b604082019050919050565b6000602082019050818103600083015261427d81614241565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006142e0602683612f86565b91506142eb82614284565b604082019050919050565b6000602082019050818103600083015261430f816142d3565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614372602583612f86565b915061437d82614316565b604082019050919050565b600060208201905081810360008301526143a181614365565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614404602a83612f86565b915061440f826143a8565b604082019050919050565b60006020820190508181036000830152614433816143f7565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b6000614496602f83612f86565b91506144a18261443a565b604082019050919050565b600060208201905081810360008301526144c581614489565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006144f3826144cc565b6144fd81856144d7565b935061450d818560208601612f97565b61451681612fca565b840191505092915050565b600060808201905061453660008301876130cb565b61454360208301866130cb565b6145506040830185613161565b818103606083015261456281846144e8565b905095945050505050565b60008151905061457c81612eec565b92915050565b60006020828403121561459857614597612eb6565b5b60006145a68482850161456d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006145e982613036565b91506145f483613036565b925082614604576146036145af565b5b828204905092915050565b600061461a82613036565b915061462583613036565b925082614635576146346145af565b5b828206905092915050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061469c602183612f86565b91506146a782614640565b604082019050919050565b600060208201905081810360008301526146cb8161468f565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b600061472e602883612f86565b9150614739826146d2565b604082019050919050565b6000602082019050818103600083015261475d81614721565b905091905056fea2646970667358221220b9e10d6704dc26fbd24b5ff802ab526cdb563ca500ff029d331e42e34b13769d64736f6c634300080e0033

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

0000000000000000000000000000000000000000000000000000000000000d0500000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000003

-----Decoded View---------------
Arg [0] : maxSupply (uint32): 3333
Arg [1] : FreeSupply (uint32): 1000
Arg [2] : walletLimit (uint32): 3

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000d05
Arg [1] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000003


Deployed Bytecode Sourcemap

37778:4427:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24650:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26536:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28098:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27619:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22905:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28974:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38810:78;;;;;;;;;;;;;:::i;:::-;;23571:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39885:1483;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38468:114;;;:::i;:::-;;29207:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41372:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39289:588;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38703:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23084:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26345:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25086:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4395:94;;;;;;;;;;;;;:::i;:::-;;38994:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3744:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26705:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37986:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39088:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28384:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38896:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29455:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38118:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38074:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41728:472;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37914:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28743:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4644:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24650:372;24752:4;24804:25;24789:40;;;:11;:40;;;;:105;;;;24861:33;24846:48;;;:11;:48;;;;24789:105;:172;;;;24926:35;24911:50;;;:11;:50;;;;24789:172;:225;;;;24978:36;25002:11;24978:23;:36::i;:::-;24789:225;24769:245;;24650:372;;;:::o;26536:100::-;26590:13;26623:5;26616:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26536:100;:::o;28098:214::-;28166:7;28194:16;28202:7;28194;:16::i;:::-;28186:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28280:15;:24;28296:7;28280:24;;;;;;;;;;;;;;;;;;;;;28273:31;;28098:214;;;:::o;27619:413::-;27692:13;27708:24;27724:7;27708:15;:24::i;:::-;27692:40;;27757:5;27751:11;;:2;:11;;;27743:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27852:5;27836:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27861:37;27878:5;27885:12;:10;:12::i;:::-;27861:16;:37::i;:::-;27836:62;27814:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;27996:28;28005:2;28009:7;28018:5;27996:8;:28::i;:::-;27681:351;27619:413;;:::o;22905:102::-;22958:7;22998:1;22985:12;;:14;;;;:::i;:::-;22978:21;;22905:102;:::o;28974:162::-;29100:28;29110:4;29116:2;29120:7;29100:9;:28::i;:::-;28974:162;;;:::o;38810:78::-;3975:12;:10;:12::i;:::-;3964:23;;:7;:5;:7::i;:::-;:23;;;3956:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38875:5:::1;;;;;;;;;;;38874:6;38866:5;;:14;;;;;;;;;;;;;;;;;;38810:78::o:0;23571:1007::-;23660:7;23696:16;23706:5;23696:9;:16::i;:::-;23688:5;:24;23680:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23762:22;23787:13;:11;:13::i;:::-;23762:38;;23811:19;23841:25;24030:9;24025:466;24045:14;24041:1;:18;24025:466;;;24085:31;24119:11;:14;24131:1;24119:14;;;;;;;;;;;24085:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24182:1;24156:28;;:9;:14;;;:28;;;24152:111;;24229:9;:14;;;24209:34;;24152:111;24306:5;24285:26;;:17;:26;;;24281:195;;24355:5;24340:11;:20;24336:85;;24396:1;24389:8;;;;;;;;;24336:85;24443:13;;;;;;;24281:195;24066:425;24061:3;;;;;;;24025:466;;;;24514:56;;;;;;;;;;:::i;:::-;;;;;;;;23571:1007;;;;;:::o;39885:1483::-;39956:5;;;;;;;;;;;39948:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;40057:8;40041:13;;:24;;;;:::i;:::-;40011:13;:25;40025:10;40011:25;;;;;;;;;;;;;;;;:54;;40002:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;40175:10;;40162:8;40146:13;:11;:13::i;:::-;:24;;;;:::i;:::-;40145:40;;40137:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;40233:23;40287:1;40274:10;;:14;40271:809;;;40320:1;40308:8;:13;40305:764;;40361:1;40342:20;;;;;:::i;:::-;;;40395:1;40381:10;;:15;;;;;;;:::i;:::-;;;;;;;;40305:764;;;40434:1;40422:8;:13;:31;;;;;40452:1;40439:10;;:14;40422:31;40418:651;;;40493:1;40474:20;;;;;:::i;:::-;;;40527:1;40513:10;;:15;;;;;;;:::i;:::-;;;;;;;;40418:651;;;40566:1;40554:8;:13;:32;;;;;40585:1;40571:10;;:15;40554:32;40550:519;;;40626:1;40607:20;;;;;:::i;:::-;;;40659:1;40646:10;:14;;;;40550:519;;;40697:1;40685:8;:13;;:31;;;;;40715:1;40702:10;;:14;40685:31;40682:387;;;40755:1;40736:20;;;;;:::i;:::-;;;40789:1;40775:10;;:15;;;;;;;:::i;:::-;;;;;;;;40682:387;;;40828:1;40816:8;:13;;:32;;;;;40847:1;40833:10;;:15;40816:32;40812:257;;;40888:1;40869:20;;;;;:::i;:::-;;;40922:1;40908:10;;:15;;;;;;;:::i;:::-;;;;;;;;40812:257;;;40959:1;40947:8;:13;;:32;;;;;40978:1;40964:10;;:15;40947:32;40944:125;;;41018:1;40999:20;;;;;:::i;:::-;;;41052:1;41038:10;;:15;;;;;;;:::i;:::-;;;;;;;;40944:125;40812:257;40682:387;40550:519;40418:651;40305:764;40271:809;41100:21;41156:8;;41137:15;41126:8;:26;;;;:::i;:::-;41125:39;;;;:::i;:::-;41100:65;;41197:13;41184:9;:26;;41176:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;41249:31;41259:10;41271:8;41249:9;:31::i;:::-;41320:8;41291:13;:25;41305:10;41291:25;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;41352:8;41339:9;;:21;;;;;;;:::i;:::-;;;;;;;;39945:1423;;39885:1483;:::o;38468:114::-;3975:12;:10;:12::i;:::-;3964:23;;:7;:5;:7::i;:::-;:23;;;3956:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38534:7:::1;:5;:7::i;:::-;38526:25;;:48;38552:21;38526:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38468:114::o:0;29207:177::-;29337:39;29354:4;29360:2;29364:7;29337:39;;;;;;;;;;;;:16;:39::i;:::-;29207:177;;;:::o;41372:348::-;41447:16;41475:23;41501:17;41511:6;41501:9;:17::i;:::-;41475:43;;41525:25;41567:15;41553:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41525:58;;41595:9;41590:103;41610:15;41606:1;:19;41590:103;;;41655:30;41675:6;41683:1;41655:19;:30::i;:::-;41641:8;41650:1;41641:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;41627:3;;;;;:::i;:::-;;;;41590:103;;;;41706:8;41699:15;;;;41372:348;;;:::o;39289:588::-;39366:5;;;;;;;;;;;39358:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;39467:8;39451:13;;:24;;;;:::i;:::-;39421:13;:25;39435:10;39421:25;;;;;;;;;;;;;;;;:54;;39412:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;39585:10;;39572:8;39556:13;:11;:13::i;:::-;:24;;;;:::i;:::-;39555:40;;39547:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;39683:8;;39672;:19;;;;:::i;:::-;39659:9;:32;;39651:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39731:31;39741:10;39753:8;39731:9;:31::i;:::-;39829:8;39801:13;:25;39815:10;39801:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;39773:13;:25;39787:10;39773:25;;;;;;;;;;;;;;;:64;;;;39861:8;39848:9;;:21;;;;;;;:::i;:::-;;;;;;;;39289:588;:::o;38703:97::-;3975:12;:10;:12::i;:::-;3964:23;;:7;:5;:7::i;:::-;:23;;;3956:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38785:7:::1;38774:8;:18;;;;;;;;;;;;:::i;:::-;;38703:97:::0;:::o;23084:187::-;23151:7;23187:13;:11;:13::i;:::-;23179:5;:21;23171:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23258:5;23251:12;;23084:187;;;:::o;26345:124::-;26409:7;26436:20;26448:7;26436:11;:20::i;:::-;:25;;;26429:32;;26345:124;;;:::o;25086:221::-;25150:7;25195:1;25178:19;;:5;:19;;;25170:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25271:12;:19;25284:5;25271:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;25263:36;;25256:43;;25086:221;;;:::o;4395:94::-;3975:12;:10;:12::i;:::-;3964:23;;:7;:5;:7::i;:::-;:23;;;3956:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4460:21:::1;4478:1;4460:9;:21::i;:::-;4395:94::o:0;38994:86::-;39035:7;39062:10;;39055:17;;38994:86;:::o;3744:87::-;3790:7;3817:6;;;;;;;;;;;3810:13;;3744:87;:::o;26705:104::-;26761:13;26794:7;26787:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26705:104;:::o;37986:81::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39088:193::-;39162:1;39151:10;;:12;39148:126;;;39179:27;39197:8;39179:17;:27::i;:::-;39148:126;;;39237:25;39253:8;39237:15;:25::i;:::-;39148:126;39088:193;:::o;28384:288::-;28491:12;:10;:12::i;:::-;28479:24;;:8;:24;;;28471:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28592:8;28547:18;:32;28566:12;:10;:12::i;:::-;28547:32;;;;;;;;;;;;;;;:42;28580:8;28547:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28645:8;28616:48;;28631:12;:10;:12::i;:::-;28616:48;;;28655:8;28616:48;;;;;;:::i;:::-;;;;;;;;28384:288;;:::o;38896:90::-;38942:7;38969:9;;38962:16;;38896:90;:::o;29455:355::-;29614:28;29624:4;29630:2;29634:7;29614:9;:28::i;:::-;29675:48;29698:4;29704:2;29708:7;29717:5;29675:22;:48::i;:::-;29653:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;29455:355;;;;:::o;38118:24::-;;;;;;;;;;;;;:::o;38074:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41728:472::-;41826:13;41875:16;41883:7;41875;:16::i;:::-;41857:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;41986:28;42017:10;:8;:10::i;:::-;41986:41;;42076:1;42051:14;42045:28;:32;:147;;;;;;;;;;;;;;;;;42117:14;42133:25;42150:7;42133:16;:25::i;:::-;42160:13;42100:74;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42045:147;42038:154;;;41728:472;;;:::o;37914:37::-;;;;:::o;28743:164::-;28840:4;28864:18;:25;28883:5;28864:25;;;;;;;;;;;;;;;:35;28890:8;28864:35;;;;;;;;;;;;;;;;;;;;;;;;;28857:42;;28743:164;;;;:::o;4644:192::-;3975:12;:10;:12::i;:::-;3964:23;;:7;:5;:7::i;:::-;:23;;;3956:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4753:1:::1;4733:22;;:8;:22;;::::0;4725:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4809:19;4819:8;4809:9;:19::i;:::-;4644:192:::0;:::o;15200:157::-;15285:4;15324:25;15309:40;;;:11;:40;;;;15302:47;;15200:157;;;:::o;30065:111::-;30122:4;30156:12;;30146:7;:22;30139:29;;30065:111;;;:::o;2602:98::-;2655:7;2682:10;2675:17;;2602:98;:::o;34985:196::-;35127:2;35100:15;:24;35116:7;35100:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35165:7;35161:2;35145:28;;35154:5;35145:28;;;;;;;;;;;;34985:196;;;:::o;32865:2002::-;32980:35;33018:20;33030:7;33018:11;:20::i;:::-;32980:58;;33051:22;33093:13;:18;;;33077:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;33152:12;:10;:12::i;:::-;33128:36;;:20;33140:7;33128:11;:20::i;:::-;:36;;;33077:87;:154;;;;33181:50;33198:13;:18;;;33218:12;:10;:12::i;:::-;33181:16;:50::i;:::-;33077:154;33051:181;;33253:17;33245:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;33368:4;33346:26;;:13;:18;;;:26;;;33338:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33448:1;33434:16;;:2;:16;;;33426:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33505:43;33527:4;33533:2;33537:7;33546:1;33505:21;:43::i;:::-;33613:49;33630:1;33634:7;33643:13;:18;;;33613:8;:49::i;:::-;33988:1;33958:12;:18;33971:4;33958:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34032:1;34004:12;:16;34017:2;34004:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34078:2;34050:11;:20;34062:7;34050:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;34140:15;34095:11;:20;34107:7;34095:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;34408:19;34440:1;34430:7;:11;34408:33;;34501:1;34460:43;;:11;:24;34472:11;34460:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;34456:295;;34528:20;34536:11;34528:7;:20::i;:::-;34524:212;;;34605:13;:18;;;34573:11;:24;34585:11;34573:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;34688:13;:28;;;34646:11;:24;34658:11;34646:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;34524:212;34456:295;33933:829;34798:7;34794:2;34779:27;;34788:4;34779:27;;;;;;;;;;;;34817:42;34838:4;34844:2;34848:7;34857:1;34817:20;:42::i;:::-;32969:1898;;32865:2002;;;:::o;30184:104::-;30253:27;30263:2;30267:8;30253:27;;;;;;;;;;;;:9;:27::i;:::-;30184:104;;:::o;25746:537::-;25807:21;;:::i;:::-;25849:16;25857:7;25849;:16::i;:::-;25841:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25955:12;25970:7;25955:22;;25950:245;25987:1;25979:4;:9;25950:245;;26017:31;26051:11;:17;26063:4;26051:17;;;;;;;;;;;26017:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26117:1;26091:28;;:9;:14;;;:28;;;26087:93;;26151:9;26144:16;;;;;;26087:93;25998:197;25990:6;;;;;;;;25950:245;;;;26218:57;;;;;;;;;;:::i;:::-;;;;;;;;25746:537;;;;:::o;4844:173::-;4900:16;4919:6;;;;;;;;;;;4900:25;;4945:8;4936:6;;:17;;;;;;;;;;;;;;;;;;5000:8;4969:40;;4990:8;4969:40;;;;;;;;;;;;4889:128;4844:173;:::o;35746:804::-;35901:4;35922:15;:2;:13;;;:15::i;:::-;35918:625;;;35974:2;35958:36;;;35995:12;:10;:12::i;:::-;36009:4;36015:7;36024:5;35958:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35954:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36221:1;36204:6;:13;:18;36200:273;;36247:61;;;;;;;;;;:::i;:::-;;;;;;;;36200:273;36423:6;36417:13;36408:6;36404:2;36400:15;36393:38;35954:534;36091:45;;;36081:55;;;:6;:55;;;;36074:62;;;;;35918:625;36527:4;36520:11;;35746:804;;;;;;;:::o;38590:101::-;38642:13;38675:8;38668:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38590:101;:::o;287:723::-;343:13;573:1;564:5;:10;560:53;;591:10;;;;;;;;;;;;;;;;;;;;;560:53;623:12;638:5;623:20;;654:14;679:78;694:1;686:4;:9;679:78;;712:8;;;;;:::i;:::-;;;;743:2;735:10;;;;;:::i;:::-;;;679:78;;;767:19;799:6;789:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;767:39;;817:154;833:1;824:5;:10;817:154;;861:1;851:11;;;;;:::i;:::-;;;928:2;920:5;:10;;;;:::i;:::-;907:2;:24;;;;:::i;:::-;894:39;;877:6;884;877:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;957:2;948:11;;;;;:::i;:::-;;;817:154;;;995:6;981:21;;;;;287:723;;;;:::o;37038:159::-;;;;;:::o;37609:158::-;;;;;:::o;30651:163::-;30774:32;30780:2;30784:8;30794:5;30801:4;30774:5;:32::i;:::-;30651:163;;;:::o;5721:387::-;5781:4;5989:12;6056:7;6044:20;6036:28;;6099:1;6092:4;:8;6085:15;;;5721:387;;;:::o;31073:1538::-;31212:20;31235:12;;31212:35;;31280:1;31266:16;;:2;:16;;;31258:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31351:1;31339:8;:13;31331:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31410:61;31440:1;31444:2;31448:12;31462:8;31410:21;:61::i;:::-;31785:8;31749:12;:16;31762:2;31749:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31850:8;31809:12;:16;31822:2;31809:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31909:2;31876:11;:25;31888:12;31876:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;31976:15;31926:11;:25;31938:12;31926:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;32009:20;32032:12;32009:35;;32066:9;32061:415;32081:8;32077:1;:12;32061:415;;;32145:12;32141:2;32120:38;;32137:1;32120:38;;;;;;;;;;;;32181:4;32177:249;;;32244:59;32275:1;32279:2;32283:12;32297:5;32244:22;:59::i;:::-;32210:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;32177:249;32446:14;;;;;;;32091:3;;;;;;;32061:415;;;;32507:12;32492;:27;;;;31724:807;32543:60;32572:1;32576:2;32580:12;32594:8;32543:20;:60::i;:::-;31201:1410;31073:1538;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:114::-;6317:6;6351:5;6345:12;6335:22;;6250:114;;;:::o;6370:184::-;6469:11;6503:6;6498:3;6491:19;6543:4;6538:3;6534:14;6519:29;;6370:184;;;;:::o;6560:132::-;6627:4;6650:3;6642:11;;6680:4;6675:3;6671:14;6663:22;;6560:132;;;:::o;6698:108::-;6775:24;6793:5;6775:24;:::i;:::-;6770:3;6763:37;6698:108;;:::o;6812:179::-;6881:10;6902:46;6944:3;6936:6;6902:46;:::i;:::-;6980:4;6975:3;6971:14;6957:28;;6812:179;;;;:::o;6997:113::-;7067:4;7099;7094:3;7090:14;7082:22;;6997:113;;;:::o;7146:732::-;7265:3;7294:54;7342:5;7294:54;:::i;:::-;7364:86;7443:6;7438:3;7364:86;:::i;:::-;7357:93;;7474:56;7524:5;7474:56;:::i;:::-;7553:7;7584:1;7569:284;7594:6;7591:1;7588:13;7569:284;;;7670:6;7664:13;7697:63;7756:3;7741:13;7697:63;:::i;:::-;7690:70;;7783:60;7836:6;7783:60;:::i;:::-;7773:70;;7629:224;7616:1;7613;7609:9;7604:14;;7569:284;;;7573:14;7869:3;7862:10;;7270:608;;;7146:732;;;;:::o;7884:373::-;8027:4;8065:2;8054:9;8050:18;8042:26;;8114:9;8108:4;8104:20;8100:1;8089:9;8085:17;8078:47;8142:108;8245:4;8236:6;8142:108;:::i;:::-;8134:116;;7884:373;;;;:::o;8263:117::-;8372:1;8369;8362:12;8386:117;8495:1;8492;8485:12;8509:180;8557:77;8554:1;8547:88;8654:4;8651:1;8644:15;8678:4;8675:1;8668:15;8695:281;8778:27;8800:4;8778:27;:::i;:::-;8770:6;8766:40;8908:6;8896:10;8893:22;8872:18;8860:10;8857:34;8854:62;8851:88;;;8919:18;;:::i;:::-;8851:88;8959:10;8955:2;8948:22;8738:238;8695:281;;:::o;8982:129::-;9016:6;9043:20;;:::i;:::-;9033:30;;9072:33;9100:4;9092:6;9072:33;:::i;:::-;8982:129;;;:::o;9117:308::-;9179:4;9269:18;9261:6;9258:30;9255:56;;;9291:18;;:::i;:::-;9255:56;9329:29;9351:6;9329:29;:::i;:::-;9321:37;;9413:4;9407;9403:15;9395:23;;9117:308;;;:::o;9431:154::-;9515:6;9510:3;9505;9492:30;9577:1;9568:6;9563:3;9559:16;9552:27;9431:154;;;:::o;9591:412::-;9669:5;9694:66;9710:49;9752:6;9710:49;:::i;:::-;9694:66;:::i;:::-;9685:75;;9783:6;9776:5;9769:21;9821:4;9814:5;9810:16;9859:3;9850:6;9845:3;9841:16;9838:25;9835:112;;;9866:79;;:::i;:::-;9835:112;9956:41;9990:6;9985:3;9980;9956:41;:::i;:::-;9675:328;9591:412;;;;;:::o;10023:340::-;10079:5;10128:3;10121:4;10113:6;10109:17;10105:27;10095:122;;10136:79;;:::i;:::-;10095:122;10253:6;10240:20;10278:79;10353:3;10345:6;10338:4;10330:6;10326:17;10278:79;:::i;:::-;10269:88;;10085:278;10023:340;;;;:::o;10369:509::-;10438:6;10487:2;10475:9;10466:7;10462:23;10458:32;10455:119;;;10493:79;;:::i;:::-;10455:119;10641:1;10630:9;10626:17;10613:31;10671:18;10663:6;10660:30;10657:117;;;10693:79;;:::i;:::-;10657:117;10798:63;10853:7;10844:6;10833:9;10829:22;10798:63;:::i;:::-;10788:73;;10584:287;10369:509;;;;:::o;10884:116::-;10954:21;10969:5;10954:21;:::i;:::-;10947:5;10944:32;10934:60;;10990:1;10987;10980:12;10934:60;10884:116;:::o;11006:133::-;11049:5;11087:6;11074:20;11065:29;;11103:30;11127:5;11103:30;:::i;:::-;11006:133;;;;:::o;11145:468::-;11210:6;11218;11267:2;11255:9;11246:7;11242:23;11238:32;11235:119;;;11273:79;;:::i;:::-;11235:119;11393:1;11418:53;11463:7;11454:6;11443:9;11439:22;11418:53;:::i;:::-;11408:63;;11364:117;11520:2;11546:50;11588:7;11579:6;11568:9;11564:22;11546:50;:::i;:::-;11536:60;;11491:115;11145:468;;;;;:::o;11619:307::-;11680:4;11770:18;11762:6;11759:30;11756:56;;;11792:18;;:::i;:::-;11756:56;11830:29;11852:6;11830:29;:::i;:::-;11822:37;;11914:4;11908;11904:15;11896:23;;11619:307;;;:::o;11932:410::-;12009:5;12034:65;12050:48;12091:6;12050:48;:::i;:::-;12034:65;:::i;:::-;12025:74;;12122:6;12115:5;12108:21;12160:4;12153:5;12149:16;12198:3;12189:6;12184:3;12180:16;12177:25;12174:112;;;12205:79;;:::i;:::-;12174:112;12295:41;12329:6;12324:3;12319;12295:41;:::i;:::-;12015:327;11932:410;;;;;:::o;12361:338::-;12416:5;12465:3;12458:4;12450:6;12446:17;12442:27;12432:122;;12473:79;;:::i;:::-;12432:122;12590:6;12577:20;12615:78;12689:3;12681:6;12674:4;12666:6;12662:17;12615:78;:::i;:::-;12606:87;;12422:277;12361:338;;;;:::o;12705:943::-;12800:6;12808;12816;12824;12873:3;12861:9;12852:7;12848:23;12844:33;12841:120;;;12880:79;;:::i;:::-;12841:120;13000:1;13025:53;13070:7;13061:6;13050:9;13046:22;13025:53;:::i;:::-;13015:63;;12971:117;13127:2;13153:53;13198:7;13189:6;13178:9;13174:22;13153:53;:::i;:::-;13143:63;;13098:118;13255:2;13281:53;13326:7;13317:6;13306:9;13302:22;13281:53;:::i;:::-;13271:63;;13226:118;13411:2;13400:9;13396:18;13383:32;13442:18;13434:6;13431:30;13428:117;;;13464:79;;:::i;:::-;13428:117;13569:62;13623:7;13614:6;13603:9;13599:22;13569:62;:::i;:::-;13559:72;;13354:287;12705:943;;;;;;;:::o;13654:474::-;13722:6;13730;13779:2;13767:9;13758:7;13754:23;13750:32;13747:119;;;13785:79;;:::i;:::-;13747:119;13905:1;13930:53;13975:7;13966:6;13955:9;13951:22;13930:53;:::i;:::-;13920:63;;13876:117;14032:2;14058:53;14103:7;14094:6;14083:9;14079:22;14058:53;:::i;:::-;14048:63;;14003:118;13654:474;;;;;:::o;14134:180::-;14182:77;14179:1;14172:88;14279:4;14276:1;14269:15;14303:4;14300:1;14293:15;14320:320;14364:6;14401:1;14395:4;14391:12;14381:22;;14448:1;14442:4;14438:12;14469:18;14459:81;;14525:4;14517:6;14513:17;14503:27;;14459:81;14587:2;14579:6;14576:14;14556:18;14553:38;14550:84;;14606:18;;:::i;:::-;14550:84;14371:269;14320:320;;;:::o;14646:232::-;14786:34;14782:1;14774:6;14770:14;14763:58;14855:15;14850:2;14842:6;14838:15;14831:40;14646:232;:::o;14884:366::-;15026:3;15047:67;15111:2;15106:3;15047:67;:::i;:::-;15040:74;;15123:93;15212:3;15123:93;:::i;:::-;15241:2;15236:3;15232:12;15225:19;;14884:366;;;:::o;15256:419::-;15422:4;15460:2;15449:9;15445:18;15437:26;;15509:9;15503:4;15499:20;15495:1;15484:9;15480:17;15473:47;15537:131;15663:4;15537:131;:::i;:::-;15529:139;;15256:419;;;:::o;15681:221::-;15821:34;15817:1;15809:6;15805:14;15798:58;15890:4;15885:2;15877:6;15873:15;15866:29;15681:221;:::o;15908:366::-;16050:3;16071:67;16135:2;16130:3;16071:67;:::i;:::-;16064:74;;16147:93;16236:3;16147:93;:::i;:::-;16265:2;16260:3;16256:12;16249:19;;15908:366;;;:::o;16280:419::-;16446:4;16484:2;16473:9;16469:18;16461:26;;16533:9;16527:4;16523:20;16519:1;16508:9;16504:17;16497:47;16561:131;16687:4;16561:131;:::i;:::-;16553:139;;16280:419;;;:::o;16705:244::-;16845:34;16841:1;16833:6;16829:14;16822:58;16914:27;16909:2;16901:6;16897:15;16890:52;16705:244;:::o;16955:366::-;17097:3;17118:67;17182:2;17177:3;17118:67;:::i;:::-;17111:74;;17194:93;17283:3;17194:93;:::i;:::-;17312:2;17307:3;17303:12;17296:19;;16955:366;;;:::o;17327:419::-;17493:4;17531:2;17520:9;17516:18;17508:26;;17580:9;17574:4;17570:20;17566:1;17555:9;17551:17;17544:47;17608:131;17734:4;17608:131;:::i;:::-;17600:139;;17327:419;;;:::o;17752:180::-;17800:77;17797:1;17790:88;17897:4;17894:1;17887:15;17921:4;17918:1;17911:15;17938:191;17978:4;17998:20;18016:1;17998:20;:::i;:::-;17993:25;;18032:20;18050:1;18032:20;:::i;:::-;18027:25;;18071:1;18068;18065:8;18062:34;;;18076:18;;:::i;:::-;18062:34;18121:1;18118;18114:9;18106:17;;17938:191;;;;:::o;18135:182::-;18275:34;18271:1;18263:6;18259:14;18252:58;18135:182;:::o;18323:366::-;18465:3;18486:67;18550:2;18545:3;18486:67;:::i;:::-;18479:74;;18562:93;18651:3;18562:93;:::i;:::-;18680:2;18675:3;18671:12;18664:19;;18323:366;;;:::o;18695:419::-;18861:4;18899:2;18888:9;18884:18;18876:26;;18948:9;18942:4;18938:20;18934:1;18923:9;18919:17;18912:47;18976:131;19102:4;18976:131;:::i;:::-;18968:139;;18695:419;;;:::o;19120:221::-;19260:34;19256:1;19248:6;19244:14;19237:58;19329:4;19324:2;19316:6;19312:15;19305:29;19120:221;:::o;19347:366::-;19489:3;19510:67;19574:2;19569:3;19510:67;:::i;:::-;19503:74;;19586:93;19675:3;19586:93;:::i;:::-;19704:2;19699:3;19695:12;19688:19;;19347:366;;;:::o;19719:419::-;19885:4;19923:2;19912:9;19908:18;19900:26;;19972:9;19966:4;19962:20;19958:1;19947:9;19943:17;19936:47;20000:131;20126:4;20000:131;:::i;:::-;19992:139;;19719:419;;;:::o;20144:233::-;20284:34;20280:1;20272:6;20268:14;20261:58;20353:16;20348:2;20340:6;20336:15;20329:41;20144:233;:::o;20383:366::-;20525:3;20546:67;20610:2;20605:3;20546:67;:::i;:::-;20539:74;;20622:93;20711:3;20622:93;:::i;:::-;20740:2;20735:3;20731:12;20724:19;;20383:366;;;:::o;20755:419::-;20921:4;20959:2;20948:9;20944:18;20936:26;;21008:9;21002:4;20998:20;20994:1;20983:9;20979:17;20972:47;21036:131;21162:4;21036:131;:::i;:::-;21028:139;;20755:419;;;:::o;21180:175::-;21320:27;21316:1;21308:6;21304:14;21297:51;21180:175;:::o;21361:366::-;21503:3;21524:67;21588:2;21583:3;21524:67;:::i;:::-;21517:74;;21600:93;21689:3;21600:93;:::i;:::-;21718:2;21713:3;21709:12;21702:19;;21361:366;;;:::o;21733:419::-;21899:4;21937:2;21926:9;21922:18;21914:26;;21986:9;21980:4;21976:20;21972:1;21961:9;21957:17;21950:47;22014:131;22140:4;22014:131;:::i;:::-;22006:139;;21733:419;;;:::o;22158:241::-;22298:34;22294:1;22286:6;22282:14;22275:58;22367:24;22362:2;22354:6;22350:15;22343:49;22158:241;:::o;22405:366::-;22547:3;22568:67;22632:2;22627:3;22568:67;:::i;:::-;22561:74;;22644:93;22733:3;22644:93;:::i;:::-;22762:2;22757:3;22753:12;22746:19;;22405:366;;;:::o;22777:419::-;22943:4;22981:2;22970:9;22966:18;22958:26;;23030:9;23024:4;23020:20;23016:1;23005:9;23001:17;22994:47;23058:131;23184:4;23058:131;:::i;:::-;23050:139;;22777:419;;;:::o;23202:305::-;23242:3;23261:20;23279:1;23261:20;:::i;:::-;23256:25;;23295:20;23313:1;23295:20;:::i;:::-;23290:25;;23449:1;23381:66;23377:74;23374:1;23371:81;23368:107;;;23455:18;;:::i;:::-;23368:107;23499:1;23496;23492:9;23485:16;;23202:305;;;;:::o;23513:180::-;23653:32;23649:1;23641:6;23637:14;23630:56;23513:180;:::o;23699:366::-;23841:3;23862:67;23926:2;23921:3;23862:67;:::i;:::-;23855:74;;23938:93;24027:3;23938:93;:::i;:::-;24056:2;24051:3;24047:12;24040:19;;23699:366;;;:::o;24071:419::-;24237:4;24275:2;24264:9;24260:18;24252:26;;24324:9;24318:4;24314:20;24310:1;24299:9;24295:17;24288:47;24352:131;24478:4;24352:131;:::i;:::-;24344:139;;24071:419;;;:::o;24496:348::-;24536:7;24559:20;24577:1;24559:20;:::i;:::-;24554:25;;24593:20;24611:1;24593:20;:::i;:::-;24588:25;;24781:1;24713:66;24709:74;24706:1;24703:81;24698:1;24691:9;24684:17;24680:105;24677:131;;;24788:18;;:::i;:::-;24677:131;24836:1;24833;24829:9;24818:20;;24496:348;;;;:::o;24850:171::-;24990:23;24986:1;24978:6;24974:14;24967:47;24850:171;:::o;25027:366::-;25169:3;25190:67;25254:2;25249:3;25190:67;:::i;:::-;25183:74;;25266:93;25355:3;25266:93;:::i;:::-;25384:2;25379:3;25375:12;25368:19;;25027:366;;;:::o;25399:419::-;25565:4;25603:2;25592:9;25588:18;25580:26;;25652:9;25646:4;25642:20;25638:1;25627:9;25623:17;25616:47;25680:131;25806:4;25680:131;:::i;:::-;25672:139;;25399:419;;;:::o;25824:180::-;25872:77;25869:1;25862:88;25969:4;25966:1;25959:15;25993:4;25990:1;25983:15;26010:233;26049:3;26072:24;26090:5;26072:24;:::i;:::-;26063:33;;26118:66;26111:5;26108:77;26105:103;;26188:18;;:::i;:::-;26105:103;26235:1;26228:5;26224:13;26217:20;;26010:233;;;:::o;26249:170::-;26389:22;26385:1;26377:6;26373:14;26366:46;26249:170;:::o;26425:366::-;26567:3;26588:67;26652:2;26647:3;26588:67;:::i;:::-;26581:74;;26664:93;26753:3;26664:93;:::i;:::-;26782:2;26777:3;26773:12;26766:19;;26425:366;;;:::o;26797:419::-;26963:4;27001:2;26990:9;26986:18;26978:26;;27050:9;27044:4;27040:20;27036:1;27025:9;27021:17;27014:47;27078:131;27204:4;27078:131;:::i;:::-;27070:139;;26797:419;;;:::o;27222:222::-;27362:34;27358:1;27350:6;27346:14;27339:58;27431:5;27426:2;27418:6;27414:15;27407:30;27222:222;:::o;27450:366::-;27592:3;27613:67;27677:2;27672:3;27613:67;:::i;:::-;27606:74;;27689:93;27778:3;27689:93;:::i;:::-;27807:2;27802:3;27798:12;27791:19;;27450:366;;;:::o;27822:419::-;27988:4;28026:2;28015:9;28011:18;28003:26;;28075:9;28069:4;28065:20;28061:1;28050:9;28046:17;28039:47;28103:131;28229:4;28103:131;:::i;:::-;28095:139;;27822:419;;;:::o;28247:230::-;28387:34;28383:1;28375:6;28371:14;28364:58;28456:13;28451:2;28443:6;28439:15;28432:38;28247:230;:::o;28483:366::-;28625:3;28646:67;28710:2;28705:3;28646:67;:::i;:::-;28639:74;;28722:93;28811:3;28722:93;:::i;:::-;28840:2;28835:3;28831:12;28824:19;;28483:366;;;:::o;28855:419::-;29021:4;29059:2;29048:9;29044:18;29036:26;;29108:9;29102:4;29098:20;29094:1;29083:9;29079:17;29072:47;29136:131;29262:4;29136:131;:::i;:::-;29128:139;;28855:419;;;:::o;29280:176::-;29420:28;29416:1;29408:6;29404:14;29397:52;29280:176;:::o;29462:366::-;29604:3;29625:67;29689:2;29684:3;29625:67;:::i;:::-;29618:74;;29701:93;29790:3;29701:93;:::i;:::-;29819:2;29814:3;29810:12;29803:19;;29462:366;;;:::o;29834:419::-;30000:4;30038:2;30027:9;30023:18;30015:26;;30087:9;30081:4;30077:20;30073:1;30062:9;30058:17;30051:47;30115:131;30241:4;30115:131;:::i;:::-;30107:139;;29834:419;;;:::o;30259:238::-;30399:34;30395:1;30387:6;30383:14;30376:58;30468:21;30463:2;30455:6;30451:15;30444:46;30259:238;:::o;30503:366::-;30645:3;30666:67;30730:2;30725:3;30666:67;:::i;:::-;30659:74;;30742:93;30831:3;30742:93;:::i;:::-;30860:2;30855:3;30851:12;30844:19;;30503:366;;;:::o;30875:419::-;31041:4;31079:2;31068:9;31064:18;31056:26;;31128:9;31122:4;31118:20;31114:1;31103:9;31099:17;31092:47;31156:131;31282:4;31156:131;:::i;:::-;31148:139;;30875:419;;;:::o;31300:235::-;31440:34;31436:1;31428:6;31424:14;31417:58;31509:18;31504:2;31496:6;31492:15;31485:43;31300:235;:::o;31541:366::-;31683:3;31704:67;31768:2;31763:3;31704:67;:::i;:::-;31697:74;;31780:93;31869:3;31780:93;:::i;:::-;31898:2;31893:3;31889:12;31882:19;;31541:366;;;:::o;31913:419::-;32079:4;32117:2;32106:9;32102:18;32094:26;;32166:9;32160:4;32156:20;32152:1;32141:9;32137:17;32130:47;32194:131;32320:4;32194:131;:::i;:::-;32186:139;;31913:419;;;:::o;32338:148::-;32440:11;32477:3;32462:18;;32338:148;;;;:::o;32492:377::-;32598:3;32626:39;32659:5;32626:39;:::i;:::-;32681:89;32763:6;32758:3;32681:89;:::i;:::-;32674:96;;32779:52;32824:6;32819:3;32812:4;32805:5;32801:16;32779:52;:::i;:::-;32856:6;32851:3;32847:16;32840:23;;32602:267;32492:377;;;;:::o;32875:141::-;32924:4;32947:3;32939:11;;32970:3;32967:1;32960:14;33004:4;33001:1;32991:18;32983:26;;32875:141;;;:::o;33046:845::-;33149:3;33186:5;33180:12;33215:36;33241:9;33215:36;:::i;:::-;33267:89;33349:6;33344:3;33267:89;:::i;:::-;33260:96;;33387:1;33376:9;33372:17;33403:1;33398:137;;;;33549:1;33544:341;;;;33365:520;;33398:137;33482:4;33478:9;33467;33463:25;33458:3;33451:38;33518:6;33513:3;33509:16;33502:23;;33398:137;;33544:341;33611:38;33643:5;33611:38;:::i;:::-;33671:1;33685:154;33699:6;33696:1;33693:13;33685:154;;;33773:7;33767:14;33763:1;33758:3;33754:11;33747:35;33823:1;33814:7;33810:15;33799:26;;33721:4;33718:1;33714:12;33709:17;;33685:154;;;33868:6;33863:3;33859:16;33852:23;;33551:334;;33365:520;;33153:738;;33046:845;;;;:::o;33897:589::-;34122:3;34144:95;34235:3;34226:6;34144:95;:::i;:::-;34137:102;;34256:95;34347:3;34338:6;34256:95;:::i;:::-;34249:102;;34368:92;34456:3;34447:6;34368:92;:::i;:::-;34361:99;;34477:3;34470:10;;33897:589;;;;;;:::o;34492:225::-;34632:34;34628:1;34620:6;34616:14;34609:58;34701:8;34696:2;34688:6;34684:15;34677:33;34492:225;:::o;34723:366::-;34865:3;34886:67;34950:2;34945:3;34886:67;:::i;:::-;34879:74;;34962:93;35051:3;34962:93;:::i;:::-;35080:2;35075:3;35071:12;35064:19;;34723:366;;;:::o;35095:419::-;35261:4;35299:2;35288:9;35284:18;35276:26;;35348:9;35342:4;35338:20;35334:1;35323:9;35319:17;35312:47;35376:131;35502:4;35376:131;:::i;:::-;35368:139;;35095:419;;;:::o;35520:237::-;35660:34;35656:1;35648:6;35644:14;35637:58;35729:20;35724:2;35716:6;35712:15;35705:45;35520:237;:::o;35763:366::-;35905:3;35926:67;35990:2;35985:3;35926:67;:::i;:::-;35919:74;;36002:93;36091:3;36002:93;:::i;:::-;36120:2;36115:3;36111:12;36104:19;;35763:366;;;:::o;36135:419::-;36301:4;36339:2;36328:9;36324:18;36316:26;;36388:9;36382:4;36378:20;36374:1;36363:9;36359:17;36352:47;36416:131;36542:4;36416:131;:::i;:::-;36408:139;;36135:419;;;:::o;36560:225::-;36700:34;36696:1;36688:6;36684:14;36677:58;36769:8;36764:2;36756:6;36752:15;36745:33;36560:225;:::o;36791:366::-;36933:3;36954:67;37018:2;37013:3;36954:67;:::i;:::-;36947:74;;37030:93;37119:3;37030:93;:::i;:::-;37148:2;37143:3;37139:12;37132:19;;36791:366;;;:::o;37163:419::-;37329:4;37367:2;37356:9;37352:18;37344:26;;37416:9;37410:4;37406:20;37402:1;37391:9;37387:17;37380:47;37444:131;37570:4;37444:131;:::i;:::-;37436:139;;37163:419;;;:::o;37588:224::-;37728:34;37724:1;37716:6;37712:14;37705:58;37797:7;37792:2;37784:6;37780:15;37773:32;37588:224;:::o;37818:366::-;37960:3;37981:67;38045:2;38040:3;37981:67;:::i;:::-;37974:74;;38057:93;38146:3;38057:93;:::i;:::-;38175:2;38170:3;38166:12;38159:19;;37818:366;;;:::o;38190:419::-;38356:4;38394:2;38383:9;38379:18;38371:26;;38443:9;38437:4;38433:20;38429:1;38418:9;38414:17;38407:47;38471:131;38597:4;38471:131;:::i;:::-;38463:139;;38190:419;;;:::o;38615:229::-;38755:34;38751:1;38743:6;38739:14;38732:58;38824:12;38819:2;38811:6;38807:15;38800:37;38615:229;:::o;38850:366::-;38992:3;39013:67;39077:2;39072:3;39013:67;:::i;:::-;39006:74;;39089:93;39178:3;39089:93;:::i;:::-;39207:2;39202:3;39198:12;39191:19;;38850:366;;;:::o;39222:419::-;39388:4;39426:2;39415:9;39411:18;39403:26;;39475:9;39469:4;39465:20;39461:1;39450:9;39446:17;39439:47;39503:131;39629:4;39503:131;:::i;:::-;39495:139;;39222:419;;;:::o;39647:234::-;39787:34;39783:1;39775:6;39771:14;39764:58;39856:17;39851:2;39843:6;39839:15;39832:42;39647:234;:::o;39887:366::-;40029:3;40050:67;40114:2;40109:3;40050:67;:::i;:::-;40043:74;;40126:93;40215:3;40126:93;:::i;:::-;40244:2;40239:3;40235:12;40228:19;;39887:366;;;:::o;40259:419::-;40425:4;40463:2;40452:9;40448:18;40440:26;;40512:9;40506:4;40502:20;40498:1;40487:9;40483:17;40476:47;40540:131;40666:4;40540:131;:::i;:::-;40532:139;;40259:419;;;:::o;40684:98::-;40735:6;40769:5;40763:12;40753:22;;40684:98;;;:::o;40788:168::-;40871:11;40905:6;40900:3;40893:19;40945:4;40940:3;40936:14;40921:29;;40788:168;;;;:::o;40962:360::-;41048:3;41076:38;41108:5;41076:38;:::i;:::-;41130:70;41193:6;41188:3;41130:70;:::i;:::-;41123:77;;41209:52;41254:6;41249:3;41242:4;41235:5;41231:16;41209:52;:::i;:::-;41286:29;41308:6;41286:29;:::i;:::-;41281:3;41277:39;41270:46;;41052:270;40962:360;;;;:::o;41328:640::-;41523:4;41561:3;41550:9;41546:19;41538:27;;41575:71;41643:1;41632:9;41628:17;41619:6;41575:71;:::i;:::-;41656:72;41724:2;41713:9;41709:18;41700:6;41656:72;:::i;:::-;41738;41806:2;41795:9;41791:18;41782:6;41738:72;:::i;:::-;41857:9;41851:4;41847:20;41842:2;41831:9;41827:18;41820:48;41885:76;41956:4;41947:6;41885:76;:::i;:::-;41877:84;;41328:640;;;;;;;:::o;41974:141::-;42030:5;42061:6;42055:13;42046:22;;42077:32;42103:5;42077:32;:::i;:::-;41974:141;;;;:::o;42121:349::-;42190:6;42239:2;42227:9;42218:7;42214:23;42210:32;42207:119;;;42245:79;;:::i;:::-;42207:119;42365:1;42390:63;42445:7;42436:6;42425:9;42421:22;42390:63;:::i;:::-;42380:73;;42336:127;42121:349;;;;:::o;42476:180::-;42524:77;42521:1;42514:88;42621:4;42618:1;42611:15;42645:4;42642:1;42635:15;42662:185;42702:1;42719:20;42737:1;42719:20;:::i;:::-;42714:25;;42753:20;42771:1;42753:20;:::i;:::-;42748:25;;42792:1;42782:35;;42797:18;;:::i;:::-;42782:35;42839:1;42836;42832:9;42827:14;;42662:185;;;;:::o;42853:176::-;42885:1;42902:20;42920:1;42902:20;:::i;:::-;42897:25;;42936:20;42954:1;42936:20;:::i;:::-;42931:25;;42975:1;42965:35;;42980:18;;:::i;:::-;42965:35;43021:1;43018;43014:9;43009:14;;42853:176;;;;:::o;43035:220::-;43175:34;43171:1;43163:6;43159:14;43152:58;43244:3;43239:2;43231:6;43227:15;43220:28;43035:220;:::o;43261:366::-;43403:3;43424:67;43488:2;43483:3;43424:67;:::i;:::-;43417:74;;43500:93;43589:3;43500:93;:::i;:::-;43618:2;43613:3;43609:12;43602:19;;43261:366;;;:::o;43633:419::-;43799:4;43837:2;43826:9;43822:18;43814:26;;43886:9;43880:4;43876:20;43872:1;43861:9;43857:17;43850:47;43914:131;44040:4;43914:131;:::i;:::-;43906:139;;43633:419;;;:::o;44058:227::-;44198:34;44194:1;44186:6;44182:14;44175:58;44267:10;44262:2;44254:6;44250:15;44243:35;44058:227;:::o;44291:366::-;44433:3;44454:67;44518:2;44513:3;44454:67;:::i;:::-;44447:74;;44530:93;44619:3;44530:93;:::i;:::-;44648:2;44643:3;44639:12;44632:19;;44291:366;;;:::o;44663:419::-;44829:4;44867:2;44856:9;44852:18;44844:26;;44916:9;44910:4;44906:20;44902:1;44891:9;44887:17;44880:47;44944:131;45070:4;44944:131;:::i;:::-;44936:139;;44663:419;;;:::o

Swarm Source

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