ETH Price: $2,647.42 (+0.18%)

Token

Duckfim (DKFM)
 

Overview

Max Total Supply

5,555 DKFM

Holders

31

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 DKFM
0xc1530ca531e297270284568c9ae3ca6ec638ed13
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:
DuckFim

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-29
*/

// SPDX-License-Identifier: MIT
/**
 * @compiler 0.8.4
 * @title DuckFim
 * @author Shahid Ahmed
 * @dev Used for Ethereum projects compatible with OpenSea
 */
pragma solidity >=0.8.4;

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]


pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC721/[email protected]


pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/utils/[email protected]


pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]


pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/utils/[email protected]


pragma solidity ^0.8.0;

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

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

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

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

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


// File @openzeppelin/contracts/utils/introspection/[email protected]


pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]


pragma solidity ^0.8.0;







/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

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

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @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 ||
            super.supportsInterface(interfaceId);
    }

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

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @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 virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @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.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: 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`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * 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
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), 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.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * 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`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


pragma solidity ^0.8.0;


/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * 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`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


// File @openzeppelin/contracts/utils/[email protected]


pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}


// File @openzeppelin/contracts/access/[email protected]


pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/math/[email protected]


pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

contract DuckFim is ERC721, Ownable { 

    using Strings for uint256;

    bool    public  revealed = false;
    bool    public  sale = true;
    string  private baseURI                     = "ipfs://QmdaMtSVeg2ux6cRFkLggsBL3f6vhx2JAtaiYRS7W59xDx/";
    string  public  notRevealedUri              = "ipfs://QmTCZEQEXPUHESwwTWboq5pum62oUbkVpZU5mhg8dg1AgX";
    uint16  public  nonce                       = 1;
    uint    public  price;
    uint16  public  totalSupply;
    uint8   public  nftPerAddressLimit          = 150;
    uint8   public  maxPerTx;

    mapping(address => uint256) public addressMintedBalance;

    constructor(
        string memory _name,
        string memory _ticker,
        uint _price, 
        uint16 _totalSupply,
        uint8 _maxPerTx
    ) ERC721(_name, _ticker) {
        price = _price;
        totalSupply = _totalSupply;
        maxPerTx = _maxPerTx;
    }
    
    function reveal() public onlyOwner {
        revealed                = !revealed;
    }

    function setBaseURI(string memory baseURI_) public onlyOwner {
        baseURI = baseURI_;
    }

    function setUnrevealedURI(string memory baseURI_) public onlyOwner {
        notRevealedUri = baseURI_;
    }

    function _baseURI() internal view virtual override returns (string memory) {
        if(revealed == false) {
            return notRevealedUri;
        }else{
            return baseURI;
        }
    }

    function setPrice(uint _newPrice) external onlyOwner {
        price = _newPrice;
    }

    function setTotalSupply(uint16 _newSupply) external onlyOwner {
        totalSupply = _newSupply;
    }

    function setSale() public onlyOwner {
        sale = !sale;
    }

    function setMaxPerTx(uint8 _newLimit) external onlyOwner {
        maxPerTx = _newLimit;
    }

    function setMaxPerAddress(uint8 _newLimit) external onlyOwner {
        nftPerAddressLimit = _newLimit;
    }


    function buy(uint8 _qty) external payable {
        require(sale,                                                               "Sale is not active");
        require(_qty <= maxPerTx || _qty < 1,                                       "Max Per Transaction Exceeded.");
        require(uint16(_qty) + nonce - 1 <= totalSupply,                            "No More Supply.");
        require((addressMintedBalance[msg.sender] + _qty) <= nftPerAddressLimit,    "max NFT per address exceeded");
        require(msg.value >= price * _qty,                                          "Invalid Price");

        mintNFTs(msg.sender, _qty);
        addressMintedBalance[msg.sender]+=_qty;
    }

    function giveaway(address _to, uint8 _qty) external onlyOwner {
        require(uint16(_qty) + nonce - 1 <= totalSupply, 'No more supply');

        mintNFTs(_to, _qty);
    }

    function mintNFTs(address _to, uint8 _qty) private {
        for (uint8 i = 0; i < _qty; i++) {
            uint16 _tokenId = nonce;
            _safeMint(_to, _tokenId);
            nonce++;
        }
    }

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

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

        if(revealed == false) {
            return notRevealedUri;
        }else{
            return bytes(baseURI).length > 0 ? string(abi.encodePacked(_baseURI(), tokenId.toString(), ".json")) : "";
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_ticker","type":"string"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint16","name":"_totalSupply","type":"uint16"},{"internalType":"uint8","name":"_maxPerTx","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","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":[{"internalType":"uint8","name":"_qty","type":"uint8"}],"name":"buy","outputs":[],"stateMutability":"payable","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":"_to","type":"address"},{"internalType":"uint8","name":"_qty","type":"uint8"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_newLimit","type":"uint8"}],"name":"setMaxPerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_newLimit","type":"uint8"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newSupply","type":"uint16"}],"name":"setTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setUnrevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600660146101000a81548160ff0219169083151502179055506001600660156101000a81548160ff021916908315150217905550604051806060016040528060368152602001620049b160369139600790805190602001906200006b92919062000279565b50604051806060016040528060358152602001620049e760359139600890805190602001906200009d92919062000279565b506001600960006101000a81548161ffff021916908361ffff1602179055506096600b60026101000a81548160ff021916908360ff160217905550348015620000e557600080fd5b5060405162004a1c38038062004a1c83398181016040528101906200010b9190620003e0565b848481600090805190602001906200012592919062000279565b5080600190805190602001906200013e92919062000279565b5050506200016162000155620001ab60201b60201c565b620001b360201b60201c565b82600a8190555081600b60006101000a81548161ffff021916908361ffff16021790555080600b60036101000a81548160ff021916908360ff160217905550505050505062000677565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000287906200054e565b90600052602060002090601f016020900481019282620002ab5760008555620002f7565b82601f10620002c657805160ff1916838001178555620002f7565b82800160010185558215620002f7579182015b82811115620002f6578251825591602001919060010190620002d9565b5b5090506200030691906200030a565b5090565b5b80821115620003255760008160009055506001016200030b565b5090565b6000620003406200033a84620004bd565b62000494565b9050828152602081018484840111156200035957600080fd5b6200036684828562000518565b509392505050565b600082601f8301126200038057600080fd5b81516200039284826020860162000329565b91505092915050565b600081519050620003ac8162000629565b92915050565b600081519050620003c38162000643565b92915050565b600081519050620003da816200065d565b92915050565b600080600080600060a08688031215620003f957600080fd5b600086015167ffffffffffffffff8111156200041457600080fd5b62000422888289016200036e565b955050602086015167ffffffffffffffff8111156200044057600080fd5b6200044e888289016200036e565b94505060406200046188828901620003b2565b935050606062000474888289016200039b565b92505060806200048788828901620003c9565b9150509295509295909350565b6000620004a0620004b3565b9050620004ae828262000584565b919050565b6000604051905090565b600067ffffffffffffffff821115620004db57620004da620005e9565b5b620004e68262000618565b9050602081019050919050565b600061ffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015620005385780820151818401526020810190506200051b565b8381111562000548576000848401525b50505050565b600060028204905060018216806200056757607f821691505b602082108114156200057e576200057d620005ba565b5b50919050565b6200058f8262000618565b810181811067ffffffffffffffff82111715620005b157620005b0620005e9565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6200063481620004f3565b81146200064057600080fd5b50565b6200064e8162000501565b81146200065a57600080fd5b50565b62000668816200050b565b81146200067457600080fd5b50565b61432a80620006876000396000f3fe60806040526004361061020f5760003560e01c80636e34c79611610118578063a475b5dd116100a0578063c87b56dd1161006f578063c87b56dd1461072e578063e985e9c51461076b578063f2fde38b146107a8578063f968adbe146107d1578063fe2c7fee146107fc5761020f565b8063a475b5dd14610698578063affed0e0146106af578063b88d4fde146106da578063ba7d2c76146107035761020f565b806391b7f5ed116100e757806391b7f5ed146105c757806395d89b41146105f0578063a035b1fe1461061b578063a22cb46514610646578063a24ffbd41461066f5761020f565b80636e34c7961461051f57806370a0823114610548578063715018a6146105855780638da5cb5b1461059c5761020f565b806323b872dd1161019b578063518302271161016a578063518302271461043a57806355f804b314610465578063562e438b1461048e5780636352211e146104b75780636ad1fe02146104f45761020f565b806323b872dd146103a85780633ccfd60b146103d157806342842e0e146103e85780635168e54f146104115761020f565b8063095ea7b3116101e2578063095ea7b3146102e457806314107f3c1461030d57806318160ddd1461032957806318cae269146103545780631d9cfd6d146103915761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063081c8c44146102b9575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190612ed3565b610825565b604051610248919061348a565b60405180910390f35b34801561025d57600080fd5b50610266610907565b60405161027391906134a5565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612f8f565b610999565b6040516102b09190613423565b60405180910390f35b3480156102c557600080fd5b506102ce610a1e565b6040516102db91906134a5565b60405180910390f35b3480156102f057600080fd5b5061030b60048036038101906103069190612e5b565b610aac565b005b61032760048036038101906103229190612fb8565b610bc4565b005b34801561033557600080fd5b5061033e610e59565b60405161034b9190613787565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190612cf0565b610e6d565b60405161038891906137a2565b60405180910390f35b34801561039d57600080fd5b506103a6610e85565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190612d55565b610f2d565b005b3480156103dd57600080fd5b506103e6610f8d565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190612d55565b611052565b005b34801561041d57600080fd5b5061043860048036038101906104339190612fb8565b611072565b005b34801561044657600080fd5b5061044f61110c565b60405161045c919061348a565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190612f25565b61111f565b005b34801561049a57600080fd5b506104b560048036038101906104b09190612f66565b6111b5565b005b3480156104c357600080fd5b506104de60048036038101906104d99190612f8f565b611251565b6040516104eb9190613423565b60405180910390f35b34801561050057600080fd5b50610509611303565b604051610516919061348a565b60405180910390f35b34801561052b57600080fd5b5061054660048036038101906105419190612fb8565b611316565b005b34801561055457600080fd5b5061056f600480360381019061056a9190612cf0565b6113b0565b60405161057c91906137a2565b60405180910390f35b34801561059157600080fd5b5061059a611468565b005b3480156105a857600080fd5b506105b16114f0565b6040516105be9190613423565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e99190612f8f565b61151a565b005b3480156105fc57600080fd5b506106056115a0565b60405161061291906134a5565b60405180910390f35b34801561062757600080fd5b50610630611632565b60405161063d91906137a2565b60405180910390f35b34801561065257600080fd5b5061066d60048036038101906106689190612e1f565b611638565b005b34801561067b57600080fd5b5061069660048036038101906106919190612e97565b6117b9565b005b3480156106a457600080fd5b506106ad6118c8565b005b3480156106bb57600080fd5b506106c4611970565b6040516106d19190613787565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190612da4565b611984565b005b34801561070f57600080fd5b506107186119e6565b60405161072591906137bd565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190612f8f565b6119f9565b60405161076291906134a5565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190612d19565b611b56565b60405161079f919061348a565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190612cf0565b611bea565b005b3480156107dd57600080fd5b506107e6611ce2565b6040516107f391906137bd565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190612f25565b611cf5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061090057506108ff82611d8b565b5b9050919050565b60606000805461091690613af4565b80601f016020809104026020016040519081016040528092919081815260200182805461094290613af4565b801561098f5780601f106109645761010080835404028352916020019161098f565b820191906000526020600020905b81548152906001019060200180831161097257829003601f168201915b5050505050905090565b60006109a482611df5565b6109e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109da90613667565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60088054610a2b90613af4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5790613af4565b8015610aa45780601f10610a7957610100808354040283529160200191610aa4565b820191906000526020600020905b815481529060010190602001808311610a8757829003601f168201915b505050505081565b6000610ab782611251565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1f90613707565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b47611e61565b73ffffffffffffffffffffffffffffffffffffffff161480610b765750610b7581610b70611e61565b611b56565b5b610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac906135c7565b60405180910390fd5b610bbf8383611e69565b505050565b600660159054906101000a900460ff16610c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0a90613587565b60405180910390fd5b600b60039054906101000a900460ff1660ff168160ff16111580610c3a575060018160ff16105b610c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7090613747565b60405180910390fd5b600b60009054906101000a900461ffff1661ffff166001600960009054906101000a900461ffff168360ff16610caf91906138a2565b610cb991906139bb565b61ffff161115610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf5906136a7565b60405180910390fd5b600b60029054906101000a900460ff1660ff168160ff16600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d5f91906138da565b1115610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790613527565b60405180910390fd5b8060ff16600a54610db19190613961565b341015610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90613627565b60405180910390fd5b610dfd3382611f22565b8060ff16600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e4f91906138da565b9250508190555050565b600b60009054906101000a900461ffff1681565b600c6020528060005260406000206000915090505481565b610e8d611e61565b73ffffffffffffffffffffffffffffffffffffffff16610eab6114f0565b73ffffffffffffffffffffffffffffffffffffffff1614610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890613687565b60405180910390fd5b600660159054906101000a900460ff1615600660156101000a81548160ff021916908315150217905550565b610f3e610f38611e61565b82611faa565b610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7490613727565b60405180910390fd5b610f88838383612088565b505050565b610f95611e61565b73ffffffffffffffffffffffffffffffffffffffff16610fb36114f0565b73ffffffffffffffffffffffffffffffffffffffff1614611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100090613687565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561104f573d6000803e3d6000fd5b50565b61106d83838360405180602001604052806000815250611984565b505050565b61107a611e61565b73ffffffffffffffffffffffffffffffffffffffff166110986114f0565b73ffffffffffffffffffffffffffffffffffffffff16146110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e590613687565b60405180910390fd5b80600b60026101000a81548160ff021916908360ff16021790555050565b600660149054906101000a900460ff1681565b611127611e61565b73ffffffffffffffffffffffffffffffffffffffff166111456114f0565b73ffffffffffffffffffffffffffffffffffffffff161461119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119290613687565b60405180910390fd5b80600790805190602001906111b1929190612aea565b5050565b6111bd611e61565b73ffffffffffffffffffffffffffffffffffffffff166111db6114f0565b73ffffffffffffffffffffffffffffffffffffffff1614611231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122890613687565b60405180910390fd5b80600b60006101000a81548161ffff021916908361ffff16021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f190613607565b60405180910390fd5b80915050919050565b600660159054906101000a900460ff1681565b61131e611e61565b73ffffffffffffffffffffffffffffffffffffffff1661133c6114f0565b73ffffffffffffffffffffffffffffffffffffffff1614611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990613687565b60405180910390fd5b80600b60036101000a81548160ff021916908360ff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611421576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611418906135e7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611470611e61565b73ffffffffffffffffffffffffffffffffffffffff1661148e6114f0565b73ffffffffffffffffffffffffffffffffffffffff16146114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db90613687565b60405180910390fd5b6114ee60006122e4565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611522611e61565b73ffffffffffffffffffffffffffffffffffffffff166115406114f0565b73ffffffffffffffffffffffffffffffffffffffff1614611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90613687565b60405180910390fd5b80600a8190555050565b6060600180546115af90613af4565b80601f01602080910402602001604051908101604052809291908181526020018280546115db90613af4565b80156116285780601f106115fd57610100808354040283529160200191611628565b820191906000526020600020905b81548152906001019060200180831161160b57829003601f168201915b5050505050905090565b600a5481565b611640611e61565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a590613567565b60405180910390fd5b80600560006116bb611e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611768611e61565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117ad919061348a565b60405180910390a35050565b6117c1611e61565b73ffffffffffffffffffffffffffffffffffffffff166117df6114f0565b73ffffffffffffffffffffffffffffffffffffffff1614611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c90613687565b60405180910390fd5b600b60009054906101000a900461ffff1661ffff166001600960009054906101000a900461ffff168360ff1661186b91906138a2565b61187591906139bb565b61ffff1611156118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b190613767565b60405180910390fd5b6118c48282611f22565b5050565b6118d0611e61565b73ffffffffffffffffffffffffffffffffffffffff166118ee6114f0565b73ffffffffffffffffffffffffffffffffffffffff1614611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b90613687565b60405180910390fd5b600660149054906101000a900460ff1615600660146101000a81548160ff021916908315150217905550565b600960009054906101000a900461ffff1681565b61199561198f611e61565b83611faa565b6119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90613727565b60405180910390fd5b6119e0848484846123aa565b50505050565b600b60029054906101000a900460ff1681565b6060611a0482611df5565b611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a906136e7565b60405180910390fd5b60001515600660149054906101000a900460ff1615151415611af15760088054611a6c90613af4565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9890613af4565b8015611ae55780601f10611aba57610100808354040283529160200191611ae5565b820191906000526020600020905b815481529060010190602001808311611ac857829003601f168201915b50505050509050611b51565b600060078054611b0090613af4565b905011611b1c5760405180602001604052806000815250611b4e565b611b24612406565b611b2d83612547565b604051602001611b3e9291906133f4565b6040516020818303038152906040525b90505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611bf2611e61565b73ffffffffffffffffffffffffffffffffffffffff16611c106114f0565b73ffffffffffffffffffffffffffffffffffffffff1614611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d90613687565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd906134e7565b60405180910390fd5b611cdf816122e4565b50565b600b60039054906101000a900460ff1681565b611cfd611e61565b73ffffffffffffffffffffffffffffffffffffffff16611d1b6114f0565b73ffffffffffffffffffffffffffffffffffffffff1614611d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6890613687565b60405180910390fd5b8060089080519060200190611d87929190612aea565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611edc83611251565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60005b8160ff168160ff161015611fa5576000600960009054906101000a900461ffff169050611f56848261ffff166126f4565b6009600081819054906101000a900461ffff1680929190611f7690613b57565b91906101000a81548161ffff021916908361ffff16021790555050508080611f9d90613bcb565b915050611f25565b505050565b6000611fb582611df5565b611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb906135a7565b60405180910390fd5b6000611fff83611251565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061206e57508373ffffffffffffffffffffffffffffffffffffffff1661205684610999565b73ffffffffffffffffffffffffffffffffffffffff16145b8061207f575061207e8185611b56565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120a882611251565b73ffffffffffffffffffffffffffffffffffffffff16146120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f5906136c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561216e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216590613547565b60405180910390fd5b612179838383612712565b612184600082611e69565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121d491906139ef565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461222b91906138da565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123b5848484612088565b6123c184848484612717565b612400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f7906134c7565b60405180910390fd5b50505050565b606060001515600660149054906101000a900460ff16151514156124b6576008805461243190613af4565b80601f016020809104026020016040519081016040528092919081815260200182805461245d90613af4565b80156124aa5780601f1061247f576101008083540402835291602001916124aa565b820191906000526020600020905b81548152906001019060200180831161248d57829003601f168201915b50505050509050612544565b600780546124c390613af4565b80601f01602080910402602001604051908101604052809291908181526020018280546124ef90613af4565b801561253c5780601f106125115761010080835404028352916020019161253c565b820191906000526020600020905b81548152906001019060200180831161251f57829003601f168201915b505050505090505b90565b6060600082141561258f576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126ef565b600082905060005b600082146125c15780806125aa90613b82565b915050600a826125ba9190613930565b9150612597565b60008167ffffffffffffffff811115612603577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126355781602001600182028036833780820191505090505b5090505b600085146126e85760018261264e91906139ef565b9150600a8561265d9190613bf5565b603061266991906138da565b60f81b8183815181106126a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126e19190613930565b9450612639565b8093505050505b919050565b61270e8282604051806020016040528060008152506128ae565b5050565b505050565b60006127388473ffffffffffffffffffffffffffffffffffffffff16612909565b156128a1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612761611e61565b8786866040518563ffffffff1660e01b8152600401612783949392919061343e565b602060405180830381600087803b15801561279d57600080fd5b505af19250505080156127ce57506040513d601f19601f820116820180604052508101906127cb9190612efc565b60015b612851573d80600081146127fe576040519150601f19603f3d011682016040523d82523d6000602084013e612803565b606091505b50600081511415612849576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612840906134c7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128a6565b600190505b949350505050565b6128b8838361291c565b6128c56000848484612717565b612904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fb906134c7565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298390613647565b60405180910390fd5b61299581611df5565b156129d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cc90613507565b60405180910390fd5b6129e160008383612712565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a3191906138da565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612af690613af4565b90600052602060002090601f016020900481019282612b185760008555612b5f565b82601f10612b3157805160ff1916838001178555612b5f565b82800160010185558215612b5f579182015b82811115612b5e578251825591602001919060010190612b43565b5b509050612b6c9190612b70565b5090565b5b80821115612b89576000816000905550600101612b71565b5090565b6000612ba0612b9b846137fd565b6137d8565b905082815260208101848484011115612bb857600080fd5b612bc3848285613ab2565b509392505050565b6000612bde612bd98461382e565b6137d8565b905082815260208101848484011115612bf657600080fd5b612c01848285613ab2565b509392505050565b600081359050612c188161426a565b92915050565b600081359050612c2d81614281565b92915050565b600081359050612c4281614298565b92915050565b600081519050612c5781614298565b92915050565b600082601f830112612c6e57600080fd5b8135612c7e848260208601612b8d565b91505092915050565b600082601f830112612c9857600080fd5b8135612ca8848260208601612bcb565b91505092915050565b600081359050612cc0816142af565b92915050565b600081359050612cd5816142c6565b92915050565b600081359050612cea816142dd565b92915050565b600060208284031215612d0257600080fd5b6000612d1084828501612c09565b91505092915050565b60008060408385031215612d2c57600080fd5b6000612d3a85828601612c09565b9250506020612d4b85828601612c09565b9150509250929050565b600080600060608486031215612d6a57600080fd5b6000612d7886828701612c09565b9350506020612d8986828701612c09565b9250506040612d9a86828701612cc6565b9150509250925092565b60008060008060808587031215612dba57600080fd5b6000612dc887828801612c09565b9450506020612dd987828801612c09565b9350506040612dea87828801612cc6565b925050606085013567ffffffffffffffff811115612e0757600080fd5b612e1387828801612c5d565b91505092959194509250565b60008060408385031215612e3257600080fd5b6000612e4085828601612c09565b9250506020612e5185828601612c1e565b9150509250929050565b60008060408385031215612e6e57600080fd5b6000612e7c85828601612c09565b9250506020612e8d85828601612cc6565b9150509250929050565b60008060408385031215612eaa57600080fd5b6000612eb885828601612c09565b9250506020612ec985828601612cdb565b9150509250929050565b600060208284031215612ee557600080fd5b6000612ef384828501612c33565b91505092915050565b600060208284031215612f0e57600080fd5b6000612f1c84828501612c48565b91505092915050565b600060208284031215612f3757600080fd5b600082013567ffffffffffffffff811115612f5157600080fd5b612f5d84828501612c87565b91505092915050565b600060208284031215612f7857600080fd5b6000612f8684828501612cb1565b91505092915050565b600060208284031215612fa157600080fd5b6000612faf84828501612cc6565b91505092915050565b600060208284031215612fca57600080fd5b6000612fd884828501612cdb565b91505092915050565b612fea81613a23565b82525050565b612ff981613a35565b82525050565b600061300a8261385f565b6130148185613875565b9350613024818560208601613ac1565b61302d81613ce2565b840191505092915050565b60006130438261386a565b61304d8185613886565b935061305d818560208601613ac1565b61306681613ce2565b840191505092915050565b600061307c8261386a565b6130868185613897565b9350613096818560208601613ac1565b80840191505092915050565b60006130af603283613886565b91506130ba82613cf3565b604082019050919050565b60006130d2602683613886565b91506130dd82613d42565b604082019050919050565b60006130f5601c83613886565b915061310082613d91565b602082019050919050565b6000613118601c83613886565b915061312382613dba565b602082019050919050565b600061313b602483613886565b915061314682613de3565b604082019050919050565b600061315e601983613886565b915061316982613e32565b602082019050919050565b6000613181601283613886565b915061318c82613e5b565b602082019050919050565b60006131a4602c83613886565b91506131af82613e84565b604082019050919050565b60006131c7603883613886565b91506131d282613ed3565b604082019050919050565b60006131ea602a83613886565b91506131f582613f22565b604082019050919050565b600061320d602983613886565b915061321882613f71565b604082019050919050565b6000613230600d83613886565b915061323b82613fc0565b602082019050919050565b6000613253602083613886565b915061325e82613fe9565b602082019050919050565b6000613276602c83613886565b915061328182614012565b604082019050919050565b6000613299600583613897565b91506132a482614061565b600582019050919050565b60006132bc602083613886565b91506132c78261408a565b602082019050919050565b60006132df600f83613886565b91506132ea826140b3565b602082019050919050565b6000613302602983613886565b915061330d826140dc565b604082019050919050565b6000613325602f83613886565b91506133308261412b565b604082019050919050565b6000613348602183613886565b91506133538261417a565b604082019050919050565b600061336b603183613886565b9150613376826141c9565b604082019050919050565b600061338e601d83613886565b915061339982614218565b602082019050919050565b60006133b1600e83613886565b91506133bc82614241565b602082019050919050565b6133d081613a6d565b82525050565b6133df81613a9b565b82525050565b6133ee81613aa5565b82525050565b60006134008285613071565b915061340c8284613071565b91506134178261328c565b91508190509392505050565b60006020820190506134386000830184612fe1565b92915050565b60006080820190506134536000830187612fe1565b6134606020830186612fe1565b61346d60408301856133d6565b818103606083015261347f8184612fff565b905095945050505050565b600060208201905061349f6000830184612ff0565b92915050565b600060208201905081810360008301526134bf8184613038565b905092915050565b600060208201905081810360008301526134e0816130a2565b9050919050565b60006020820190508181036000830152613500816130c5565b9050919050565b60006020820190508181036000830152613520816130e8565b9050919050565b600060208201905081810360008301526135408161310b565b9050919050565b600060208201905081810360008301526135608161312e565b9050919050565b6000602082019050818103600083015261358081613151565b9050919050565b600060208201905081810360008301526135a081613174565b9050919050565b600060208201905081810360008301526135c081613197565b9050919050565b600060208201905081810360008301526135e0816131ba565b9050919050565b60006020820190508181036000830152613600816131dd565b9050919050565b6000602082019050818103600083015261362081613200565b9050919050565b6000602082019050818103600083015261364081613223565b9050919050565b6000602082019050818103600083015261366081613246565b9050919050565b6000602082019050818103600083015261368081613269565b9050919050565b600060208201905081810360008301526136a0816132af565b9050919050565b600060208201905081810360008301526136c0816132d2565b9050919050565b600060208201905081810360008301526136e0816132f5565b9050919050565b6000602082019050818103600083015261370081613318565b9050919050565b600060208201905081810360008301526137208161333b565b9050919050565b600060208201905081810360008301526137408161335e565b9050919050565b6000602082019050818103600083015261376081613381565b9050919050565b60006020820190508181036000830152613780816133a4565b9050919050565b600060208201905061379c60008301846133c7565b92915050565b60006020820190506137b760008301846133d6565b92915050565b60006020820190506137d260008301846133e5565b92915050565b60006137e26137f3565b90506137ee8282613b26565b919050565b6000604051905090565b600067ffffffffffffffff82111561381857613817613cb3565b5b61382182613ce2565b9050602081019050919050565b600067ffffffffffffffff82111561384957613848613cb3565b5b61385282613ce2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006138ad82613a6d565b91506138b883613a6d565b92508261ffff038211156138cf576138ce613c26565b5b828201905092915050565b60006138e582613a9b565b91506138f083613a9b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561392557613924613c26565b5b828201905092915050565b600061393b82613a9b565b915061394683613a9b565b92508261395657613955613c55565b5b828204905092915050565b600061396c82613a9b565b915061397783613a9b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139b0576139af613c26565b5b828202905092915050565b60006139c682613a6d565b91506139d183613a6d565b9250828210156139e4576139e3613c26565b5b828203905092915050565b60006139fa82613a9b565b9150613a0583613a9b565b925082821015613a1857613a17613c26565b5b828203905092915050565b6000613a2e82613a7b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613adf578082015181840152602081019050613ac4565b83811115613aee576000848401525b50505050565b60006002820490506001821680613b0c57607f821691505b60208210811415613b2057613b1f613c84565b5b50919050565b613b2f82613ce2565b810181811067ffffffffffffffff82111715613b4e57613b4d613cb3565b5b80604052505050565b6000613b6282613a6d565b915061ffff821415613b7757613b76613c26565b5b600182019050919050565b6000613b8d82613a9b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bc057613bbf613c26565b5b600182019050919050565b6000613bd682613aa5565b915060ff821415613bea57613be9613c26565b5b600182019050919050565b6000613c0082613a9b565b9150613c0b83613a9b565b925082613c1b57613c1a613c55565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e76616c696420507269636500000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f204d6f726520537570706c792e0000000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d617820506572205472616e73616374696f6e2045786365656465642e000000600082015250565b7f4e6f206d6f726520737570706c79000000000000000000000000000000000000600082015250565b61427381613a23565b811461427e57600080fd5b50565b61428a81613a35565b811461429557600080fd5b50565b6142a181613a41565b81146142ac57600080fd5b50565b6142b881613a6d565b81146142c357600080fd5b50565b6142cf81613a9b565b81146142da57600080fd5b50565b6142e681613aa5565b81146142f157600080fd5b5056fea2646970667358221220596e44d3cc70f8443165cd99303b805be4ce1f3d7e60887aeb7fe3fd294972ee64736f6c63430008040033697066733a2f2f516d64614d7453566567327578366352466b4c676773424c336636766878324a41746169595253375735397844782f697066733a2f2f516d54435a45514558505548455377775457626f713570756d36326f55626b56705a55356d68673864673141675800000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000007c58508723800000000000000000000000000000000000000000000000000000000000000015b3000000000000000000000000000000000000000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000000074475636b66696d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004444b464d00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061020f5760003560e01c80636e34c79611610118578063a475b5dd116100a0578063c87b56dd1161006f578063c87b56dd1461072e578063e985e9c51461076b578063f2fde38b146107a8578063f968adbe146107d1578063fe2c7fee146107fc5761020f565b8063a475b5dd14610698578063affed0e0146106af578063b88d4fde146106da578063ba7d2c76146107035761020f565b806391b7f5ed116100e757806391b7f5ed146105c757806395d89b41146105f0578063a035b1fe1461061b578063a22cb46514610646578063a24ffbd41461066f5761020f565b80636e34c7961461051f57806370a0823114610548578063715018a6146105855780638da5cb5b1461059c5761020f565b806323b872dd1161019b578063518302271161016a578063518302271461043a57806355f804b314610465578063562e438b1461048e5780636352211e146104b75780636ad1fe02146104f45761020f565b806323b872dd146103a85780633ccfd60b146103d157806342842e0e146103e85780635168e54f146104115761020f565b8063095ea7b3116101e2578063095ea7b3146102e457806314107f3c1461030d57806318160ddd1461032957806318cae269146103545780631d9cfd6d146103915761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063081c8c44146102b9575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190612ed3565b610825565b604051610248919061348a565b60405180910390f35b34801561025d57600080fd5b50610266610907565b60405161027391906134a5565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612f8f565b610999565b6040516102b09190613423565b60405180910390f35b3480156102c557600080fd5b506102ce610a1e565b6040516102db91906134a5565b60405180910390f35b3480156102f057600080fd5b5061030b60048036038101906103069190612e5b565b610aac565b005b61032760048036038101906103229190612fb8565b610bc4565b005b34801561033557600080fd5b5061033e610e59565b60405161034b9190613787565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190612cf0565b610e6d565b60405161038891906137a2565b60405180910390f35b34801561039d57600080fd5b506103a6610e85565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190612d55565b610f2d565b005b3480156103dd57600080fd5b506103e6610f8d565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190612d55565b611052565b005b34801561041d57600080fd5b5061043860048036038101906104339190612fb8565b611072565b005b34801561044657600080fd5b5061044f61110c565b60405161045c919061348a565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190612f25565b61111f565b005b34801561049a57600080fd5b506104b560048036038101906104b09190612f66565b6111b5565b005b3480156104c357600080fd5b506104de60048036038101906104d99190612f8f565b611251565b6040516104eb9190613423565b60405180910390f35b34801561050057600080fd5b50610509611303565b604051610516919061348a565b60405180910390f35b34801561052b57600080fd5b5061054660048036038101906105419190612fb8565b611316565b005b34801561055457600080fd5b5061056f600480360381019061056a9190612cf0565b6113b0565b60405161057c91906137a2565b60405180910390f35b34801561059157600080fd5b5061059a611468565b005b3480156105a857600080fd5b506105b16114f0565b6040516105be9190613423565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e99190612f8f565b61151a565b005b3480156105fc57600080fd5b506106056115a0565b60405161061291906134a5565b60405180910390f35b34801561062757600080fd5b50610630611632565b60405161063d91906137a2565b60405180910390f35b34801561065257600080fd5b5061066d60048036038101906106689190612e1f565b611638565b005b34801561067b57600080fd5b5061069660048036038101906106919190612e97565b6117b9565b005b3480156106a457600080fd5b506106ad6118c8565b005b3480156106bb57600080fd5b506106c4611970565b6040516106d19190613787565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190612da4565b611984565b005b34801561070f57600080fd5b506107186119e6565b60405161072591906137bd565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190612f8f565b6119f9565b60405161076291906134a5565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190612d19565b611b56565b60405161079f919061348a565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190612cf0565b611bea565b005b3480156107dd57600080fd5b506107e6611ce2565b6040516107f391906137bd565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190612f25565b611cf5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061090057506108ff82611d8b565b5b9050919050565b60606000805461091690613af4565b80601f016020809104026020016040519081016040528092919081815260200182805461094290613af4565b801561098f5780601f106109645761010080835404028352916020019161098f565b820191906000526020600020905b81548152906001019060200180831161097257829003601f168201915b5050505050905090565b60006109a482611df5565b6109e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109da90613667565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60088054610a2b90613af4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5790613af4565b8015610aa45780601f10610a7957610100808354040283529160200191610aa4565b820191906000526020600020905b815481529060010190602001808311610a8757829003601f168201915b505050505081565b6000610ab782611251565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1f90613707565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b47611e61565b73ffffffffffffffffffffffffffffffffffffffff161480610b765750610b7581610b70611e61565b611b56565b5b610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac906135c7565b60405180910390fd5b610bbf8383611e69565b505050565b600660159054906101000a900460ff16610c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0a90613587565b60405180910390fd5b600b60039054906101000a900460ff1660ff168160ff16111580610c3a575060018160ff16105b610c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7090613747565b60405180910390fd5b600b60009054906101000a900461ffff1661ffff166001600960009054906101000a900461ffff168360ff16610caf91906138a2565b610cb991906139bb565b61ffff161115610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf5906136a7565b60405180910390fd5b600b60029054906101000a900460ff1660ff168160ff16600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d5f91906138da565b1115610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790613527565b60405180910390fd5b8060ff16600a54610db19190613961565b341015610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90613627565b60405180910390fd5b610dfd3382611f22565b8060ff16600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e4f91906138da565b9250508190555050565b600b60009054906101000a900461ffff1681565b600c6020528060005260406000206000915090505481565b610e8d611e61565b73ffffffffffffffffffffffffffffffffffffffff16610eab6114f0565b73ffffffffffffffffffffffffffffffffffffffff1614610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890613687565b60405180910390fd5b600660159054906101000a900460ff1615600660156101000a81548160ff021916908315150217905550565b610f3e610f38611e61565b82611faa565b610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7490613727565b60405180910390fd5b610f88838383612088565b505050565b610f95611e61565b73ffffffffffffffffffffffffffffffffffffffff16610fb36114f0565b73ffffffffffffffffffffffffffffffffffffffff1614611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100090613687565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561104f573d6000803e3d6000fd5b50565b61106d83838360405180602001604052806000815250611984565b505050565b61107a611e61565b73ffffffffffffffffffffffffffffffffffffffff166110986114f0565b73ffffffffffffffffffffffffffffffffffffffff16146110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e590613687565b60405180910390fd5b80600b60026101000a81548160ff021916908360ff16021790555050565b600660149054906101000a900460ff1681565b611127611e61565b73ffffffffffffffffffffffffffffffffffffffff166111456114f0565b73ffffffffffffffffffffffffffffffffffffffff161461119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119290613687565b60405180910390fd5b80600790805190602001906111b1929190612aea565b5050565b6111bd611e61565b73ffffffffffffffffffffffffffffffffffffffff166111db6114f0565b73ffffffffffffffffffffffffffffffffffffffff1614611231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122890613687565b60405180910390fd5b80600b60006101000a81548161ffff021916908361ffff16021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f190613607565b60405180910390fd5b80915050919050565b600660159054906101000a900460ff1681565b61131e611e61565b73ffffffffffffffffffffffffffffffffffffffff1661133c6114f0565b73ffffffffffffffffffffffffffffffffffffffff1614611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990613687565b60405180910390fd5b80600b60036101000a81548160ff021916908360ff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611421576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611418906135e7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611470611e61565b73ffffffffffffffffffffffffffffffffffffffff1661148e6114f0565b73ffffffffffffffffffffffffffffffffffffffff16146114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db90613687565b60405180910390fd5b6114ee60006122e4565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611522611e61565b73ffffffffffffffffffffffffffffffffffffffff166115406114f0565b73ffffffffffffffffffffffffffffffffffffffff1614611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90613687565b60405180910390fd5b80600a8190555050565b6060600180546115af90613af4565b80601f01602080910402602001604051908101604052809291908181526020018280546115db90613af4565b80156116285780601f106115fd57610100808354040283529160200191611628565b820191906000526020600020905b81548152906001019060200180831161160b57829003601f168201915b5050505050905090565b600a5481565b611640611e61565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a590613567565b60405180910390fd5b80600560006116bb611e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611768611e61565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117ad919061348a565b60405180910390a35050565b6117c1611e61565b73ffffffffffffffffffffffffffffffffffffffff166117df6114f0565b73ffffffffffffffffffffffffffffffffffffffff1614611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c90613687565b60405180910390fd5b600b60009054906101000a900461ffff1661ffff166001600960009054906101000a900461ffff168360ff1661186b91906138a2565b61187591906139bb565b61ffff1611156118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b190613767565b60405180910390fd5b6118c48282611f22565b5050565b6118d0611e61565b73ffffffffffffffffffffffffffffffffffffffff166118ee6114f0565b73ffffffffffffffffffffffffffffffffffffffff1614611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b90613687565b60405180910390fd5b600660149054906101000a900460ff1615600660146101000a81548160ff021916908315150217905550565b600960009054906101000a900461ffff1681565b61199561198f611e61565b83611faa565b6119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90613727565b60405180910390fd5b6119e0848484846123aa565b50505050565b600b60029054906101000a900460ff1681565b6060611a0482611df5565b611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a906136e7565b60405180910390fd5b60001515600660149054906101000a900460ff1615151415611af15760088054611a6c90613af4565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9890613af4565b8015611ae55780601f10611aba57610100808354040283529160200191611ae5565b820191906000526020600020905b815481529060010190602001808311611ac857829003601f168201915b50505050509050611b51565b600060078054611b0090613af4565b905011611b1c5760405180602001604052806000815250611b4e565b611b24612406565b611b2d83612547565b604051602001611b3e9291906133f4565b6040516020818303038152906040525b90505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611bf2611e61565b73ffffffffffffffffffffffffffffffffffffffff16611c106114f0565b73ffffffffffffffffffffffffffffffffffffffff1614611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d90613687565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd906134e7565b60405180910390fd5b611cdf816122e4565b50565b600b60039054906101000a900460ff1681565b611cfd611e61565b73ffffffffffffffffffffffffffffffffffffffff16611d1b6114f0565b73ffffffffffffffffffffffffffffffffffffffff1614611d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6890613687565b60405180910390fd5b8060089080519060200190611d87929190612aea565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611edc83611251565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60005b8160ff168160ff161015611fa5576000600960009054906101000a900461ffff169050611f56848261ffff166126f4565b6009600081819054906101000a900461ffff1680929190611f7690613b57565b91906101000a81548161ffff021916908361ffff16021790555050508080611f9d90613bcb565b915050611f25565b505050565b6000611fb582611df5565b611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb906135a7565b60405180910390fd5b6000611fff83611251565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061206e57508373ffffffffffffffffffffffffffffffffffffffff1661205684610999565b73ffffffffffffffffffffffffffffffffffffffff16145b8061207f575061207e8185611b56565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120a882611251565b73ffffffffffffffffffffffffffffffffffffffff16146120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f5906136c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561216e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216590613547565b60405180910390fd5b612179838383612712565b612184600082611e69565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121d491906139ef565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461222b91906138da565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123b5848484612088565b6123c184848484612717565b612400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f7906134c7565b60405180910390fd5b50505050565b606060001515600660149054906101000a900460ff16151514156124b6576008805461243190613af4565b80601f016020809104026020016040519081016040528092919081815260200182805461245d90613af4565b80156124aa5780601f1061247f576101008083540402835291602001916124aa565b820191906000526020600020905b81548152906001019060200180831161248d57829003601f168201915b50505050509050612544565b600780546124c390613af4565b80601f01602080910402602001604051908101604052809291908181526020018280546124ef90613af4565b801561253c5780601f106125115761010080835404028352916020019161253c565b820191906000526020600020905b81548152906001019060200180831161251f57829003601f168201915b505050505090505b90565b6060600082141561258f576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126ef565b600082905060005b600082146125c15780806125aa90613b82565b915050600a826125ba9190613930565b9150612597565b60008167ffffffffffffffff811115612603577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126355781602001600182028036833780820191505090505b5090505b600085146126e85760018261264e91906139ef565b9150600a8561265d9190613bf5565b603061266991906138da565b60f81b8183815181106126a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126e19190613930565b9450612639565b8093505050505b919050565b61270e8282604051806020016040528060008152506128ae565b5050565b505050565b60006127388473ffffffffffffffffffffffffffffffffffffffff16612909565b156128a1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612761611e61565b8786866040518563ffffffff1660e01b8152600401612783949392919061343e565b602060405180830381600087803b15801561279d57600080fd5b505af19250505080156127ce57506040513d601f19601f820116820180604052508101906127cb9190612efc565b60015b612851573d80600081146127fe576040519150601f19603f3d011682016040523d82523d6000602084013e612803565b606091505b50600081511415612849576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612840906134c7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128a6565b600190505b949350505050565b6128b8838361291c565b6128c56000848484612717565b612904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fb906134c7565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298390613647565b60405180910390fd5b61299581611df5565b156129d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cc90613507565b60405180910390fd5b6129e160008383612712565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a3191906138da565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612af690613af4565b90600052602060002090601f016020900481019282612b185760008555612b5f565b82601f10612b3157805160ff1916838001178555612b5f565b82800160010185558215612b5f579182015b82811115612b5e578251825591602001919060010190612b43565b5b509050612b6c9190612b70565b5090565b5b80821115612b89576000816000905550600101612b71565b5090565b6000612ba0612b9b846137fd565b6137d8565b905082815260208101848484011115612bb857600080fd5b612bc3848285613ab2565b509392505050565b6000612bde612bd98461382e565b6137d8565b905082815260208101848484011115612bf657600080fd5b612c01848285613ab2565b509392505050565b600081359050612c188161426a565b92915050565b600081359050612c2d81614281565b92915050565b600081359050612c4281614298565b92915050565b600081519050612c5781614298565b92915050565b600082601f830112612c6e57600080fd5b8135612c7e848260208601612b8d565b91505092915050565b600082601f830112612c9857600080fd5b8135612ca8848260208601612bcb565b91505092915050565b600081359050612cc0816142af565b92915050565b600081359050612cd5816142c6565b92915050565b600081359050612cea816142dd565b92915050565b600060208284031215612d0257600080fd5b6000612d1084828501612c09565b91505092915050565b60008060408385031215612d2c57600080fd5b6000612d3a85828601612c09565b9250506020612d4b85828601612c09565b9150509250929050565b600080600060608486031215612d6a57600080fd5b6000612d7886828701612c09565b9350506020612d8986828701612c09565b9250506040612d9a86828701612cc6565b9150509250925092565b60008060008060808587031215612dba57600080fd5b6000612dc887828801612c09565b9450506020612dd987828801612c09565b9350506040612dea87828801612cc6565b925050606085013567ffffffffffffffff811115612e0757600080fd5b612e1387828801612c5d565b91505092959194509250565b60008060408385031215612e3257600080fd5b6000612e4085828601612c09565b9250506020612e5185828601612c1e565b9150509250929050565b60008060408385031215612e6e57600080fd5b6000612e7c85828601612c09565b9250506020612e8d85828601612cc6565b9150509250929050565b60008060408385031215612eaa57600080fd5b6000612eb885828601612c09565b9250506020612ec985828601612cdb565b9150509250929050565b600060208284031215612ee557600080fd5b6000612ef384828501612c33565b91505092915050565b600060208284031215612f0e57600080fd5b6000612f1c84828501612c48565b91505092915050565b600060208284031215612f3757600080fd5b600082013567ffffffffffffffff811115612f5157600080fd5b612f5d84828501612c87565b91505092915050565b600060208284031215612f7857600080fd5b6000612f8684828501612cb1565b91505092915050565b600060208284031215612fa157600080fd5b6000612faf84828501612cc6565b91505092915050565b600060208284031215612fca57600080fd5b6000612fd884828501612cdb565b91505092915050565b612fea81613a23565b82525050565b612ff981613a35565b82525050565b600061300a8261385f565b6130148185613875565b9350613024818560208601613ac1565b61302d81613ce2565b840191505092915050565b60006130438261386a565b61304d8185613886565b935061305d818560208601613ac1565b61306681613ce2565b840191505092915050565b600061307c8261386a565b6130868185613897565b9350613096818560208601613ac1565b80840191505092915050565b60006130af603283613886565b91506130ba82613cf3565b604082019050919050565b60006130d2602683613886565b91506130dd82613d42565b604082019050919050565b60006130f5601c83613886565b915061310082613d91565b602082019050919050565b6000613118601c83613886565b915061312382613dba565b602082019050919050565b600061313b602483613886565b915061314682613de3565b604082019050919050565b600061315e601983613886565b915061316982613e32565b602082019050919050565b6000613181601283613886565b915061318c82613e5b565b602082019050919050565b60006131a4602c83613886565b91506131af82613e84565b604082019050919050565b60006131c7603883613886565b91506131d282613ed3565b604082019050919050565b60006131ea602a83613886565b91506131f582613f22565b604082019050919050565b600061320d602983613886565b915061321882613f71565b604082019050919050565b6000613230600d83613886565b915061323b82613fc0565b602082019050919050565b6000613253602083613886565b915061325e82613fe9565b602082019050919050565b6000613276602c83613886565b915061328182614012565b604082019050919050565b6000613299600583613897565b91506132a482614061565b600582019050919050565b60006132bc602083613886565b91506132c78261408a565b602082019050919050565b60006132df600f83613886565b91506132ea826140b3565b602082019050919050565b6000613302602983613886565b915061330d826140dc565b604082019050919050565b6000613325602f83613886565b91506133308261412b565b604082019050919050565b6000613348602183613886565b91506133538261417a565b604082019050919050565b600061336b603183613886565b9150613376826141c9565b604082019050919050565b600061338e601d83613886565b915061339982614218565b602082019050919050565b60006133b1600e83613886565b91506133bc82614241565b602082019050919050565b6133d081613a6d565b82525050565b6133df81613a9b565b82525050565b6133ee81613aa5565b82525050565b60006134008285613071565b915061340c8284613071565b91506134178261328c565b91508190509392505050565b60006020820190506134386000830184612fe1565b92915050565b60006080820190506134536000830187612fe1565b6134606020830186612fe1565b61346d60408301856133d6565b818103606083015261347f8184612fff565b905095945050505050565b600060208201905061349f6000830184612ff0565b92915050565b600060208201905081810360008301526134bf8184613038565b905092915050565b600060208201905081810360008301526134e0816130a2565b9050919050565b60006020820190508181036000830152613500816130c5565b9050919050565b60006020820190508181036000830152613520816130e8565b9050919050565b600060208201905081810360008301526135408161310b565b9050919050565b600060208201905081810360008301526135608161312e565b9050919050565b6000602082019050818103600083015261358081613151565b9050919050565b600060208201905081810360008301526135a081613174565b9050919050565b600060208201905081810360008301526135c081613197565b9050919050565b600060208201905081810360008301526135e0816131ba565b9050919050565b60006020820190508181036000830152613600816131dd565b9050919050565b6000602082019050818103600083015261362081613200565b9050919050565b6000602082019050818103600083015261364081613223565b9050919050565b6000602082019050818103600083015261366081613246565b9050919050565b6000602082019050818103600083015261368081613269565b9050919050565b600060208201905081810360008301526136a0816132af565b9050919050565b600060208201905081810360008301526136c0816132d2565b9050919050565b600060208201905081810360008301526136e0816132f5565b9050919050565b6000602082019050818103600083015261370081613318565b9050919050565b600060208201905081810360008301526137208161333b565b9050919050565b600060208201905081810360008301526137408161335e565b9050919050565b6000602082019050818103600083015261376081613381565b9050919050565b60006020820190508181036000830152613780816133a4565b9050919050565b600060208201905061379c60008301846133c7565b92915050565b60006020820190506137b760008301846133d6565b92915050565b60006020820190506137d260008301846133e5565b92915050565b60006137e26137f3565b90506137ee8282613b26565b919050565b6000604051905090565b600067ffffffffffffffff82111561381857613817613cb3565b5b61382182613ce2565b9050602081019050919050565b600067ffffffffffffffff82111561384957613848613cb3565b5b61385282613ce2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006138ad82613a6d565b91506138b883613a6d565b92508261ffff038211156138cf576138ce613c26565b5b828201905092915050565b60006138e582613a9b565b91506138f083613a9b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561392557613924613c26565b5b828201905092915050565b600061393b82613a9b565b915061394683613a9b565b92508261395657613955613c55565b5b828204905092915050565b600061396c82613a9b565b915061397783613a9b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139b0576139af613c26565b5b828202905092915050565b60006139c682613a6d565b91506139d183613a6d565b9250828210156139e4576139e3613c26565b5b828203905092915050565b60006139fa82613a9b565b9150613a0583613a9b565b925082821015613a1857613a17613c26565b5b828203905092915050565b6000613a2e82613a7b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613adf578082015181840152602081019050613ac4565b83811115613aee576000848401525b50505050565b60006002820490506001821680613b0c57607f821691505b60208210811415613b2057613b1f613c84565b5b50919050565b613b2f82613ce2565b810181811067ffffffffffffffff82111715613b4e57613b4d613cb3565b5b80604052505050565b6000613b6282613a6d565b915061ffff821415613b7757613b76613c26565b5b600182019050919050565b6000613b8d82613a9b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bc057613bbf613c26565b5b600182019050919050565b6000613bd682613aa5565b915060ff821415613bea57613be9613c26565b5b600182019050919050565b6000613c0082613a9b565b9150613c0b83613a9b565b925082613c1b57613c1a613c55565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e76616c696420507269636500000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f204d6f726520537570706c792e0000000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d617820506572205472616e73616374696f6e2045786365656465642e000000600082015250565b7f4e6f206d6f726520737570706c79000000000000000000000000000000000000600082015250565b61427381613a23565b811461427e57600080fd5b50565b61428a81613a35565b811461429557600080fd5b50565b6142a181613a41565b81146142ac57600080fd5b50565b6142b881613a6d565b81146142c357600080fd5b50565b6142cf81613a9b565b81146142da57600080fd5b50565b6142e681613aa5565b81146142f157600080fd5b5056fea2646970667358221220596e44d3cc70f8443165cd99303b805be4ce1f3d7e60887aeb7fe3fd294972ee64736f6c63430008040033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000007c58508723800000000000000000000000000000000000000000000000000000000000000015b3000000000000000000000000000000000000000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000000074475636b66696d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004444b464d00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Duckfim
Arg [1] : _ticker (string): DKFM
Arg [2] : _price (uint256): 35000000000000000
Arg [3] : _totalSupply (uint16): 5555
Arg [4] : _maxPerTx (uint8): 15

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 000000000000000000000000000000000000000000000000007c585087238000
Arg [3] : 00000000000000000000000000000000000000000000000000000000000015b3
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 4475636b66696d00000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 444b464d00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

51669:3613:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20808:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21753:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23312:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51931:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22835:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53652:691;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52121:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52244:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53352:67;;;;;;;;;;;;;:::i;:::-;;24202:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54759:109;;;;;;;;;;;;;:::i;:::-;;24612:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53531:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51749:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52701:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53239:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21447:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51788:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53427:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21177:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44077:94;;;;;;;;;;;;;:::i;:::-;;43426:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53142:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21922:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52093:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23605:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54351:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52604:89;;;;;;;;;;;;;:::i;:::-;;52039:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24868:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52155:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54876:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23971:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44326:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52211:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52807:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20808:305;20910:4;20962:25;20947:40;;;:11;:40;;;;:105;;;;21019:33;21004:48;;;:11;:48;;;;20947:105;:158;;;;21069:36;21093:11;21069:23;:36::i;:::-;20947:158;20927:178;;20808:305;;;:::o;21753:100::-;21807:13;21840:5;21833:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21753:100;:::o;23312:221::-;23388:7;23416:16;23424:7;23416;:16::i;:::-;23408:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23501:15;:24;23517:7;23501:24;;;;;;;;;;;;;;;;;;;;;23494:31;;23312:221;;;:::o;51931:101::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22835:411::-;22916:13;22932:23;22947:7;22932:14;:23::i;:::-;22916:39;;22980:5;22974:11;;:2;:11;;;;22966:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23074:5;23058:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23083:37;23100:5;23107:12;:10;:12::i;:::-;23083:16;:37::i;:::-;23058:62;23036:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23217:21;23226:2;23230:7;23217:8;:21::i;:::-;22835:411;;;:::o;53652:691::-;53713:4;;;;;;;;;;;53705:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;53829:8;;;;;;;;;;;53821:16;;:4;:16;;;;:28;;;;53848:1;53841:4;:8;;;53821:28;53813:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;53968:11;;;;;;;;;;;53940:39;;53963:1;53955:5;;;;;;;;;;;53947:4;53940:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;53932:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;54090:18;;;;;;;;;;;54045:63;;54081:4;54046:39;;:20;:32;54067:10;54046:32;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;54045:63;;54037:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;54184:4;54176:12;;:5;;:12;;;;:::i;:::-;54163:9;:25;;54155:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;54260:26;54269:10;54281:4;54260:8;:26::i;:::-;54331:4;54297:38;;:20;:32;54318:10;54297:32;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;53652:691;:::o;52121:27::-;;;;;;;;;;;;;:::o;52244:55::-;;;;;;;;;;;;;;;;;:::o;53352:67::-;43657:12;:10;:12::i;:::-;43646:23;;:7;:5;:7::i;:::-;:23;;;43638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53407:4:::1;;;;;;;;;;;53406:5;53399:4;;:12;;;;;;;;;;;;;;;;;;53352:67::o:0;24202:339::-;24397:41;24416:12;:10;:12::i;:::-;24430:7;24397:18;:41::i;:::-;24389:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24505:28;24515:4;24521:2;24525:7;24505:9;:28::i;:::-;24202:339;;;:::o;54759:109::-;43657:12;:10;:12::i;:::-;43646:23;;:7;:5;:7::i;:::-;:23;;;43638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54817:10:::1;54809:28;;:51;54838:21;54809:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;54759:109::o:0;24612:185::-;24750:39;24767:4;24773:2;24777:7;24750:39;;;;;;;;;;;;:16;:39::i;:::-;24612:185;;;:::o;53531:111::-;43657:12;:10;:12::i;:::-;43646:23;;:7;:5;:7::i;:::-;:23;;;43638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53625:9:::1;53604:18;;:30;;;;;;;;;;;;;;;;;;53531:111:::0;:::o;51749:32::-;;;;;;;;;;;;;:::o;52701:98::-;43657:12;:10;:12::i;:::-;43646:23;;:7;:5;:7::i;:::-;:23;;;43638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52783:8:::1;52773:7;:18;;;;;;;;;;;;:::i;:::-;;52701:98:::0;:::o;53239:105::-;43657:12;:10;:12::i;:::-;43646:23;;:7;:5;:7::i;:::-;:23;;;43638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53326:10:::1;53312:11;;:24;;;;;;;;;;;;;;;;;;53239:105:::0;:::o;21447:239::-;21519:7;21539:13;21555:7;:16;21563:7;21555:16;;;;;;;;;;;;;;;;;;;;;21539:32;;21607:1;21590:19;;:5;:19;;;;21582:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21673:5;21666:12;;;21447:239;;;:::o;51788:27::-;;;;;;;;;;;;;:::o;53427:96::-;43657:12;:10;:12::i;:::-;43646:23;;:7;:5;:7::i;:::-;:23;;;43638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53506:9:::1;53495:8;;:20;;;;;;;;;;;;;;;;;;53427:96:::0;:::o;21177:208::-;21249:7;21294:1;21277:19;;:5;:19;;;;21269:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21361:9;:16;21371:5;21361:16;;;;;;;;;;;;;;;;21354:23;;21177:208;;;:::o;44077:94::-;43657:12;:10;:12::i;:::-;43646:23;;:7;:5;:7::i;:::-;:23;;;43638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44142:21:::1;44160:1;44142:9;:21::i;:::-;44077:94::o:0;43426:87::-;43472:7;43499:6;;;;;;;;;;;43492:13;;43426:87;:::o;53142:89::-;43657:12;:10;:12::i;:::-;43646:23;;:7;:5;:7::i;:::-;:23;;;43638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53214:9:::1;53206:5;:17;;;;53142:89:::0;:::o;21922:104::-;21978:13;22011:7;22004:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21922:104;:::o;52093:21::-;;;;:::o;23605:295::-;23720:12;:10;:12::i;:::-;23708:24;;:8;:24;;;;23700:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23820:8;23775:18;:32;23794:12;:10;:12::i;:::-;23775:32;;;;;;;;;;;;;;;:42;23808:8;23775:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23873:8;23844:48;;23859:12;:10;:12::i;:::-;23844:48;;;23883:8;23844:48;;;;;;:::i;:::-;;;;;;;;23605:295;;:::o;54351:179::-;43657:12;:10;:12::i;:::-;43646:23;;:7;:5;:7::i;:::-;:23;;;43638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54460:11:::1;;;;;;;;;;;54432:39;;54455:1;54447:5;;;;;;;;;;;54439:4;54432:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;54424:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;54503:19;54512:3;54517:4;54503:8;:19::i;:::-;54351:179:::0;;:::o;52604:89::-;43657:12;:10;:12::i;:::-;43646:23;;:7;:5;:7::i;:::-;:23;;;43638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52677:8:::1;;;;;;;;;;;52676:9;52650:8;;:35;;;;;;;;;;;;;;;;;;52604:89::o:0;52039:47::-;;;;;;;;;;;;;:::o;24868:328::-;25043:41;25062:12;:10;:12::i;:::-;25076:7;25043:18;:41::i;:::-;25035:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25149:39;25163:4;25169:2;25173:7;25182:5;25149:13;:39::i;:::-;24868:328;;;;:::o;52155:49::-;;;;;;;;;;;;;:::o;54876:401::-;54949:13;54983:16;54991:7;54983;:16::i;:::-;54975:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;55079:5;55067:17;;:8;;;;;;;;;;;:17;;;55064:206;;;55108:14;55101:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55064:206;55184:1;55166:7;55160:21;;;;;:::i;:::-;;;:25;:98;;;;;;;;;;;;;;;;;55212:10;:8;:10::i;:::-;55224:18;:7;:16;:18::i;:::-;55195:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55160:98;55153:105;;54876:401;;;;:::o;23971:164::-;24068:4;24092:18;:25;24111:5;24092:25;;;;;;;;;;;;;;;:35;24118:8;24092:35;;;;;;;;;;;;;;;;;;;;;;;;;24085:42;;23971:164;;;;:::o;44326:192::-;43657:12;:10;:12::i;:::-;43646:23;;:7;:5;:7::i;:::-;:23;;;43638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44435:1:::1;44415:22;;:8;:22;;;;44407:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44491:19;44501:8;44491:9;:19::i;:::-;44326:192:::0;:::o;52211:24::-;;;;;;;;;;;;;:::o;52807:111::-;43657:12;:10;:12::i;:::-;43646:23;;:7;:5;:7::i;:::-;:23;;;43638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52902:8:::1;52885:14;:25;;;;;;;;;;;;:::i;:::-;;52807:111:::0;:::o;19308:157::-;19393:4;19432:25;19417:40;;;:11;:40;;;;19410:47;;19308:157;;;:::o;26706:127::-;26771:4;26823:1;26795:30;;:7;:16;26803:7;26795:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26788:37;;26706:127;;;:::o;16216:98::-;16269:7;16296:10;16289:17;;16216:98;:::o;30688:174::-;30790:2;30763:15;:24;30779:7;30763:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30846:7;30842:2;30808:46;;30817:23;30832:7;30817:14;:23::i;:::-;30808:46;;;;;;;;;;;;30688:174;;:::o;54538:213::-;54605:7;54600:144;54622:4;54618:8;;:1;:8;;;54600:144;;;54648:15;54666:5;;;;;;;;;;;54648:23;;54686:24;54696:3;54701:8;54686:24;;:9;:24::i;:::-;54725:5;;:7;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;54600:144;54628:3;;;;;:::i;:::-;;;;54600:144;;;;54538:213;;:::o;27000:348::-;27093:4;27118:16;27126:7;27118;:16::i;:::-;27110:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27194:13;27210:23;27225:7;27210:14;:23::i;:::-;27194:39;;27263:5;27252:16;;:7;:16;;;:51;;;;27296:7;27272:31;;:20;27284:7;27272:11;:20::i;:::-;:31;;;27252:51;:87;;;;27307:32;27324:5;27331:7;27307:16;:32::i;:::-;27252:87;27244:96;;;27000:348;;;;:::o;29992:578::-;30151:4;30124:31;;:23;30139:7;30124:14;:23::i;:::-;:31;;;30116:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30234:1;30220:16;;:2;:16;;;;30212:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30290:39;30311:4;30317:2;30321:7;30290:20;:39::i;:::-;30394:29;30411:1;30415:7;30394:8;:29::i;:::-;30455:1;30436:9;:15;30446:4;30436:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30484:1;30467:9;:13;30477:2;30467:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30515:2;30496:7;:16;30504:7;30496:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30554:7;30550:2;30535:27;;30544:4;30535:27;;;;;;;;;;;;29992:578;;;:::o;44526:173::-;44582:16;44601:6;;;;;;;;;;;44582:25;;44627:8;44618:6;;:17;;;;;;;;;;;;;;;;;;44682:8;44651:40;;44672:8;44651:40;;;;;;;;;;;;44526:173;;:::o;26078:315::-;26235:28;26245:4;26251:2;26255:7;26235:9;:28::i;:::-;26282:48;26305:4;26311:2;26315:7;26324:5;26282:22;:48::i;:::-;26274:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26078:315;;;;:::o;52926:208::-;52986:13;53027:5;53015:17;;:8;;;;;;;;;;;:17;;;53012:115;;;53056:14;53049:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53012:115;53108:7;53101:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52926:208;;:::o;16747:723::-;16803:13;17033:1;17024:5;:10;17020:53;;;17051:10;;;;;;;;;;;;;;;;;;;;;17020:53;17083:12;17098:5;17083:20;;17114:14;17139:78;17154:1;17146:4;:9;17139:78;;17172:8;;;;;:::i;:::-;;;;17203:2;17195:10;;;;;:::i;:::-;;;17139:78;;;17227:19;17259:6;17249:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17227:39;;17277:154;17293:1;17284:5;:10;17277:154;;17321:1;17311:11;;;;;:::i;:::-;;;17388:2;17380:5;:10;;;;:::i;:::-;17367:2;:24;;;;:::i;:::-;17354:39;;17337:6;17344;17337:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17417:2;17408:11;;;;;:::i;:::-;;;17277:154;;;17455:6;17441:21;;;;;16747:723;;;;:::o;27690:110::-;27766:26;27776:2;27780:7;27766:26;;;;;;;;;;;;:9;:26::i;:::-;27690:110;;:::o;32798:126::-;;;;:::o;31427:799::-;31582:4;31603:15;:2;:13;;;:15::i;:::-;31599:620;;;31655:2;31639:36;;;31676:12;:10;:12::i;:::-;31690:4;31696:7;31705:5;31639:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31635:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31898:1;31881:6;:13;:18;31877:272;;;31924:60;;;;;;;;;;:::i;:::-;;;;;;;;31877:272;32099:6;32093:13;32084:6;32080:2;32076:15;32069:38;31635:529;31772:41;;;31762:51;;;:6;:51;;;;31755:58;;;;;31599:620;32203:4;32196:11;;31427:799;;;;;;;:::o;28027:321::-;28157:18;28163:2;28167:7;28157:5;:18::i;:::-;28208:54;28239:1;28243:2;28247:7;28256:5;28208:22;:54::i;:::-;28186:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28027:321;;;:::o;8254:387::-;8314:4;8522:12;8589:7;8577:20;8569:28;;8632:1;8625:4;:8;8618:15;;;8254:387;;;:::o;28684:382::-;28778:1;28764:16;;:2;:16;;;;28756:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28837:16;28845:7;28837;:16::i;:::-;28836:17;28828:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28899:45;28928:1;28932:2;28936:7;28899:20;:45::i;:::-;28974:1;28957:9;:13;28967:2;28957:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29005:2;28986:7;:16;28994:7;28986:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29050:7;29046:2;29025:33;;29042:1;29025:33;;;;;;;;;;;;28684:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:137::-;1909:5;1947:6;1934:20;1925:29;;1963:32;1989:5;1963:32;:::i;:::-;1915:86;;;;:::o;2007:139::-;2053:5;2091:6;2078:20;2069:29;;2107:33;2134:5;2107:33;:::i;:::-;2059:87;;;;:::o;2152:135::-;2196:5;2234:6;2221:20;2212:29;;2250:31;2275:5;2250:31;:::i;:::-;2202:85;;;;:::o;2293:262::-;2352:6;2401:2;2389:9;2380:7;2376:23;2372:32;2369:2;;;2417:1;2414;2407:12;2369:2;2460:1;2485:53;2530:7;2521:6;2510:9;2506:22;2485:53;:::i;:::-;2475:63;;2431:117;2359:196;;;;:::o;2561:407::-;2629:6;2637;2686:2;2674:9;2665:7;2661:23;2657:32;2654:2;;;2702:1;2699;2692:12;2654:2;2745:1;2770:53;2815:7;2806:6;2795:9;2791:22;2770:53;:::i;:::-;2760:63;;2716:117;2872:2;2898:53;2943:7;2934:6;2923:9;2919:22;2898:53;:::i;:::-;2888:63;;2843:118;2644:324;;;;;:::o;2974:552::-;3051:6;3059;3067;3116:2;3104:9;3095:7;3091:23;3087:32;3084:2;;;3132:1;3129;3122:12;3084:2;3175:1;3200:53;3245:7;3236:6;3225:9;3221:22;3200:53;:::i;:::-;3190:63;;3146:117;3302:2;3328:53;3373:7;3364:6;3353:9;3349:22;3328:53;:::i;:::-;3318:63;;3273:118;3430:2;3456:53;3501:7;3492:6;3481:9;3477:22;3456:53;:::i;:::-;3446:63;;3401:118;3074:452;;;;;:::o;3532:809::-;3627:6;3635;3643;3651;3700:3;3688:9;3679:7;3675:23;3671:33;3668:2;;;3717:1;3714;3707:12;3668:2;3760:1;3785:53;3830:7;3821:6;3810:9;3806:22;3785:53;:::i;:::-;3775:63;;3731:117;3887:2;3913:53;3958:7;3949:6;3938:9;3934:22;3913:53;:::i;:::-;3903:63;;3858:118;4015:2;4041:53;4086:7;4077:6;4066:9;4062:22;4041:53;:::i;:::-;4031:63;;3986:118;4171:2;4160:9;4156:18;4143:32;4202:18;4194:6;4191:30;4188:2;;;4234:1;4231;4224:12;4188:2;4262:62;4316:7;4307:6;4296:9;4292:22;4262:62;:::i;:::-;4252:72;;4114:220;3658:683;;;;;;;:::o;4347:401::-;4412:6;4420;4469:2;4457:9;4448:7;4444:23;4440:32;4437:2;;;4485:1;4482;4475:12;4437:2;4528:1;4553:53;4598:7;4589:6;4578:9;4574:22;4553:53;:::i;:::-;4543:63;;4499:117;4655:2;4681:50;4723:7;4714:6;4703:9;4699:22;4681:50;:::i;:::-;4671:60;;4626:115;4427:321;;;;;:::o;4754:407::-;4822:6;4830;4879:2;4867:9;4858:7;4854:23;4850:32;4847:2;;;4895:1;4892;4885:12;4847:2;4938:1;4963:53;5008:7;4999:6;4988:9;4984:22;4963:53;:::i;:::-;4953:63;;4909:117;5065:2;5091:53;5136:7;5127:6;5116:9;5112:22;5091:53;:::i;:::-;5081:63;;5036:118;4837:324;;;;;:::o;5167:403::-;5233:6;5241;5290:2;5278:9;5269:7;5265:23;5261:32;5258:2;;;5306:1;5303;5296:12;5258:2;5349:1;5374:53;5419:7;5410:6;5399:9;5395:22;5374:53;:::i;:::-;5364:63;;5320:117;5476:2;5502:51;5545:7;5536:6;5525:9;5521:22;5502:51;:::i;:::-;5492:61;;5447:116;5248:322;;;;;:::o;5576:260::-;5634:6;5683:2;5671:9;5662:7;5658:23;5654:32;5651:2;;;5699:1;5696;5689:12;5651:2;5742:1;5767:52;5811:7;5802:6;5791:9;5787:22;5767:52;:::i;:::-;5757:62;;5713:116;5641:195;;;;:::o;5842:282::-;5911:6;5960:2;5948:9;5939:7;5935:23;5931:32;5928:2;;;5976:1;5973;5966:12;5928:2;6019:1;6044:63;6099:7;6090:6;6079:9;6075:22;6044:63;:::i;:::-;6034:73;;5990:127;5918:206;;;;:::o;6130:375::-;6199:6;6248:2;6236:9;6227:7;6223:23;6219:32;6216:2;;;6264:1;6261;6254:12;6216:2;6335:1;6324:9;6320:17;6307:31;6365:18;6357:6;6354:30;6351:2;;;6397:1;6394;6387:12;6351:2;6425:63;6480:7;6471:6;6460:9;6456:22;6425:63;:::i;:::-;6415:73;;6278:220;6206:299;;;;:::o;6511:260::-;6569:6;6618:2;6606:9;6597:7;6593:23;6589:32;6586:2;;;6634:1;6631;6624:12;6586:2;6677:1;6702:52;6746:7;6737:6;6726:9;6722:22;6702:52;:::i;:::-;6692:62;;6648:116;6576:195;;;;:::o;6777:262::-;6836:6;6885:2;6873:9;6864:7;6860:23;6856:32;6853:2;;;6901:1;6898;6891:12;6853:2;6944:1;6969:53;7014:7;7005:6;6994:9;6990:22;6969:53;:::i;:::-;6959:63;;6915:117;6843:196;;;;:::o;7045:258::-;7102:6;7151:2;7139:9;7130:7;7126:23;7122:32;7119:2;;;7167:1;7164;7157:12;7119:2;7210:1;7235:51;7278:7;7269:6;7258:9;7254:22;7235:51;:::i;:::-;7225:61;;7181:115;7109:194;;;;:::o;7309:118::-;7396:24;7414:5;7396:24;:::i;:::-;7391:3;7384:37;7374:53;;:::o;7433:109::-;7514:21;7529:5;7514:21;:::i;:::-;7509:3;7502:34;7492:50;;:::o;7548:360::-;7634:3;7662:38;7694:5;7662:38;:::i;:::-;7716:70;7779:6;7774:3;7716:70;:::i;:::-;7709:77;;7795:52;7840:6;7835:3;7828:4;7821:5;7817:16;7795:52;:::i;:::-;7872:29;7894:6;7872:29;:::i;:::-;7867:3;7863:39;7856:46;;7638:270;;;;;:::o;7914:364::-;8002:3;8030:39;8063:5;8030:39;:::i;:::-;8085:71;8149:6;8144:3;8085:71;:::i;:::-;8078:78;;8165:52;8210:6;8205:3;8198:4;8191:5;8187:16;8165:52;:::i;:::-;8242:29;8264:6;8242:29;:::i;:::-;8237:3;8233:39;8226:46;;8006:272;;;;;:::o;8284:377::-;8390:3;8418:39;8451:5;8418:39;:::i;:::-;8473:89;8555:6;8550:3;8473:89;:::i;:::-;8466:96;;8571:52;8616:6;8611:3;8604:4;8597:5;8593:16;8571:52;:::i;:::-;8648:6;8643:3;8639:16;8632:23;;8394:267;;;;;:::o;8667:366::-;8809:3;8830:67;8894:2;8889:3;8830:67;:::i;:::-;8823:74;;8906:93;8995:3;8906:93;:::i;:::-;9024:2;9019:3;9015:12;9008:19;;8813:220;;;:::o;9039:366::-;9181:3;9202:67;9266:2;9261:3;9202:67;:::i;:::-;9195:74;;9278:93;9367:3;9278:93;:::i;:::-;9396:2;9391:3;9387:12;9380:19;;9185:220;;;:::o;9411:366::-;9553:3;9574:67;9638:2;9633:3;9574:67;:::i;:::-;9567:74;;9650:93;9739:3;9650:93;:::i;:::-;9768:2;9763:3;9759:12;9752:19;;9557:220;;;:::o;9783:366::-;9925:3;9946:67;10010:2;10005:3;9946:67;:::i;:::-;9939:74;;10022:93;10111:3;10022:93;:::i;:::-;10140:2;10135:3;10131:12;10124:19;;9929:220;;;:::o;10155:366::-;10297:3;10318:67;10382:2;10377:3;10318:67;:::i;:::-;10311:74;;10394:93;10483:3;10394:93;:::i;:::-;10512:2;10507:3;10503:12;10496:19;;10301:220;;;:::o;10527:366::-;10669:3;10690:67;10754:2;10749:3;10690:67;:::i;:::-;10683:74;;10766:93;10855:3;10766:93;:::i;:::-;10884:2;10879:3;10875:12;10868:19;;10673:220;;;:::o;10899:366::-;11041:3;11062:67;11126:2;11121:3;11062:67;:::i;:::-;11055:74;;11138:93;11227:3;11138:93;:::i;:::-;11256:2;11251:3;11247:12;11240:19;;11045:220;;;:::o;11271:366::-;11413:3;11434:67;11498:2;11493:3;11434:67;:::i;:::-;11427:74;;11510:93;11599:3;11510:93;:::i;:::-;11628:2;11623:3;11619:12;11612:19;;11417:220;;;:::o;11643:366::-;11785:3;11806:67;11870:2;11865:3;11806:67;:::i;:::-;11799:74;;11882:93;11971:3;11882:93;:::i;:::-;12000:2;11995:3;11991:12;11984:19;;11789:220;;;:::o;12015:366::-;12157:3;12178:67;12242:2;12237:3;12178:67;:::i;:::-;12171:74;;12254:93;12343:3;12254:93;:::i;:::-;12372:2;12367:3;12363:12;12356:19;;12161:220;;;:::o;12387:366::-;12529:3;12550:67;12614:2;12609:3;12550:67;:::i;:::-;12543:74;;12626:93;12715:3;12626:93;:::i;:::-;12744:2;12739:3;12735:12;12728:19;;12533:220;;;:::o;12759:366::-;12901:3;12922:67;12986:2;12981:3;12922:67;:::i;:::-;12915:74;;12998:93;13087:3;12998:93;:::i;:::-;13116:2;13111:3;13107:12;13100:19;;12905:220;;;:::o;13131:366::-;13273:3;13294:67;13358:2;13353:3;13294:67;:::i;:::-;13287:74;;13370:93;13459:3;13370:93;:::i;:::-;13488:2;13483:3;13479:12;13472:19;;13277:220;;;:::o;13503:366::-;13645:3;13666:67;13730:2;13725:3;13666:67;:::i;:::-;13659:74;;13742:93;13831:3;13742:93;:::i;:::-;13860:2;13855:3;13851:12;13844:19;;13649:220;;;:::o;13875:400::-;14035:3;14056:84;14138:1;14133:3;14056:84;:::i;:::-;14049:91;;14149:93;14238:3;14149:93;:::i;:::-;14267:1;14262:3;14258:11;14251:18;;14039:236;;;:::o;14281:366::-;14423:3;14444:67;14508:2;14503:3;14444:67;:::i;:::-;14437:74;;14520:93;14609:3;14520:93;:::i;:::-;14638:2;14633:3;14629:12;14622:19;;14427:220;;;:::o;14653:366::-;14795:3;14816:67;14880:2;14875:3;14816:67;:::i;:::-;14809:74;;14892:93;14981:3;14892:93;:::i;:::-;15010:2;15005:3;15001:12;14994:19;;14799:220;;;:::o;15025:366::-;15167:3;15188:67;15252:2;15247:3;15188:67;:::i;:::-;15181:74;;15264:93;15353:3;15264:93;:::i;:::-;15382:2;15377:3;15373:12;15366:19;;15171:220;;;:::o;15397:366::-;15539:3;15560:67;15624:2;15619:3;15560:67;:::i;:::-;15553:74;;15636:93;15725:3;15636:93;:::i;:::-;15754:2;15749:3;15745:12;15738:19;;15543:220;;;:::o;15769:366::-;15911:3;15932:67;15996:2;15991:3;15932:67;:::i;:::-;15925:74;;16008:93;16097:3;16008:93;:::i;:::-;16126:2;16121:3;16117:12;16110:19;;15915:220;;;:::o;16141:366::-;16283:3;16304:67;16368:2;16363:3;16304:67;:::i;:::-;16297:74;;16380:93;16469:3;16380:93;:::i;:::-;16498:2;16493:3;16489:12;16482:19;;16287:220;;;:::o;16513:366::-;16655:3;16676:67;16740:2;16735:3;16676:67;:::i;:::-;16669:74;;16752:93;16841:3;16752:93;:::i;:::-;16870:2;16865:3;16861:12;16854:19;;16659:220;;;:::o;16885:366::-;17027:3;17048:67;17112:2;17107:3;17048:67;:::i;:::-;17041:74;;17124:93;17213:3;17124:93;:::i;:::-;17242:2;17237:3;17233:12;17226:19;;17031:220;;;:::o;17257:115::-;17342:23;17359:5;17342:23;:::i;:::-;17337:3;17330:36;17320:52;;:::o;17378:118::-;17465:24;17483:5;17465:24;:::i;:::-;17460:3;17453:37;17443:53;;:::o;17502:112::-;17585:22;17601:5;17585:22;:::i;:::-;17580:3;17573:35;17563:51;;:::o;17620:701::-;17901:3;17923:95;18014:3;18005:6;17923:95;:::i;:::-;17916:102;;18035:95;18126:3;18117:6;18035:95;:::i;:::-;18028:102;;18147:148;18291:3;18147:148;:::i;:::-;18140:155;;18312:3;18305:10;;17905:416;;;;;:::o;18327:222::-;18420:4;18458:2;18447:9;18443:18;18435:26;;18471:71;18539:1;18528:9;18524:17;18515:6;18471:71;:::i;:::-;18425:124;;;;:::o;18555:640::-;18750:4;18788:3;18777:9;18773:19;18765:27;;18802:71;18870:1;18859:9;18855:17;18846:6;18802:71;:::i;:::-;18883:72;18951:2;18940:9;18936:18;18927:6;18883:72;:::i;:::-;18965;19033:2;19022:9;19018:18;19009:6;18965:72;:::i;:::-;19084:9;19078:4;19074:20;19069:2;19058:9;19054:18;19047:48;19112:76;19183:4;19174:6;19112:76;:::i;:::-;19104:84;;18755:440;;;;;;;:::o;19201:210::-;19288:4;19326:2;19315:9;19311:18;19303:26;;19339:65;19401:1;19390:9;19386:17;19377:6;19339:65;:::i;:::-;19293:118;;;;:::o;19417:313::-;19530:4;19568:2;19557:9;19553:18;19545:26;;19617:9;19611:4;19607:20;19603:1;19592:9;19588:17;19581:47;19645:78;19718:4;19709:6;19645:78;:::i;:::-;19637:86;;19535:195;;;;:::o;19736:419::-;19902:4;19940:2;19929:9;19925:18;19917:26;;19989:9;19983:4;19979:20;19975:1;19964:9;19960:17;19953:47;20017:131;20143:4;20017:131;:::i;:::-;20009:139;;19907:248;;;:::o;20161:419::-;20327:4;20365:2;20354:9;20350:18;20342:26;;20414:9;20408:4;20404:20;20400:1;20389:9;20385:17;20378:47;20442:131;20568:4;20442:131;:::i;:::-;20434:139;;20332:248;;;:::o;20586:419::-;20752:4;20790:2;20779:9;20775:18;20767:26;;20839:9;20833:4;20829:20;20825:1;20814:9;20810:17;20803:47;20867:131;20993:4;20867:131;:::i;:::-;20859:139;;20757:248;;;:::o;21011:419::-;21177:4;21215:2;21204:9;21200:18;21192:26;;21264:9;21258:4;21254:20;21250:1;21239:9;21235:17;21228:47;21292:131;21418:4;21292:131;:::i;:::-;21284:139;;21182:248;;;:::o;21436:419::-;21602:4;21640:2;21629:9;21625:18;21617:26;;21689:9;21683:4;21679:20;21675:1;21664:9;21660:17;21653:47;21717:131;21843:4;21717:131;:::i;:::-;21709:139;;21607:248;;;:::o;21861:419::-;22027:4;22065:2;22054:9;22050:18;22042:26;;22114:9;22108:4;22104:20;22100:1;22089:9;22085:17;22078:47;22142:131;22268:4;22142:131;:::i;:::-;22134:139;;22032:248;;;:::o;22286:419::-;22452:4;22490:2;22479:9;22475:18;22467:26;;22539:9;22533:4;22529:20;22525:1;22514:9;22510:17;22503:47;22567:131;22693:4;22567:131;:::i;:::-;22559:139;;22457:248;;;:::o;22711:419::-;22877:4;22915:2;22904:9;22900:18;22892:26;;22964:9;22958:4;22954:20;22950:1;22939:9;22935:17;22928:47;22992:131;23118:4;22992:131;:::i;:::-;22984:139;;22882:248;;;:::o;23136:419::-;23302:4;23340:2;23329:9;23325:18;23317:26;;23389:9;23383:4;23379:20;23375:1;23364:9;23360:17;23353:47;23417:131;23543:4;23417:131;:::i;:::-;23409:139;;23307:248;;;:::o;23561:419::-;23727:4;23765:2;23754:9;23750:18;23742:26;;23814:9;23808:4;23804:20;23800:1;23789:9;23785:17;23778:47;23842:131;23968:4;23842:131;:::i;:::-;23834:139;;23732:248;;;:::o;23986:419::-;24152:4;24190:2;24179:9;24175:18;24167:26;;24239:9;24233:4;24229:20;24225:1;24214:9;24210:17;24203:47;24267:131;24393:4;24267:131;:::i;:::-;24259:139;;24157:248;;;:::o;24411:419::-;24577:4;24615:2;24604:9;24600:18;24592:26;;24664:9;24658:4;24654:20;24650:1;24639:9;24635:17;24628:47;24692:131;24818:4;24692:131;:::i;:::-;24684:139;;24582:248;;;:::o;24836:419::-;25002:4;25040:2;25029:9;25025:18;25017:26;;25089:9;25083:4;25079:20;25075:1;25064:9;25060:17;25053:47;25117:131;25243:4;25117:131;:::i;:::-;25109:139;;25007:248;;;:::o;25261:419::-;25427:4;25465:2;25454:9;25450:18;25442:26;;25514:9;25508:4;25504:20;25500:1;25489:9;25485:17;25478:47;25542:131;25668:4;25542:131;:::i;:::-;25534:139;;25432:248;;;:::o;25686:419::-;25852:4;25890:2;25879:9;25875:18;25867:26;;25939:9;25933:4;25929:20;25925:1;25914:9;25910:17;25903:47;25967:131;26093:4;25967:131;:::i;:::-;25959:139;;25857:248;;;:::o;26111:419::-;26277:4;26315:2;26304:9;26300:18;26292:26;;26364:9;26358:4;26354:20;26350:1;26339:9;26335:17;26328:47;26392:131;26518:4;26392:131;:::i;:::-;26384:139;;26282:248;;;:::o;26536:419::-;26702:4;26740:2;26729:9;26725:18;26717:26;;26789:9;26783:4;26779:20;26775:1;26764:9;26760:17;26753:47;26817:131;26943:4;26817:131;:::i;:::-;26809:139;;26707:248;;;:::o;26961:419::-;27127:4;27165:2;27154:9;27150:18;27142:26;;27214:9;27208:4;27204:20;27200:1;27189:9;27185:17;27178:47;27242:131;27368:4;27242:131;:::i;:::-;27234:139;;27132:248;;;:::o;27386:419::-;27552:4;27590:2;27579:9;27575:18;27567:26;;27639:9;27633:4;27629:20;27625:1;27614:9;27610:17;27603:47;27667:131;27793:4;27667:131;:::i;:::-;27659:139;;27557:248;;;:::o;27811:419::-;27977:4;28015:2;28004:9;28000:18;27992:26;;28064:9;28058:4;28054:20;28050:1;28039:9;28035:17;28028:47;28092:131;28218:4;28092:131;:::i;:::-;28084:139;;27982:248;;;:::o;28236:419::-;28402:4;28440:2;28429:9;28425:18;28417:26;;28489:9;28483:4;28479:20;28475:1;28464:9;28460:17;28453:47;28517:131;28643:4;28517:131;:::i;:::-;28509:139;;28407:248;;;:::o;28661:419::-;28827:4;28865:2;28854:9;28850:18;28842:26;;28914:9;28908:4;28904:20;28900:1;28889:9;28885:17;28878:47;28942:131;29068:4;28942:131;:::i;:::-;28934:139;;28832:248;;;:::o;29086:218::-;29177:4;29215:2;29204:9;29200:18;29192:26;;29228:69;29294:1;29283:9;29279:17;29270:6;29228:69;:::i;:::-;29182:122;;;;:::o;29310:222::-;29403:4;29441:2;29430:9;29426:18;29418:26;;29454:71;29522:1;29511:9;29507:17;29498:6;29454:71;:::i;:::-;29408:124;;;;:::o;29538:214::-;29627:4;29665:2;29654:9;29650:18;29642:26;;29678:67;29742:1;29731:9;29727:17;29718:6;29678:67;:::i;:::-;29632:120;;;;:::o;29758:129::-;29792:6;29819:20;;:::i;:::-;29809:30;;29848:33;29876:4;29868:6;29848:33;:::i;:::-;29799:88;;;:::o;29893:75::-;29926:6;29959:2;29953:9;29943:19;;29933:35;:::o;29974:307::-;30035:4;30125:18;30117:6;30114:30;30111:2;;;30147:18;;:::i;:::-;30111:2;30185:29;30207:6;30185:29;:::i;:::-;30177:37;;30269:4;30263;30259:15;30251:23;;30040:241;;;:::o;30287:308::-;30349:4;30439:18;30431:6;30428:30;30425:2;;;30461:18;;:::i;:::-;30425:2;30499:29;30521:6;30499:29;:::i;:::-;30491:37;;30583:4;30577;30573:15;30565:23;;30354:241;;;:::o;30601:98::-;30652:6;30686:5;30680:12;30670:22;;30659:40;;;:::o;30705:99::-;30757:6;30791:5;30785:12;30775:22;;30764:40;;;:::o;30810:168::-;30893:11;30927:6;30922:3;30915:19;30967:4;30962:3;30958:14;30943:29;;30905:73;;;;:::o;30984:169::-;31068:11;31102:6;31097:3;31090:19;31142:4;31137:3;31133:14;31118:29;;31080:73;;;;:::o;31159:148::-;31261:11;31298:3;31283:18;;31273:34;;;;:::o;31313:242::-;31352:3;31371:19;31388:1;31371:19;:::i;:::-;31366:24;;31404:19;31421:1;31404:19;:::i;:::-;31399:24;;31497:1;31489:6;31485:14;31482:1;31479:21;31476:2;;;31503:18;;:::i;:::-;31476:2;31547:1;31544;31540:9;31533:16;;31356:199;;;;:::o;31561:305::-;31601:3;31620:20;31638:1;31620:20;:::i;:::-;31615:25;;31654:20;31672:1;31654:20;:::i;:::-;31649:25;;31808:1;31740:66;31736:74;31733:1;31730:81;31727:2;;;31814:18;;:::i;:::-;31727:2;31858:1;31855;31851:9;31844:16;;31605:261;;;;:::o;31872:185::-;31912:1;31929:20;31947:1;31929:20;:::i;:::-;31924:25;;31963:20;31981:1;31963:20;:::i;:::-;31958:25;;32002:1;31992:2;;32007:18;;:::i;:::-;31992:2;32049:1;32046;32042:9;32037:14;;31914:143;;;;:::o;32063:348::-;32103:7;32126:20;32144:1;32126:20;:::i;:::-;32121:25;;32160:20;32178:1;32160:20;:::i;:::-;32155:25;;32348:1;32280:66;32276:74;32273:1;32270:81;32265:1;32258:9;32251:17;32247:105;32244:2;;;32355:18;;:::i;:::-;32244:2;32403:1;32400;32396:9;32385:20;;32111:300;;;;:::o;32417:188::-;32456:4;32476:19;32493:1;32476:19;:::i;:::-;32471:24;;32509:19;32526:1;32509:19;:::i;:::-;32504:24;;32547:1;32544;32541:8;32538:2;;;32552:18;;:::i;:::-;32538:2;32597:1;32594;32590:9;32582:17;;32461:144;;;;:::o;32611:191::-;32651:4;32671:20;32689:1;32671:20;:::i;:::-;32666:25;;32705:20;32723:1;32705:20;:::i;:::-;32700:25;;32744:1;32741;32738:8;32735:2;;;32749:18;;:::i;:::-;32735:2;32794:1;32791;32787:9;32779:17;;32656:146;;;;:::o;32808:96::-;32845:7;32874:24;32892:5;32874:24;:::i;:::-;32863:35;;32853:51;;;:::o;32910:90::-;32944:7;32987:5;32980:13;32973:21;32962:32;;32952:48;;;:::o;33006:149::-;33042:7;33082:66;33075:5;33071:78;33060:89;;33050:105;;;:::o;33161:89::-;33197:7;33237:6;33230:5;33226:18;33215:29;;33205:45;;;:::o;33256:126::-;33293:7;33333:42;33326:5;33322:54;33311:65;;33301:81;;;:::o;33388:77::-;33425:7;33454:5;33443:16;;33433:32;;;:::o;33471:86::-;33506:7;33546:4;33539:5;33535:16;33524:27;;33514:43;;;:::o;33563:154::-;33647:6;33642:3;33637;33624:30;33709:1;33700:6;33695:3;33691:16;33684:27;33614:103;;;:::o;33723:307::-;33791:1;33801:113;33815:6;33812:1;33809:13;33801:113;;;33900:1;33895:3;33891:11;33885:18;33881:1;33876:3;33872:11;33865:39;33837:2;33834:1;33830:10;33825:15;;33801:113;;;33932:6;33929:1;33926:13;33923:2;;;34012:1;34003:6;33998:3;33994:16;33987:27;33923:2;33772:258;;;;:::o;34036:320::-;34080:6;34117:1;34111:4;34107:12;34097:22;;34164:1;34158:4;34154:12;34185:18;34175:2;;34241:4;34233:6;34229:17;34219:27;;34175:2;34303;34295:6;34292:14;34272:18;34269:38;34266:2;;;34322:18;;:::i;:::-;34266:2;34087:269;;;;:::o;34362:281::-;34445:27;34467:4;34445:27;:::i;:::-;34437:6;34433:40;34575:6;34563:10;34560:22;34539:18;34527:10;34524:34;34521:62;34518:2;;;34586:18;;:::i;:::-;34518:2;34626:10;34622:2;34615:22;34405:238;;;:::o;34649:171::-;34687:3;34710:23;34727:5;34710:23;:::i;:::-;34701:32;;34755:6;34748:5;34745:17;34742:2;;;34765:18;;:::i;:::-;34742:2;34812:1;34805:5;34801:13;34794:20;;34691:129;;;:::o;34826:233::-;34865:3;34888:24;34906:5;34888:24;:::i;:::-;34879:33;;34934:66;34927:5;34924:77;34921:2;;;35004:18;;:::i;:::-;34921:2;35051:1;35044:5;35040:13;35033:20;;34869:190;;;:::o;35065:167::-;35102:3;35125:22;35141:5;35125:22;:::i;:::-;35116:31;;35169:4;35162:5;35159:15;35156:2;;;35177:18;;:::i;:::-;35156:2;35224:1;35217:5;35213:13;35206:20;;35106:126;;;:::o;35238:176::-;35270:1;35287:20;35305:1;35287:20;:::i;:::-;35282:25;;35321:20;35339:1;35321:20;:::i;:::-;35316:25;;35360:1;35350:2;;35365:18;;:::i;:::-;35350:2;35406:1;35403;35399:9;35394:14;;35272:142;;;;:::o;35420:180::-;35468:77;35465:1;35458:88;35565:4;35562:1;35555:15;35589:4;35586:1;35579:15;35606:180;35654:77;35651:1;35644:88;35751:4;35748:1;35741:15;35775:4;35772:1;35765:15;35792:180;35840:77;35837:1;35830:88;35937:4;35934:1;35927:15;35961:4;35958:1;35951:15;35978:180;36026:77;36023:1;36016:88;36123:4;36120:1;36113:15;36147:4;36144:1;36137:15;36164:102;36205:6;36256:2;36252:7;36247:2;36240:5;36236:14;36232:28;36222:38;;36212:54;;;:::o;36272:237::-;36412:34;36408:1;36400:6;36396:14;36389:58;36481:20;36476:2;36468:6;36464:15;36457:45;36378:131;:::o;36515:225::-;36655:34;36651:1;36643:6;36639:14;36632:58;36724:8;36719:2;36711:6;36707:15;36700:33;36621:119;:::o;36746:178::-;36886:30;36882:1;36874:6;36870:14;36863:54;36852:72;:::o;36930:178::-;37070:30;37066:1;37058:6;37054:14;37047:54;37036:72;:::o;37114:223::-;37254:34;37250:1;37242:6;37238:14;37231:58;37323:6;37318:2;37310:6;37306:15;37299:31;37220:117;:::o;37343:175::-;37483:27;37479:1;37471:6;37467:14;37460:51;37449:69;:::o;37524:168::-;37664:20;37660:1;37652:6;37648:14;37641:44;37630:62;:::o;37698:231::-;37838:34;37834:1;37826:6;37822:14;37815:58;37907:14;37902:2;37894:6;37890:15;37883:39;37804:125;:::o;37935:243::-;38075:34;38071:1;38063:6;38059:14;38052:58;38144:26;38139:2;38131:6;38127:15;38120:51;38041:137;:::o;38184:229::-;38324:34;38320:1;38312:6;38308:14;38301:58;38393:12;38388:2;38380:6;38376:15;38369:37;38290:123;:::o;38419:228::-;38559:34;38555:1;38547:6;38543:14;38536:58;38628:11;38623:2;38615:6;38611:15;38604:36;38525:122;:::o;38653:163::-;38793:15;38789:1;38781:6;38777:14;38770:39;38759:57;:::o;38822:182::-;38962:34;38958:1;38950:6;38946:14;38939:58;38928:76;:::o;39010:231::-;39150:34;39146:1;39138:6;39134:14;39127:58;39219:14;39214:2;39206:6;39202:15;39195:39;39116:125;:::o;39247:155::-;39387:7;39383:1;39375:6;39371:14;39364:31;39353:49;:::o;39408:182::-;39548:34;39544:1;39536:6;39532:14;39525:58;39514:76;:::o;39596:165::-;39736:17;39732:1;39724:6;39720:14;39713:41;39702:59;:::o;39767:228::-;39907:34;39903:1;39895:6;39891:14;39884:58;39976:11;39971:2;39963:6;39959:15;39952:36;39873:122;:::o;40001:234::-;40141:34;40137:1;40129:6;40125:14;40118:58;40210:17;40205:2;40197:6;40193:15;40186:42;40107:128;:::o;40241:220::-;40381:34;40377:1;40369:6;40365:14;40358:58;40450:3;40445:2;40437:6;40433:15;40426:28;40347:114;:::o;40467:236::-;40607:34;40603:1;40595:6;40591:14;40584:58;40676:19;40671:2;40663:6;40659:15;40652:44;40573:130;:::o;40709:179::-;40849:31;40845:1;40837:6;40833:14;40826:55;40815:73;:::o;40894:164::-;41034:16;41030:1;41022:6;41018:14;41011:40;41000:58;:::o;41064:122::-;41137:24;41155:5;41137:24;:::i;:::-;41130:5;41127:35;41117:2;;41176:1;41173;41166:12;41117:2;41107:79;:::o;41192:116::-;41262:21;41277:5;41262:21;:::i;:::-;41255:5;41252:32;41242:2;;41298:1;41295;41288:12;41242:2;41232:76;:::o;41314:120::-;41386:23;41403:5;41386:23;:::i;:::-;41379:5;41376:34;41366:2;;41424:1;41421;41414:12;41366:2;41356:78;:::o;41440:120::-;41512:23;41529:5;41512:23;:::i;:::-;41505:5;41502:34;41492:2;;41550:1;41547;41540:12;41492:2;41482:78;:::o;41566:122::-;41639:24;41657:5;41639:24;:::i;:::-;41632:5;41629:35;41619:2;;41678:1;41675;41668:12;41619:2;41609:79;:::o;41694:118::-;41765:22;41781:5;41765:22;:::i;:::-;41758:5;41755:33;41745:2;;41802:1;41799;41792:12;41745:2;41735:77;:::o

Swarm Source

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