ETH Price: $2,937.29 (-4.25%)
Gas: 1 Gwei

Token

KILLZUKI (KZ)
 

Overview

Max Total Supply

7,777 KZ

Holders

660

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 KZ
0x58D4d217eDEE175F2189d83cf1918eF2d1496954
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:
Killzuki

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-03-15
*/

// SPDX-License-Identifier: MIT
/**
 * @title Killzuki
 * @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 Killzuki is ERC721, Ownable { 

    using Strings for uint256;

    bool    public  revealed            = true;
    bool    public  sale                = true;
    bool    public  salefree            = false;
    uint16  public  nonce               = 0;
    uint    public  price               = 100000000000000000;
    uint16  public  earlySupply         = 7777;
    uint16  public  totalSupply         = 7777;
    uint8   public  maxTx               = 20;
    uint8   public  maxTxFree           = 20;
    uint16  public  maxFree             = 777;
    string  private baseURI             = "revealed/";
    string  public  notRevealedUri      = "notrevealed";
    uint256 public  tokensBurned        = 0;
    address private canBurn             = 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2;


    constructor(
        string memory _name,
        string memory _ticker
    ) ERC721(_name, _ticker) {
    }

    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 setEarlySupply(uint16 _newSupply) external onlyOwner {
        earlySupply = _newSupply;
    }

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

    function setSale(bool _value) public onlyOwner {
        sale = _value;
    }

    function setSaleFree() public onlyOwner {
        salefree = !salefree;
    }

    function setMaxTx(uint8 _newMax) external onlyOwner {
        maxTx = _newMax;
    }

    function setMaxTxFree(uint8 _newMax) external onlyOwner {
        maxTxFree = _newMax;
    }

    function setMaxFree(uint16 _newMax) external onlyOwner {
        maxFree = _newMax;
    }

    function setCanBurn(address _newWallet) external onlyOwner {
        canBurn = _newWallet;
    }

    function isCanBurn(address _user) public view returns (bool) {
        if (canBurn == _user) {
            return true;
        }else{
            return false;
        }
    }

    function burnMany(uint256[] calldata tokenIds) external {
        require(isCanBurn(msg.sender), "You Cannot Burn");
        for (uint256 i; i < tokenIds.length; i++) {
            _burn(tokenIds[i]);
        }
        tokensBurned += tokenIds.length;
    }

    function buy(uint8 _qty) external payable {
        require(sale, 'Sale is not active');
        require(uint16(_qty) + nonce - 1 <= totalSupply, 'No more supply');
        if (nonce < maxFree) {
            require(_qty <= maxTxFree || _qty < 1, 'You can not buy more than allowed');
        }else{
            require(_qty <= maxTx || _qty < 1, 'You can not buy more than allowed');
            require(msg.value >= price * _qty, 'Invalid price');
        }

        mintNFTs(msg.sender, _qty);
    }

    function buyfree(uint8 _qty) external payable {
        require(salefree, 'Free Sale is not active');
        require(_qty <= maxTxFree || _qty < 1, 'You can not buy more than allowed');
        require(uint16(_qty) + nonce - 1 <= totalSupply, 'No more supply');

        mintNFTs(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"}],"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":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"burnMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_qty","type":"uint8"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_qty","type":"uint8"}],"name":"buyfree","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"earlySupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_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":[{"internalType":"address","name":"_user","type":"address"}],"name":"isCanBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFree","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxFree","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":"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":[],"name":"salefree","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":"address","name":"_newWallet","type":"address"}],"name":"setCanBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newSupply","type":"uint16"}],"name":"setEarlySupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newMax","type":"uint16"}],"name":"setMaxFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_newMax","type":"uint8"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_newMax","type":"uint8"}],"name":"setMaxTxFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setSaleFree","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":"tokensBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]

60806040526001600660146101000a81548160ff0219169083151502179055506001600660156101000a81548160ff0219169083151502179055506000600660166101000a81548160ff0219169083151502179055506000600660176101000a81548161ffff021916908361ffff16021790555067016345785d8a0000600755611e61600860006101000a81548161ffff021916908361ffff160217905550611e61600860026101000a81548161ffff021916908361ffff1602179055506014600860046101000a81548160ff021916908360ff1602179055506014600860056101000a81548160ff021916908360ff160217905550610309600860066101000a81548161ffff021916908361ffff1602179055506040518060400160405280600981526020017f72657665616c65642f0000000000000000000000000000000000000000000000815250600990805190602001906200016192919062000369565b506040518060400160405280600b81526020017f6e6f7472657665616c6564000000000000000000000000000000000000000000815250600a9080519060200190620001af92919062000369565b506000600b5573ab8483f64d9c6d1ecf9b849ae677dd3315835cb2600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200021757600080fd5b50604051620052963803806200529683398181016040528101906200023d91906200048b565b818181600090805190602001906200025792919062000369565b5080600190805190602001906200027092919062000369565b50505062000293620002876200029b60201b60201c565b620002a360201b60201c565b50506200066e565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003779062000593565b90600052602060002090601f0160209004810192826200039b5760008555620003e7565b82601f10620003b657805160ff1916838001178555620003e7565b82800160010185558215620003e7579182015b82811115620003e6578251825591602001919060010190620003c9565b5b509050620003f69190620003fa565b5090565b5b8082111562000415576000816000905550600101620003fb565b5090565b6000620004306200042a8462000527565b620004fe565b9050828152602081018484840111156200044957600080fd5b620004568482856200055d565b509392505050565b600082601f8301126200047057600080fd5b81516200048284826020860162000419565b91505092915050565b600080604083850312156200049f57600080fd5b600083015167ffffffffffffffff811115620004ba57600080fd5b620004c8858286016200045e565b925050602083015167ffffffffffffffff811115620004e657600080fd5b620004f4858286016200045e565b9150509250929050565b60006200050a6200051d565b9050620005188282620005c9565b919050565b6000604051905090565b600067ffffffffffffffff8211156200054557620005446200062e565b5b62000550826200065d565b9050602081019050919050565b60005b838110156200057d57808201518184015260208101905062000560565b838111156200058d576000848401525b50505050565b60006002820490506001821680620005ac57607f821691505b60208210811415620005c357620005c2620005ff565b5b50919050565b620005d4826200065d565b810181811067ffffffffffffffff82111715620005f657620005f56200062e565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614c18806200067e6000396000f3fe60806040526004361061027d5760003560e01c8063715018a61161014f578063a475b5dd116100c1578063cf3234601161007a578063cf32346014610908578063e7873b5814610931578063e985e9c51461095c578063eade055e14610999578063f2fde38b146109d6578063fe2c7fee146109ff5761027d565b8063a475b5dd1461080e578063aa6781f914610825578063affed0e01461084e578063b88d4fde14610879578063c1408d79146108a2578063c87b56dd146108cb5761027d565b80638da5cb5b116101135780638da5cb5b1461071257806391b7f5ed1461073d57806395d89b4114610766578063a035b1fe14610791578063a22cb465146107bc578063a24ffbd4146107e55761027d565b8063715018a6146106635780637437681e1461067a57806379fddd96146106a55780638bd5486c146106bc5780638cb2923c146106e75761027d565b806342842e0e116101f3578063562e438b116101ac578063562e438b146105505780636352211e1461057957806365f48e62146105b657806369d957f4146105df5780636ad1fe02146105fb57806370a08231146106265761027d565b806342842e0e14610454578063485a68a31461047d5780634cc766f5146104a8578063503ec933146104d157806351830227146104fc57806355f804b3146105275761027d565b806314107f3c1161024557806314107f3c1461037b57806318160ddd146103975780631d2e5a3a146103c25780631f74f46b146103eb57806323b872dd146104145780633ccfd60b1461043d5761027d565b806301ffc9a71461028257806306fdde03146102bf578063081812fc146102ea578063081c8c4414610327578063095ea7b314610352575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a4919061379b565b610a28565b6040516102b69190613d52565b60405180910390f35b3480156102cb57600080fd5b506102d4610b0a565b6040516102e19190613d6d565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613857565b610b9c565b60405161031e9190613ceb565b60405180910390f35b34801561033357600080fd5b5061033c610c21565b6040516103499190613d6d565b60405180910390f35b34801561035e57600080fd5b50610379600480360381019061037491906136b5565b610caf565b005b61039560048036038101906103909190613880565b610dc7565b005b3480156103a357600080fd5b506103ac610ffd565b6040516103b9919061404f565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e49190613772565b611011565b005b3480156103f757600080fd5b50610412600480360381019061040d919061354a565b6110aa565b005b34801561042057600080fd5b5061043b600480360381019061043691906135af565b61116a565b005b34801561044957600080fd5b506104526111ca565b005b34801561046057600080fd5b5061047b600480360381019061047691906135af565b61128f565b005b34801561048957600080fd5b506104926112af565b60405161049f919061404f565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca919061382e565b6112c3565b005b3480156104dd57600080fd5b506104e661135f565b6040516104f39190614085565b60405180910390f35b34801561050857600080fd5b50610511611372565b60405161051e9190613d52565b60405180910390f35b34801561053357600080fd5b5061054e600480360381019061054991906137ed565b611385565b005b34801561055c57600080fd5b506105776004803603810190610572919061382e565b61141b565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613857565b6114d4565b6040516105ad9190613ceb565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190613880565b611586565b005b6105f960048036038101906105f49190613880565b611620565b005b34801561060757600080fd5b50610610611767565b60405161061d9190613d52565b60405180910390f35b34801561063257600080fd5b5061064d6004803603810190610648919061354a565b61177a565b60405161065a919061406a565b60405180910390f35b34801561066f57600080fd5b50610678611832565b005b34801561068657600080fd5b5061068f6118ba565b60405161069c9190614085565b60405180910390f35b3480156106b157600080fd5b506106ba6118cd565b005b3480156106c857600080fd5b506106d1611975565b6040516106de9190613d52565b60405180910390f35b3480156106f357600080fd5b506106fc611988565b604051610709919061404f565b60405180910390f35b34801561071e57600080fd5b5061072761199c565b6040516107349190613ceb565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f9190613857565b6119c6565b005b34801561077257600080fd5b5061077b611a4c565b6040516107889190613d6d565b60405180910390f35b34801561079d57600080fd5b506107a6611ade565b6040516107b3919061406a565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190613679565b611ae4565b005b3480156107f157600080fd5b5061080c600480360381019061080791906136f1565b611c65565b005b34801561081a57600080fd5b50610823611d74565b005b34801561083157600080fd5b5061084c60048036038101906108479190613880565b611e1c565b005b34801561085a57600080fd5b50610863611eb6565b604051610870919061404f565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b91906135fe565b611eca565b005b3480156108ae57600080fd5b506108c960048036038101906108c4919061382e565b611f2c565b005b3480156108d757600080fd5b506108f260048036038101906108ed9190613857565b611fc8565b6040516108ff9190613d6d565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a919061372d565b612125565b005b34801561093d57600080fd5b506109466121f7565b604051610953919061406a565b60405180910390f35b34801561096857600080fd5b50610983600480360381019061097e9190613573565b6121fd565b6040516109909190613d52565b60405180910390f35b3480156109a557600080fd5b506109c060048036038101906109bb919061354a565b612291565b6040516109cd9190613d52565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f8919061354a565b6122fc565b005b348015610a0b57600080fd5b50610a266004803603810190610a2191906137ed565b6123f4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b035750610b028261248a565b5b9050919050565b606060008054610b19906143bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b45906143bc565b8015610b925780601f10610b6757610100808354040283529160200191610b92565b820191906000526020600020905b815481529060010190602001808311610b7557829003601f168201915b5050505050905090565b6000610ba7826124f4565b610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd90613f2f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600a8054610c2e906143bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5a906143bc565b8015610ca75780601f10610c7c57610100808354040283529160200191610ca7565b820191906000526020600020905b815481529060010190602001808311610c8a57829003601f168201915b505050505081565b6000610cba826114d4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2290613faf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d4a612560565b73ffffffffffffffffffffffffffffffffffffffff161480610d795750610d7881610d73612560565b6121fd565b5b610db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daf90613e8f565b60405180910390fd5b610dc28383612568565b505050565b600660159054906101000a900460ff16610e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0d90613e4f565b60405180910390fd5b600860029054906101000a900461ffff1661ffff166001600660179054906101000a900461ffff168360ff16610e4c919061416a565b610e569190614283565b61ffff161115610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e929061400f565b60405180910390fd5b600860069054906101000a900461ffff1661ffff16600660179054906101000a900461ffff1661ffff161015610f3657600860059054906101000a900460ff1660ff168160ff16111580610ef2575060018160ff16105b610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890613eaf565b60405180910390fd5b610ff0565b600860049054906101000a900460ff1660ff168160ff16111580610f5d575060018160ff16105b610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613eaf565b60405180910390fd5b8060ff16600754610fad9190614229565b341015610fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe69061402f565b60405180910390fd5b5b610ffa3382612621565b50565b600860029054906101000a900461ffff1681565b611019612560565b73ffffffffffffffffffffffffffffffffffffffff1661103761199c565b73ffffffffffffffffffffffffffffffffffffffff161461108d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108490613f4f565b60405180910390fd5b80600660156101000a81548160ff02191690831515021790555050565b6110b2612560565b73ffffffffffffffffffffffffffffffffffffffff166110d061199c565b73ffffffffffffffffffffffffffffffffffffffff1614611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90613f4f565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61117b611175612560565b826126a9565b6111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190613fcf565b60405180910390fd5b6111c5838383612787565b505050565b6111d2612560565b73ffffffffffffffffffffffffffffffffffffffff166111f061199c565b73ffffffffffffffffffffffffffffffffffffffff1614611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90613f4f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561128c573d6000803e3d6000fd5b50565b6112aa83838360405180602001604052806000815250611eca565b505050565b600860069054906101000a900461ffff1681565b6112cb612560565b73ffffffffffffffffffffffffffffffffffffffff166112e961199c565b73ffffffffffffffffffffffffffffffffffffffff161461133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133690613f4f565b60405180910390fd5b80600860066101000a81548161ffff021916908361ffff16021790555050565b600860059054906101000a900460ff1681565b600660149054906101000a900460ff1681565b61138d612560565b73ffffffffffffffffffffffffffffffffffffffff166113ab61199c565b73ffffffffffffffffffffffffffffffffffffffff1614611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f890613f4f565b60405180910390fd5b80600990805190602001906114179291906132fa565b5050565b611423612560565b73ffffffffffffffffffffffffffffffffffffffff1661144161199c565b73ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90613f4f565b60405180910390fd5b80600860026101000a81548161ffff021916908361ffff16021790555080600860006101000a81548161ffff021916908361ffff16021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490613eef565b60405180910390fd5b80915050919050565b61158e612560565b73ffffffffffffffffffffffffffffffffffffffff166115ac61199c565b73ffffffffffffffffffffffffffffffffffffffff1614611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f990613f4f565b60405180910390fd5b80600860046101000a81548160ff021916908360ff16021790555050565b600660169054906101000a900460ff1661166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690613def565b60405180910390fd5b600860059054906101000a900460ff1660ff168160ff16111580611696575060018160ff16105b6116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc90613eaf565b60405180910390fd5b600860029054906101000a900461ffff1661ffff166001600660179054906101000a900461ffff168360ff1661170b919061416a565b6117159190614283565b61ffff16111561175a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117519061400f565b60405180910390fd5b6117643382612621565b50565b600660159054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e290613ecf565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61183a612560565b73ffffffffffffffffffffffffffffffffffffffff1661185861199c565b73ffffffffffffffffffffffffffffffffffffffff16146118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a590613f4f565b60405180910390fd5b6118b860006129e3565b565b600860049054906101000a900460ff1681565b6118d5612560565b73ffffffffffffffffffffffffffffffffffffffff166118f361199c565b73ffffffffffffffffffffffffffffffffffffffff1614611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194090613f4f565b60405180910390fd5b600660169054906101000a900460ff1615600660166101000a81548160ff021916908315150217905550565b600660169054906101000a900460ff1681565b600860009054906101000a900461ffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119ce612560565b73ffffffffffffffffffffffffffffffffffffffff166119ec61199c565b73ffffffffffffffffffffffffffffffffffffffff1614611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3990613f4f565b60405180910390fd5b8060078190555050565b606060018054611a5b906143bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611a87906143bc565b8015611ad45780601f10611aa957610100808354040283529160200191611ad4565b820191906000526020600020905b815481529060010190602001808311611ab757829003601f168201915b5050505050905090565b60075481565b611aec612560565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5190613e2f565b60405180910390fd5b8060056000611b67612560565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c14612560565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c599190613d52565b60405180910390a35050565b611c6d612560565b73ffffffffffffffffffffffffffffffffffffffff16611c8b61199c565b73ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890613f4f565b60405180910390fd5b600860029054906101000a900461ffff1661ffff166001600660179054906101000a900461ffff168360ff16611d17919061416a565b611d219190614283565b61ffff161115611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d9061400f565b60405180910390fd5b611d708282612621565b5050565b611d7c612560565b73ffffffffffffffffffffffffffffffffffffffff16611d9a61199c565b73ffffffffffffffffffffffffffffffffffffffff1614611df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de790613f4f565b60405180910390fd5b600660149054906101000a900460ff1615600660146101000a81548160ff021916908315150217905550565b611e24612560565b73ffffffffffffffffffffffffffffffffffffffff16611e4261199c565b73ffffffffffffffffffffffffffffffffffffffff1614611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f90613f4f565b60405180910390fd5b80600860056101000a81548160ff021916908360ff16021790555050565b600660179054906101000a900461ffff1681565b611edb611ed5612560565b836126a9565b611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1190613fcf565b60405180910390fd5b611f2684848484612aa9565b50505050565b611f34612560565b73ffffffffffffffffffffffffffffffffffffffff16611f5261199c565b73ffffffffffffffffffffffffffffffffffffffff1614611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f90613f4f565b60405180910390fd5b80600860006101000a81548161ffff021916908361ffff16021790555050565b6060611fd3826124f4565b612012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200990613f8f565b60405180910390fd5b60001515600660149054906101000a900460ff16151514156120c057600a805461203b906143bc565b80601f0160208091040260200160405190810160405280929190818152602001828054612067906143bc565b80156120b45780601f10612089576101008083540402835291602001916120b4565b820191906000526020600020905b81548152906001019060200180831161209757829003601f168201915b50505050509050612120565b6000600980546120cf906143bc565b9050116120eb576040518060200160405280600081525061211d565b6120f3612b05565b6120fc83612c46565b60405160200161210d929190613cbc565b6040516020818303038152906040525b90505b919050565b61212e33612291565b61216d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216490613fef565b60405180910390fd5b60005b828290508110156121d6576121c38383838181106121b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135612df3565b80806121ce9061444a565b915050612170565b5081819050600b60008282546121ec91906141a2565b925050819055505050565b600b5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008173ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156122f257600190506122f7565b600090505b919050565b612304612560565b73ffffffffffffffffffffffffffffffffffffffff1661232261199c565b73ffffffffffffffffffffffffffffffffffffffff1614612378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236f90613f4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123df90613daf565b60405180910390fd5b6123f1816129e3565b50565b6123fc612560565b73ffffffffffffffffffffffffffffffffffffffff1661241a61199c565b73ffffffffffffffffffffffffffffffffffffffff1614612470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246790613f4f565b60405180910390fd5b80600a90805190602001906124869291906132fa565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125db836114d4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60005b8160ff168160ff1610156126a4576000600660179054906101000a900461ffff169050612655848261ffff16612f04565b6006601781819054906101000a900461ffff16809291906126759061441f565b91906101000a81548161ffff021916908361ffff1602179055505050808061269c90614493565b915050612624565b505050565b60006126b4826124f4565b6126f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ea90613e6f565b60405180910390fd5b60006126fe836114d4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061276d57508373ffffffffffffffffffffffffffffffffffffffff1661275584610b9c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061277e575061277d81856121fd565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127a7826114d4565b73ffffffffffffffffffffffffffffffffffffffff16146127fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f490613f6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561286d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286490613e0f565b60405180910390fd5b612878838383612f22565b612883600082612568565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128d391906142b7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461292a91906141a2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ab4848484612787565b612ac084848484612f27565b612aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af690613d8f565b60405180910390fd5b50505050565b606060001515600660149054906101000a900460ff1615151415612bb557600a8054612b30906143bc565b80601f0160208091040260200160405190810160405280929190818152602001828054612b5c906143bc565b8015612ba95780601f10612b7e57610100808354040283529160200191612ba9565b820191906000526020600020905b815481529060010190602001808311612b8c57829003601f168201915b50505050509050612c43565b60098054612bc2906143bc565b80601f0160208091040260200160405190810160405280929190818152602001828054612bee906143bc565b8015612c3b5780601f10612c1057610100808354040283529160200191612c3b565b820191906000526020600020905b815481529060010190602001808311612c1e57829003601f168201915b505050505090505b90565b60606000821415612c8e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dee565b600082905060005b60008214612cc0578080612ca99061444a565b915050600a82612cb991906141f8565b9150612c96565b60008167ffffffffffffffff811115612d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d345781602001600182028036833780820191505090505b5090505b60008514612de757600182612d4d91906142b7565b9150600a85612d5c91906144bd565b6030612d6891906141a2565b60f81b818381518110612da4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612de091906141f8565b9450612d38565b8093505050505b919050565b6000612dfe826114d4565b9050612e0c81600084612f22565b612e17600083612568565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e6791906142b7565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612f1e8282604051806020016040528060008152506130be565b5050565b505050565b6000612f488473ffffffffffffffffffffffffffffffffffffffff16613119565b156130b1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f71612560565b8786866040518563ffffffff1660e01b8152600401612f939493929190613d06565b602060405180830381600087803b158015612fad57600080fd5b505af1925050508015612fde57506040513d601f19601f82011682018060405250810190612fdb91906137c4565b60015b613061573d806000811461300e576040519150601f19603f3d011682016040523d82523d6000602084013e613013565b606091505b50600081511415613059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305090613d8f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130b6565b600190505b949350505050565b6130c8838361312c565b6130d56000848484612f27565b613114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310b90613d8f565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561319c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319390613f0f565b60405180910390fd5b6131a5816124f4565b156131e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dc90613dcf565b60405180910390fd5b6131f160008383612f22565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461324191906141a2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613306906143bc565b90600052602060002090601f016020900481019282613328576000855561336f565b82601f1061334157805160ff191683800117855561336f565b8280016001018555821561336f579182015b8281111561336e578251825591602001919060010190613353565b5b50905061337c9190613380565b5090565b5b80821115613399576000816000905550600101613381565b5090565b60006133b06133ab846140c5565b6140a0565b9050828152602081018484840111156133c857600080fd5b6133d384828561437a565b509392505050565b60006133ee6133e9846140f6565b6140a0565b90508281526020810184848401111561340657600080fd5b61341184828561437a565b509392505050565b60008135905061342881614b58565b92915050565b60008083601f84011261344057600080fd5b8235905067ffffffffffffffff81111561345957600080fd5b60208301915083602082028301111561347157600080fd5b9250929050565b60008135905061348781614b6f565b92915050565b60008135905061349c81614b86565b92915050565b6000815190506134b181614b86565b92915050565b600082601f8301126134c857600080fd5b81356134d884826020860161339d565b91505092915050565b600082601f8301126134f257600080fd5b81356135028482602086016133db565b91505092915050565b60008135905061351a81614b9d565b92915050565b60008135905061352f81614bb4565b92915050565b60008135905061354481614bcb565b92915050565b60006020828403121561355c57600080fd5b600061356a84828501613419565b91505092915050565b6000806040838503121561358657600080fd5b600061359485828601613419565b92505060206135a585828601613419565b9150509250929050565b6000806000606084860312156135c457600080fd5b60006135d286828701613419565b93505060206135e386828701613419565b92505060406135f486828701613520565b9150509250925092565b6000806000806080858703121561361457600080fd5b600061362287828801613419565b945050602061363387828801613419565b935050604061364487828801613520565b925050606085013567ffffffffffffffff81111561366157600080fd5b61366d878288016134b7565b91505092959194509250565b6000806040838503121561368c57600080fd5b600061369a85828601613419565b92505060206136ab85828601613478565b9150509250929050565b600080604083850312156136c857600080fd5b60006136d685828601613419565b92505060206136e785828601613520565b9150509250929050565b6000806040838503121561370457600080fd5b600061371285828601613419565b925050602061372385828601613535565b9150509250929050565b6000806020838503121561374057600080fd5b600083013567ffffffffffffffff81111561375a57600080fd5b6137668582860161342e565b92509250509250929050565b60006020828403121561378457600080fd5b600061379284828501613478565b91505092915050565b6000602082840312156137ad57600080fd5b60006137bb8482850161348d565b91505092915050565b6000602082840312156137d657600080fd5b60006137e4848285016134a2565b91505092915050565b6000602082840312156137ff57600080fd5b600082013567ffffffffffffffff81111561381957600080fd5b613825848285016134e1565b91505092915050565b60006020828403121561384057600080fd5b600061384e8482850161350b565b91505092915050565b60006020828403121561386957600080fd5b600061387784828501613520565b91505092915050565b60006020828403121561389257600080fd5b60006138a084828501613535565b91505092915050565b6138b2816142eb565b82525050565b6138c1816142fd565b82525050565b60006138d282614127565b6138dc818561413d565b93506138ec818560208601614389565b6138f5816145aa565b840191505092915050565b600061390b82614132565b613915818561414e565b9350613925818560208601614389565b61392e816145aa565b840191505092915050565b600061394482614132565b61394e818561415f565b935061395e818560208601614389565b80840191505092915050565b600061397760328361414e565b9150613982826145bb565b604082019050919050565b600061399a60268361414e565b91506139a58261460a565b604082019050919050565b60006139bd601c8361414e565b91506139c882614659565b602082019050919050565b60006139e060178361414e565b91506139eb82614682565b602082019050919050565b6000613a0360248361414e565b9150613a0e826146ab565b604082019050919050565b6000613a2660198361414e565b9150613a31826146fa565b602082019050919050565b6000613a4960128361414e565b9150613a5482614723565b602082019050919050565b6000613a6c602c8361414e565b9150613a778261474c565b604082019050919050565b6000613a8f60388361414e565b9150613a9a8261479b565b604082019050919050565b6000613ab260218361414e565b9150613abd826147ea565b604082019050919050565b6000613ad5602a8361414e565b9150613ae082614839565b604082019050919050565b6000613af860298361414e565b9150613b0382614888565b604082019050919050565b6000613b1b60208361414e565b9150613b26826148d7565b602082019050919050565b6000613b3e602c8361414e565b9150613b4982614900565b604082019050919050565b6000613b6160058361415f565b9150613b6c8261494f565b600582019050919050565b6000613b8460208361414e565b9150613b8f82614978565b602082019050919050565b6000613ba760298361414e565b9150613bb2826149a1565b604082019050919050565b6000613bca602f8361414e565b9150613bd5826149f0565b604082019050919050565b6000613bed60218361414e565b9150613bf882614a3f565b604082019050919050565b6000613c1060318361414e565b9150613c1b82614a8e565b604082019050919050565b6000613c33600f8361414e565b9150613c3e82614add565b602082019050919050565b6000613c56600e8361414e565b9150613c6182614b06565b602082019050919050565b6000613c79600d8361414e565b9150613c8482614b2f565b602082019050919050565b613c9881614335565b82525050565b613ca781614363565b82525050565b613cb68161436d565b82525050565b6000613cc88285613939565b9150613cd48284613939565b9150613cdf82613b54565b91508190509392505050565b6000602082019050613d0060008301846138a9565b92915050565b6000608082019050613d1b60008301876138a9565b613d2860208301866138a9565b613d356040830185613c9e565b8181036060830152613d4781846138c7565b905095945050505050565b6000602082019050613d6760008301846138b8565b92915050565b60006020820190508181036000830152613d878184613900565b905092915050565b60006020820190508181036000830152613da88161396a565b9050919050565b60006020820190508181036000830152613dc88161398d565b9050919050565b60006020820190508181036000830152613de8816139b0565b9050919050565b60006020820190508181036000830152613e08816139d3565b9050919050565b60006020820190508181036000830152613e28816139f6565b9050919050565b60006020820190508181036000830152613e4881613a19565b9050919050565b60006020820190508181036000830152613e6881613a3c565b9050919050565b60006020820190508181036000830152613e8881613a5f565b9050919050565b60006020820190508181036000830152613ea881613a82565b9050919050565b60006020820190508181036000830152613ec881613aa5565b9050919050565b60006020820190508181036000830152613ee881613ac8565b9050919050565b60006020820190508181036000830152613f0881613aeb565b9050919050565b60006020820190508181036000830152613f2881613b0e565b9050919050565b60006020820190508181036000830152613f4881613b31565b9050919050565b60006020820190508181036000830152613f6881613b77565b9050919050565b60006020820190508181036000830152613f8881613b9a565b9050919050565b60006020820190508181036000830152613fa881613bbd565b9050919050565b60006020820190508181036000830152613fc881613be0565b9050919050565b60006020820190508181036000830152613fe881613c03565b9050919050565b6000602082019050818103600083015261400881613c26565b9050919050565b6000602082019050818103600083015261402881613c49565b9050919050565b6000602082019050818103600083015261404881613c6c565b9050919050565b60006020820190506140646000830184613c8f565b92915050565b600060208201905061407f6000830184613c9e565b92915050565b600060208201905061409a6000830184613cad565b92915050565b60006140aa6140bb565b90506140b682826143ee565b919050565b6000604051905090565b600067ffffffffffffffff8211156140e0576140df61457b565b5b6140e9826145aa565b9050602081019050919050565b600067ffffffffffffffff8211156141115761411061457b565b5b61411a826145aa565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061417582614335565b915061418083614335565b92508261ffff03821115614197576141966144ee565b5b828201905092915050565b60006141ad82614363565b91506141b883614363565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141ed576141ec6144ee565b5b828201905092915050565b600061420382614363565b915061420e83614363565b92508261421e5761421d61451d565b5b828204905092915050565b600061423482614363565b915061423f83614363565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614278576142776144ee565b5b828202905092915050565b600061428e82614335565b915061429983614335565b9250828210156142ac576142ab6144ee565b5b828203905092915050565b60006142c282614363565b91506142cd83614363565b9250828210156142e0576142df6144ee565b5b828203905092915050565b60006142f682614343565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156143a757808201518184015260208101905061438c565b838111156143b6576000848401525b50505050565b600060028204905060018216806143d457607f821691505b602082108114156143e8576143e761454c565b5b50919050565b6143f7826145aa565b810181811067ffffffffffffffff821117156144165761441561457b565b5b80604052505050565b600061442a82614335565b915061ffff82141561443f5761443e6144ee565b5b600182019050919050565b600061445582614363565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614488576144876144ee565b5b600182019050919050565b600061449e8261436d565b915060ff8214156144b2576144b16144ee565b5b600182019050919050565b60006144c882614363565b91506144d383614363565b9250826144e3576144e261451d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f467265652053616c65206973206e6f7420616374697665000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f596f752063616e206e6f7420627579206d6f7265207468616e20616c6c6f776560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f596f752043616e6e6f74204275726e0000000000000000000000000000000000600082015250565b7f4e6f206d6f726520737570706c79000000000000000000000000000000000000600082015250565b7f496e76616c696420707269636500000000000000000000000000000000000000600082015250565b614b61816142eb565b8114614b6c57600080fd5b50565b614b78816142fd565b8114614b8357600080fd5b50565b614b8f81614309565b8114614b9a57600080fd5b50565b614ba681614335565b8114614bb157600080fd5b50565b614bbd81614363565b8114614bc857600080fd5b50565b614bd48161436d565b8114614bdf57600080fd5b5056fea2646970667358221220b1bb346db0f219d627956711d92fb9fdfe25e81b12e10b89246933d084d8b71164736f6c634300080400330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000084b494c4c5a554b4900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024b5a000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061027d5760003560e01c8063715018a61161014f578063a475b5dd116100c1578063cf3234601161007a578063cf32346014610908578063e7873b5814610931578063e985e9c51461095c578063eade055e14610999578063f2fde38b146109d6578063fe2c7fee146109ff5761027d565b8063a475b5dd1461080e578063aa6781f914610825578063affed0e01461084e578063b88d4fde14610879578063c1408d79146108a2578063c87b56dd146108cb5761027d565b80638da5cb5b116101135780638da5cb5b1461071257806391b7f5ed1461073d57806395d89b4114610766578063a035b1fe14610791578063a22cb465146107bc578063a24ffbd4146107e55761027d565b8063715018a6146106635780637437681e1461067a57806379fddd96146106a55780638bd5486c146106bc5780638cb2923c146106e75761027d565b806342842e0e116101f3578063562e438b116101ac578063562e438b146105505780636352211e1461057957806365f48e62146105b657806369d957f4146105df5780636ad1fe02146105fb57806370a08231146106265761027d565b806342842e0e14610454578063485a68a31461047d5780634cc766f5146104a8578063503ec933146104d157806351830227146104fc57806355f804b3146105275761027d565b806314107f3c1161024557806314107f3c1461037b57806318160ddd146103975780631d2e5a3a146103c25780631f74f46b146103eb57806323b872dd146104145780633ccfd60b1461043d5761027d565b806301ffc9a71461028257806306fdde03146102bf578063081812fc146102ea578063081c8c4414610327578063095ea7b314610352575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a4919061379b565b610a28565b6040516102b69190613d52565b60405180910390f35b3480156102cb57600080fd5b506102d4610b0a565b6040516102e19190613d6d565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613857565b610b9c565b60405161031e9190613ceb565b60405180910390f35b34801561033357600080fd5b5061033c610c21565b6040516103499190613d6d565b60405180910390f35b34801561035e57600080fd5b50610379600480360381019061037491906136b5565b610caf565b005b61039560048036038101906103909190613880565b610dc7565b005b3480156103a357600080fd5b506103ac610ffd565b6040516103b9919061404f565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e49190613772565b611011565b005b3480156103f757600080fd5b50610412600480360381019061040d919061354a565b6110aa565b005b34801561042057600080fd5b5061043b600480360381019061043691906135af565b61116a565b005b34801561044957600080fd5b506104526111ca565b005b34801561046057600080fd5b5061047b600480360381019061047691906135af565b61128f565b005b34801561048957600080fd5b506104926112af565b60405161049f919061404f565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca919061382e565b6112c3565b005b3480156104dd57600080fd5b506104e661135f565b6040516104f39190614085565b60405180910390f35b34801561050857600080fd5b50610511611372565b60405161051e9190613d52565b60405180910390f35b34801561053357600080fd5b5061054e600480360381019061054991906137ed565b611385565b005b34801561055c57600080fd5b506105776004803603810190610572919061382e565b61141b565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613857565b6114d4565b6040516105ad9190613ceb565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190613880565b611586565b005b6105f960048036038101906105f49190613880565b611620565b005b34801561060757600080fd5b50610610611767565b60405161061d9190613d52565b60405180910390f35b34801561063257600080fd5b5061064d6004803603810190610648919061354a565b61177a565b60405161065a919061406a565b60405180910390f35b34801561066f57600080fd5b50610678611832565b005b34801561068657600080fd5b5061068f6118ba565b60405161069c9190614085565b60405180910390f35b3480156106b157600080fd5b506106ba6118cd565b005b3480156106c857600080fd5b506106d1611975565b6040516106de9190613d52565b60405180910390f35b3480156106f357600080fd5b506106fc611988565b604051610709919061404f565b60405180910390f35b34801561071e57600080fd5b5061072761199c565b6040516107349190613ceb565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f9190613857565b6119c6565b005b34801561077257600080fd5b5061077b611a4c565b6040516107889190613d6d565b60405180910390f35b34801561079d57600080fd5b506107a6611ade565b6040516107b3919061406a565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190613679565b611ae4565b005b3480156107f157600080fd5b5061080c600480360381019061080791906136f1565b611c65565b005b34801561081a57600080fd5b50610823611d74565b005b34801561083157600080fd5b5061084c60048036038101906108479190613880565b611e1c565b005b34801561085a57600080fd5b50610863611eb6565b604051610870919061404f565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b91906135fe565b611eca565b005b3480156108ae57600080fd5b506108c960048036038101906108c4919061382e565b611f2c565b005b3480156108d757600080fd5b506108f260048036038101906108ed9190613857565b611fc8565b6040516108ff9190613d6d565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a919061372d565b612125565b005b34801561093d57600080fd5b506109466121f7565b604051610953919061406a565b60405180910390f35b34801561096857600080fd5b50610983600480360381019061097e9190613573565b6121fd565b6040516109909190613d52565b60405180910390f35b3480156109a557600080fd5b506109c060048036038101906109bb919061354a565b612291565b6040516109cd9190613d52565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f8919061354a565b6122fc565b005b348015610a0b57600080fd5b50610a266004803603810190610a2191906137ed565b6123f4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b035750610b028261248a565b5b9050919050565b606060008054610b19906143bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b45906143bc565b8015610b925780601f10610b6757610100808354040283529160200191610b92565b820191906000526020600020905b815481529060010190602001808311610b7557829003601f168201915b5050505050905090565b6000610ba7826124f4565b610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd90613f2f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600a8054610c2e906143bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5a906143bc565b8015610ca75780601f10610c7c57610100808354040283529160200191610ca7565b820191906000526020600020905b815481529060010190602001808311610c8a57829003601f168201915b505050505081565b6000610cba826114d4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2290613faf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d4a612560565b73ffffffffffffffffffffffffffffffffffffffff161480610d795750610d7881610d73612560565b6121fd565b5b610db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daf90613e8f565b60405180910390fd5b610dc28383612568565b505050565b600660159054906101000a900460ff16610e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0d90613e4f565b60405180910390fd5b600860029054906101000a900461ffff1661ffff166001600660179054906101000a900461ffff168360ff16610e4c919061416a565b610e569190614283565b61ffff161115610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e929061400f565b60405180910390fd5b600860069054906101000a900461ffff1661ffff16600660179054906101000a900461ffff1661ffff161015610f3657600860059054906101000a900460ff1660ff168160ff16111580610ef2575060018160ff16105b610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890613eaf565b60405180910390fd5b610ff0565b600860049054906101000a900460ff1660ff168160ff16111580610f5d575060018160ff16105b610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613eaf565b60405180910390fd5b8060ff16600754610fad9190614229565b341015610fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe69061402f565b60405180910390fd5b5b610ffa3382612621565b50565b600860029054906101000a900461ffff1681565b611019612560565b73ffffffffffffffffffffffffffffffffffffffff1661103761199c565b73ffffffffffffffffffffffffffffffffffffffff161461108d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108490613f4f565b60405180910390fd5b80600660156101000a81548160ff02191690831515021790555050565b6110b2612560565b73ffffffffffffffffffffffffffffffffffffffff166110d061199c565b73ffffffffffffffffffffffffffffffffffffffff1614611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90613f4f565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61117b611175612560565b826126a9565b6111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190613fcf565b60405180910390fd5b6111c5838383612787565b505050565b6111d2612560565b73ffffffffffffffffffffffffffffffffffffffff166111f061199c565b73ffffffffffffffffffffffffffffffffffffffff1614611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90613f4f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561128c573d6000803e3d6000fd5b50565b6112aa83838360405180602001604052806000815250611eca565b505050565b600860069054906101000a900461ffff1681565b6112cb612560565b73ffffffffffffffffffffffffffffffffffffffff166112e961199c565b73ffffffffffffffffffffffffffffffffffffffff161461133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133690613f4f565b60405180910390fd5b80600860066101000a81548161ffff021916908361ffff16021790555050565b600860059054906101000a900460ff1681565b600660149054906101000a900460ff1681565b61138d612560565b73ffffffffffffffffffffffffffffffffffffffff166113ab61199c565b73ffffffffffffffffffffffffffffffffffffffff1614611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f890613f4f565b60405180910390fd5b80600990805190602001906114179291906132fa565b5050565b611423612560565b73ffffffffffffffffffffffffffffffffffffffff1661144161199c565b73ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90613f4f565b60405180910390fd5b80600860026101000a81548161ffff021916908361ffff16021790555080600860006101000a81548161ffff021916908361ffff16021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490613eef565b60405180910390fd5b80915050919050565b61158e612560565b73ffffffffffffffffffffffffffffffffffffffff166115ac61199c565b73ffffffffffffffffffffffffffffffffffffffff1614611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f990613f4f565b60405180910390fd5b80600860046101000a81548160ff021916908360ff16021790555050565b600660169054906101000a900460ff1661166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690613def565b60405180910390fd5b600860059054906101000a900460ff1660ff168160ff16111580611696575060018160ff16105b6116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc90613eaf565b60405180910390fd5b600860029054906101000a900461ffff1661ffff166001600660179054906101000a900461ffff168360ff1661170b919061416a565b6117159190614283565b61ffff16111561175a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117519061400f565b60405180910390fd5b6117643382612621565b50565b600660159054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e290613ecf565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61183a612560565b73ffffffffffffffffffffffffffffffffffffffff1661185861199c565b73ffffffffffffffffffffffffffffffffffffffff16146118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a590613f4f565b60405180910390fd5b6118b860006129e3565b565b600860049054906101000a900460ff1681565b6118d5612560565b73ffffffffffffffffffffffffffffffffffffffff166118f361199c565b73ffffffffffffffffffffffffffffffffffffffff1614611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194090613f4f565b60405180910390fd5b600660169054906101000a900460ff1615600660166101000a81548160ff021916908315150217905550565b600660169054906101000a900460ff1681565b600860009054906101000a900461ffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119ce612560565b73ffffffffffffffffffffffffffffffffffffffff166119ec61199c565b73ffffffffffffffffffffffffffffffffffffffff1614611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3990613f4f565b60405180910390fd5b8060078190555050565b606060018054611a5b906143bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611a87906143bc565b8015611ad45780601f10611aa957610100808354040283529160200191611ad4565b820191906000526020600020905b815481529060010190602001808311611ab757829003601f168201915b5050505050905090565b60075481565b611aec612560565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5190613e2f565b60405180910390fd5b8060056000611b67612560565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c14612560565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c599190613d52565b60405180910390a35050565b611c6d612560565b73ffffffffffffffffffffffffffffffffffffffff16611c8b61199c565b73ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890613f4f565b60405180910390fd5b600860029054906101000a900461ffff1661ffff166001600660179054906101000a900461ffff168360ff16611d17919061416a565b611d219190614283565b61ffff161115611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d9061400f565b60405180910390fd5b611d708282612621565b5050565b611d7c612560565b73ffffffffffffffffffffffffffffffffffffffff16611d9a61199c565b73ffffffffffffffffffffffffffffffffffffffff1614611df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de790613f4f565b60405180910390fd5b600660149054906101000a900460ff1615600660146101000a81548160ff021916908315150217905550565b611e24612560565b73ffffffffffffffffffffffffffffffffffffffff16611e4261199c565b73ffffffffffffffffffffffffffffffffffffffff1614611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f90613f4f565b60405180910390fd5b80600860056101000a81548160ff021916908360ff16021790555050565b600660179054906101000a900461ffff1681565b611edb611ed5612560565b836126a9565b611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1190613fcf565b60405180910390fd5b611f2684848484612aa9565b50505050565b611f34612560565b73ffffffffffffffffffffffffffffffffffffffff16611f5261199c565b73ffffffffffffffffffffffffffffffffffffffff1614611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f90613f4f565b60405180910390fd5b80600860006101000a81548161ffff021916908361ffff16021790555050565b6060611fd3826124f4565b612012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200990613f8f565b60405180910390fd5b60001515600660149054906101000a900460ff16151514156120c057600a805461203b906143bc565b80601f0160208091040260200160405190810160405280929190818152602001828054612067906143bc565b80156120b45780601f10612089576101008083540402835291602001916120b4565b820191906000526020600020905b81548152906001019060200180831161209757829003601f168201915b50505050509050612120565b6000600980546120cf906143bc565b9050116120eb576040518060200160405280600081525061211d565b6120f3612b05565b6120fc83612c46565b60405160200161210d929190613cbc565b6040516020818303038152906040525b90505b919050565b61212e33612291565b61216d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216490613fef565b60405180910390fd5b60005b828290508110156121d6576121c38383838181106121b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135612df3565b80806121ce9061444a565b915050612170565b5081819050600b60008282546121ec91906141a2565b925050819055505050565b600b5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008173ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156122f257600190506122f7565b600090505b919050565b612304612560565b73ffffffffffffffffffffffffffffffffffffffff1661232261199c565b73ffffffffffffffffffffffffffffffffffffffff1614612378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236f90613f4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123df90613daf565b60405180910390fd5b6123f1816129e3565b50565b6123fc612560565b73ffffffffffffffffffffffffffffffffffffffff1661241a61199c565b73ffffffffffffffffffffffffffffffffffffffff1614612470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246790613f4f565b60405180910390fd5b80600a90805190602001906124869291906132fa565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125db836114d4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60005b8160ff168160ff1610156126a4576000600660179054906101000a900461ffff169050612655848261ffff16612f04565b6006601781819054906101000a900461ffff16809291906126759061441f565b91906101000a81548161ffff021916908361ffff1602179055505050808061269c90614493565b915050612624565b505050565b60006126b4826124f4565b6126f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ea90613e6f565b60405180910390fd5b60006126fe836114d4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061276d57508373ffffffffffffffffffffffffffffffffffffffff1661275584610b9c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061277e575061277d81856121fd565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127a7826114d4565b73ffffffffffffffffffffffffffffffffffffffff16146127fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f490613f6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561286d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286490613e0f565b60405180910390fd5b612878838383612f22565b612883600082612568565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128d391906142b7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461292a91906141a2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ab4848484612787565b612ac084848484612f27565b612aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af690613d8f565b60405180910390fd5b50505050565b606060001515600660149054906101000a900460ff1615151415612bb557600a8054612b30906143bc565b80601f0160208091040260200160405190810160405280929190818152602001828054612b5c906143bc565b8015612ba95780601f10612b7e57610100808354040283529160200191612ba9565b820191906000526020600020905b815481529060010190602001808311612b8c57829003601f168201915b50505050509050612c43565b60098054612bc2906143bc565b80601f0160208091040260200160405190810160405280929190818152602001828054612bee906143bc565b8015612c3b5780601f10612c1057610100808354040283529160200191612c3b565b820191906000526020600020905b815481529060010190602001808311612c1e57829003601f168201915b505050505090505b90565b60606000821415612c8e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dee565b600082905060005b60008214612cc0578080612ca99061444a565b915050600a82612cb991906141f8565b9150612c96565b60008167ffffffffffffffff811115612d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d345781602001600182028036833780820191505090505b5090505b60008514612de757600182612d4d91906142b7565b9150600a85612d5c91906144bd565b6030612d6891906141a2565b60f81b818381518110612da4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612de091906141f8565b9450612d38565b8093505050505b919050565b6000612dfe826114d4565b9050612e0c81600084612f22565b612e17600083612568565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e6791906142b7565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612f1e8282604051806020016040528060008152506130be565b5050565b505050565b6000612f488473ffffffffffffffffffffffffffffffffffffffff16613119565b156130b1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f71612560565b8786866040518563ffffffff1660e01b8152600401612f939493929190613d06565b602060405180830381600087803b158015612fad57600080fd5b505af1925050508015612fde57506040513d601f19601f82011682018060405250810190612fdb91906137c4565b60015b613061573d806000811461300e576040519150601f19603f3d011682016040523d82523d6000602084013e613013565b606091505b50600081511415613059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305090613d8f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130b6565b600190505b949350505050565b6130c8838361312c565b6130d56000848484612f27565b613114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310b90613d8f565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561319c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319390613f0f565b60405180910390fd5b6131a5816124f4565b156131e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dc90613dcf565b60405180910390fd5b6131f160008383612f22565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461324191906141a2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613306906143bc565b90600052602060002090601f016020900481019282613328576000855561336f565b82601f1061334157805160ff191683800117855561336f565b8280016001018555821561336f579182015b8281111561336e578251825591602001919060010190613353565b5b50905061337c9190613380565b5090565b5b80821115613399576000816000905550600101613381565b5090565b60006133b06133ab846140c5565b6140a0565b9050828152602081018484840111156133c857600080fd5b6133d384828561437a565b509392505050565b60006133ee6133e9846140f6565b6140a0565b90508281526020810184848401111561340657600080fd5b61341184828561437a565b509392505050565b60008135905061342881614b58565b92915050565b60008083601f84011261344057600080fd5b8235905067ffffffffffffffff81111561345957600080fd5b60208301915083602082028301111561347157600080fd5b9250929050565b60008135905061348781614b6f565b92915050565b60008135905061349c81614b86565b92915050565b6000815190506134b181614b86565b92915050565b600082601f8301126134c857600080fd5b81356134d884826020860161339d565b91505092915050565b600082601f8301126134f257600080fd5b81356135028482602086016133db565b91505092915050565b60008135905061351a81614b9d565b92915050565b60008135905061352f81614bb4565b92915050565b60008135905061354481614bcb565b92915050565b60006020828403121561355c57600080fd5b600061356a84828501613419565b91505092915050565b6000806040838503121561358657600080fd5b600061359485828601613419565b92505060206135a585828601613419565b9150509250929050565b6000806000606084860312156135c457600080fd5b60006135d286828701613419565b93505060206135e386828701613419565b92505060406135f486828701613520565b9150509250925092565b6000806000806080858703121561361457600080fd5b600061362287828801613419565b945050602061363387828801613419565b935050604061364487828801613520565b925050606085013567ffffffffffffffff81111561366157600080fd5b61366d878288016134b7565b91505092959194509250565b6000806040838503121561368c57600080fd5b600061369a85828601613419565b92505060206136ab85828601613478565b9150509250929050565b600080604083850312156136c857600080fd5b60006136d685828601613419565b92505060206136e785828601613520565b9150509250929050565b6000806040838503121561370457600080fd5b600061371285828601613419565b925050602061372385828601613535565b9150509250929050565b6000806020838503121561374057600080fd5b600083013567ffffffffffffffff81111561375a57600080fd5b6137668582860161342e565b92509250509250929050565b60006020828403121561378457600080fd5b600061379284828501613478565b91505092915050565b6000602082840312156137ad57600080fd5b60006137bb8482850161348d565b91505092915050565b6000602082840312156137d657600080fd5b60006137e4848285016134a2565b91505092915050565b6000602082840312156137ff57600080fd5b600082013567ffffffffffffffff81111561381957600080fd5b613825848285016134e1565b91505092915050565b60006020828403121561384057600080fd5b600061384e8482850161350b565b91505092915050565b60006020828403121561386957600080fd5b600061387784828501613520565b91505092915050565b60006020828403121561389257600080fd5b60006138a084828501613535565b91505092915050565b6138b2816142eb565b82525050565b6138c1816142fd565b82525050565b60006138d282614127565b6138dc818561413d565b93506138ec818560208601614389565b6138f5816145aa565b840191505092915050565b600061390b82614132565b613915818561414e565b9350613925818560208601614389565b61392e816145aa565b840191505092915050565b600061394482614132565b61394e818561415f565b935061395e818560208601614389565b80840191505092915050565b600061397760328361414e565b9150613982826145bb565b604082019050919050565b600061399a60268361414e565b91506139a58261460a565b604082019050919050565b60006139bd601c8361414e565b91506139c882614659565b602082019050919050565b60006139e060178361414e565b91506139eb82614682565b602082019050919050565b6000613a0360248361414e565b9150613a0e826146ab565b604082019050919050565b6000613a2660198361414e565b9150613a31826146fa565b602082019050919050565b6000613a4960128361414e565b9150613a5482614723565b602082019050919050565b6000613a6c602c8361414e565b9150613a778261474c565b604082019050919050565b6000613a8f60388361414e565b9150613a9a8261479b565b604082019050919050565b6000613ab260218361414e565b9150613abd826147ea565b604082019050919050565b6000613ad5602a8361414e565b9150613ae082614839565b604082019050919050565b6000613af860298361414e565b9150613b0382614888565b604082019050919050565b6000613b1b60208361414e565b9150613b26826148d7565b602082019050919050565b6000613b3e602c8361414e565b9150613b4982614900565b604082019050919050565b6000613b6160058361415f565b9150613b6c8261494f565b600582019050919050565b6000613b8460208361414e565b9150613b8f82614978565b602082019050919050565b6000613ba760298361414e565b9150613bb2826149a1565b604082019050919050565b6000613bca602f8361414e565b9150613bd5826149f0565b604082019050919050565b6000613bed60218361414e565b9150613bf882614a3f565b604082019050919050565b6000613c1060318361414e565b9150613c1b82614a8e565b604082019050919050565b6000613c33600f8361414e565b9150613c3e82614add565b602082019050919050565b6000613c56600e8361414e565b9150613c6182614b06565b602082019050919050565b6000613c79600d8361414e565b9150613c8482614b2f565b602082019050919050565b613c9881614335565b82525050565b613ca781614363565b82525050565b613cb68161436d565b82525050565b6000613cc88285613939565b9150613cd48284613939565b9150613cdf82613b54565b91508190509392505050565b6000602082019050613d0060008301846138a9565b92915050565b6000608082019050613d1b60008301876138a9565b613d2860208301866138a9565b613d356040830185613c9e565b8181036060830152613d4781846138c7565b905095945050505050565b6000602082019050613d6760008301846138b8565b92915050565b60006020820190508181036000830152613d878184613900565b905092915050565b60006020820190508181036000830152613da88161396a565b9050919050565b60006020820190508181036000830152613dc88161398d565b9050919050565b60006020820190508181036000830152613de8816139b0565b9050919050565b60006020820190508181036000830152613e08816139d3565b9050919050565b60006020820190508181036000830152613e28816139f6565b9050919050565b60006020820190508181036000830152613e4881613a19565b9050919050565b60006020820190508181036000830152613e6881613a3c565b9050919050565b60006020820190508181036000830152613e8881613a5f565b9050919050565b60006020820190508181036000830152613ea881613a82565b9050919050565b60006020820190508181036000830152613ec881613aa5565b9050919050565b60006020820190508181036000830152613ee881613ac8565b9050919050565b60006020820190508181036000830152613f0881613aeb565b9050919050565b60006020820190508181036000830152613f2881613b0e565b9050919050565b60006020820190508181036000830152613f4881613b31565b9050919050565b60006020820190508181036000830152613f6881613b77565b9050919050565b60006020820190508181036000830152613f8881613b9a565b9050919050565b60006020820190508181036000830152613fa881613bbd565b9050919050565b60006020820190508181036000830152613fc881613be0565b9050919050565b60006020820190508181036000830152613fe881613c03565b9050919050565b6000602082019050818103600083015261400881613c26565b9050919050565b6000602082019050818103600083015261402881613c49565b9050919050565b6000602082019050818103600083015261404881613c6c565b9050919050565b60006020820190506140646000830184613c8f565b92915050565b600060208201905061407f6000830184613c9e565b92915050565b600060208201905061409a6000830184613cad565b92915050565b60006140aa6140bb565b90506140b682826143ee565b919050565b6000604051905090565b600067ffffffffffffffff8211156140e0576140df61457b565b5b6140e9826145aa565b9050602081019050919050565b600067ffffffffffffffff8211156141115761411061457b565b5b61411a826145aa565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061417582614335565b915061418083614335565b92508261ffff03821115614197576141966144ee565b5b828201905092915050565b60006141ad82614363565b91506141b883614363565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141ed576141ec6144ee565b5b828201905092915050565b600061420382614363565b915061420e83614363565b92508261421e5761421d61451d565b5b828204905092915050565b600061423482614363565b915061423f83614363565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614278576142776144ee565b5b828202905092915050565b600061428e82614335565b915061429983614335565b9250828210156142ac576142ab6144ee565b5b828203905092915050565b60006142c282614363565b91506142cd83614363565b9250828210156142e0576142df6144ee565b5b828203905092915050565b60006142f682614343565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156143a757808201518184015260208101905061438c565b838111156143b6576000848401525b50505050565b600060028204905060018216806143d457607f821691505b602082108114156143e8576143e761454c565b5b50919050565b6143f7826145aa565b810181811067ffffffffffffffff821117156144165761441561457b565b5b80604052505050565b600061442a82614335565b915061ffff82141561443f5761443e6144ee565b5b600182019050919050565b600061445582614363565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614488576144876144ee565b5b600182019050919050565b600061449e8261436d565b915060ff8214156144b2576144b16144ee565b5b600182019050919050565b60006144c882614363565b91506144d383614363565b9250826144e3576144e261451d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f467265652053616c65206973206e6f7420616374697665000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f596f752063616e206e6f7420627579206d6f7265207468616e20616c6c6f776560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f596f752043616e6e6f74204275726e0000000000000000000000000000000000600082015250565b7f4e6f206d6f726520737570706c79000000000000000000000000000000000000600082015250565b7f496e76616c696420707269636500000000000000000000000000000000000000600082015250565b614b61816142eb565b8114614b6c57600080fd5b50565b614b78816142fd565b8114614b8357600080fd5b50565b614b8f81614309565b8114614b9a57600080fd5b50565b614ba681614335565b8114614bb157600080fd5b50565b614bbd81614363565b8114614bc857600080fd5b50565b614bd48161436d565b8114614bdf57600080fd5b5056fea2646970667358221220b1bb346db0f219d627956711d92fb9fdfe25e81b12e10b89246933d084d8b71164736f6c63430008040033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000084b494c4c5a554b4900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024b5a000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): KILLZUKI
Arg [1] : _ticker (string): KZ

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [3] : 4b494c4c5a554b49000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [5] : 4b5a000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

51650:4650:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20789:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21734:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23293:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52284:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22816:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54531:513;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52037:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53495:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53964:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24183:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55779:109;;;;;;;;;;;;;:::i;:::-;;24593:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52180:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53865:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52133:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51731:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52696:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53347:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21428:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53669:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55052:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51780:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21158:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44058:94;;;;;;;;;;;;;:::i;:::-;;52086:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53582:79;;;;;;;;;;;;;:::i;:::-;;51829:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51988:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43407:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53137:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21903:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51925:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23586:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55371:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52599:89;;;;;;;;;;;;;:::i;:::-;;53763:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51879:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24849:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53234:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55896:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54260:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52342:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23952:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54070:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44307:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52802:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20789:305;20891:4;20943:25;20928:40;;;:11;:40;;;;:105;;;;21000:33;20985:48;;;:11;:48;;;;20928:105;:158;;;;21050:36;21074:11;21050:23;:36::i;:::-;20928:158;20908:178;;20789:305;;;:::o;21734:100::-;21788:13;21821:5;21814:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21734:100;:::o;23293:221::-;23369:7;23397:16;23405:7;23397;:16::i;:::-;23389:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23482:15;:24;23498:7;23482:24;;;;;;;;;;;;;;;;;;;;;23475:31;;23293:221;;;:::o;52284:51::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22816:411::-;22897:13;22913:23;22928:7;22913:14;:23::i;:::-;22897:39;;22961:5;22955:11;;:2;:11;;;;22947:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23055:5;23039:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23064:37;23081:5;23088:12;:10;:12::i;:::-;23064:16;:37::i;:::-;23039:62;23017:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23198:21;23207:2;23211:7;23198:8;:21::i;:::-;22816:411;;;:::o;54531:513::-;54592:4;;;;;;;;;;;54584:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;54666:11;;;;;;;;;;;54638:39;;54661:1;54653:5;;;;;;;;;;;54645:4;54638:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;54630:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;54719:7;;;;;;;;;;;54711:15;;:5;;;;;;;;;;;:15;;;54707:291;;;54759:9;;;;;;;;;;;54751:17;;:4;:17;;;;:29;;;;54779:1;54772:4;:8;;;54751:29;54743:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;54707:291;;;54865:5;;;;;;;;;;;54857:13;;:4;:13;;;;:25;;;;54881:1;54874:4;:8;;;54857:25;54849:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;54964:4;54956:12;;:5;;:12;;;;:::i;:::-;54943:9;:25;;54935:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;54707:291;55010:26;55019:10;55031:4;55010:8;:26::i;:::-;54531:513;:::o;52037:42::-;;;;;;;;;;;;;:::o;53495:79::-;43638:12;:10;:12::i;:::-;43627:23;;:7;:5;:7::i;:::-;:23;;;43619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53560:6:::1;53553:4;;:13;;;;;;;;;;;;;;;;;;53495:79:::0;:::o;53964:98::-;43638:12;:10;:12::i;:::-;43627:23;;:7;:5;:7::i;:::-;:23;;;43619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54044:10:::1;54034:7;;:20;;;;;;;;;;;;;;;;;;53964:98:::0;:::o;24183:339::-;24378:41;24397:12;:10;:12::i;:::-;24411:7;24378:18;:41::i;:::-;24370:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24486:28;24496:4;24502:2;24506:7;24486:9;:28::i;:::-;24183:339;;;:::o;55779:109::-;43638:12;:10;:12::i;:::-;43627:23;;:7;:5;:7::i;:::-;:23;;;43619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55837:10:::1;55829:28;;:51;55858:21;55829:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;55779:109::o:0;24593:185::-;24731:39;24748:4;24754:2;24758:7;24731:39;;;;;;;;;;;;:16;:39::i;:::-;24593:185;;;:::o;52180:41::-;;;;;;;;;;;;;:::o;53865:91::-;43638:12;:10;:12::i;:::-;43627:23;;:7;:5;:7::i;:::-;:23;;;43619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53941:7:::1;53931;;:17;;;;;;;;;;;;;;;;;;53865:91:::0;:::o;52133:40::-;;;;;;;;;;;;;:::o;51731:42::-;;;;;;;;;;;;;:::o;52696:98::-;43638:12;:10;:12::i;:::-;43627:23;;:7;:5;:7::i;:::-;:23;;;43619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52778:8:::1;52768:7;:18;;;;;;;;;;;;:::i;:::-;;52696:98:::0;:::o;53347:140::-;43638:12;:10;:12::i;:::-;43627:23;;:7;:5;:7::i;:::-;:23;;;43619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53434:10:::1;53420:11;;:24;;;;;;;;;;;;;;;;;;53469:10;53455:11;;:24;;;;;;;;;;;;;;;;;;53347:140:::0;:::o;21428:239::-;21500:7;21520:13;21536:7;:16;21544:7;21536:16;;;;;;;;;;;;;;;;;;;;;21520:32;;21588:1;21571:19;;:5;:19;;;;21563:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21654:5;21647:12;;;21428:239;;;:::o;53669:86::-;43638:12;:10;:12::i;:::-;43627:23;;:7;:5;:7::i;:::-;:23;;;43619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53740:7:::1;53732:5;;:15;;;;;;;;;;;;;;;;;;53669:86:::0;:::o;55052:311::-;55117:8;;;;;;;;;;;55109:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;55180:9;;;;;;;;;;;55172:17;;:4;:17;;;;:29;;;;55200:1;55193:4;:8;;;55172:29;55164:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;55286:11;;;;;;;;;;;55258:39;;55281:1;55273:5;;;;;;;;;;;55265:4;55258:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;55250:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;55329:26;55338:10;55350:4;55329:8;:26::i;:::-;55052:311;:::o;51780:42::-;;;;;;;;;;;;;:::o;21158:208::-;21230:7;21275:1;21258:19;;:5;:19;;;;21250:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21342:9;:16;21352:5;21342:16;;;;;;;;;;;;;;;;21335:23;;21158:208;;;:::o;44058:94::-;43638:12;:10;:12::i;:::-;43627:23;;:7;:5;:7::i;:::-;:23;;;43619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44123:21:::1;44141:1;44123:9;:21::i;:::-;44058:94::o:0;52086:40::-;;;;;;;;;;;;;:::o;53582:79::-;43638:12;:10;:12::i;:::-;43627:23;;:7;:5;:7::i;:::-;:23;;;43619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53645:8:::1;;;;;;;;;;;53644:9;53633:8;;:20;;;;;;;;;;;;;;;;;;53582:79::o:0;51829:43::-;;;;;;;;;;;;;:::o;51988:42::-;;;;;;;;;;;;;:::o;43407:87::-;43453:7;43480:6;;;;;;;;;;;43473:13;;43407:87;:::o;53137:89::-;43638:12;:10;:12::i;:::-;43627:23;;:7;:5;:7::i;:::-;:23;;;43619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53209:9:::1;53201:5;:17;;;;53137:89:::0;:::o;21903:104::-;21959:13;21992:7;21985:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21903:104;:::o;51925:56::-;;;;:::o;23586:295::-;23701:12;:10;:12::i;:::-;23689:24;;:8;:24;;;;23681:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23801:8;23756:18;:32;23775:12;:10;:12::i;:::-;23756:32;;;;;;;;;;;;;;;:42;23789:8;23756:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23854:8;23825:48;;23840:12;:10;:12::i;:::-;23825:48;;;23864:8;23825:48;;;;;;:::i;:::-;;;;;;;;23586:295;;:::o;55371:179::-;43638:12;:10;:12::i;:::-;43627:23;;:7;:5;:7::i;:::-;:23;;;43619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55480:11:::1;;;;;;;;;;;55452:39;;55475:1;55467:5;;;;;;;;;;;55459:4;55452:12;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:39;;;;55444:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;55523:19;55532:3;55537:4;55523:8;:19::i;:::-;55371:179:::0;;:::o;52599:89::-;43638:12;:10;:12::i;:::-;43627:23;;:7;:5;:7::i;:::-;:23;;;43619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52672:8:::1;;;;;;;;;;;52671:9;52645:8;;:35;;;;;;;;;;;;;;;;;;52599:89::o:0;53763:94::-;43638:12;:10;:12::i;:::-;43627:23;;:7;:5;:7::i;:::-;:23;;;43619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53842:7:::1;53830:9;;:19;;;;;;;;;;;;;;;;;;53763:94:::0;:::o;51879:39::-;;;;;;;;;;;;;:::o;24849:328::-;25024:41;25043:12;:10;:12::i;:::-;25057:7;25024:18;:41::i;:::-;25016:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25130:39;25144:4;25150:2;25154:7;25163:5;25130:13;:39::i;:::-;24849:328;;;;:::o;53234:105::-;43638:12;:10;:12::i;:::-;43627:23;;:7;:5;:7::i;:::-;:23;;;43619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53321:10:::1;53307:11;;:24;;;;;;;;;;;;;;;;;;53234:105:::0;:::o;55896:399::-;55969:13;56003:16;56011:7;56003;:16::i;:::-;55995:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;56097:5;56085:17;;:8;;;;;;;;;;;:17;;;56082:206;;;56126:14;56119:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56082:206;56202:1;56184:7;56178:21;;;;;:::i;:::-;;;:25;:98;;;;;;;;;;;;;;;;;56230:10;:8;:10::i;:::-;56242:18;:7;:16;:18::i;:::-;56213:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56178:98;56171:105;;55896:399;;;;:::o;54260:263::-;54335:21;54345:10;54335:9;:21::i;:::-;54327:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;54392:9;54387:87;54407:8;;:15;;54403:1;:19;54387:87;;;54444:18;54450:8;;54459:1;54450:11;;;;;;;;;;;;;;;;;;;;;54444:5;:18::i;:::-;54424:3;;;;;:::i;:::-;;;;54387:87;;;;54500:8;;:15;;54484:12;;:31;;;;;;;:::i;:::-;;;;;;;;54260:263;;:::o;52342:39::-;;;;:::o;23952:164::-;24049:4;24073:18;:25;24092:5;24073:25;;;;;;;;;;;;;;;:35;24099:8;24073:35;;;;;;;;;;;;;;;;;;;;;;;;;24066:42;;23952:164;;;;:::o;54070:182::-;54125:4;54157:5;54146:16;;:7;;;;;;;;;;;:16;;;54142:103;;;54186:4;54179:11;;;;54142:103;54228:5;54221:12;;54070:182;;;;:::o;44307:192::-;43638:12;:10;:12::i;:::-;43627:23;;:7;:5;:7::i;:::-;:23;;;43619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44416:1:::1;44396:22;;:8;:22;;;;44388:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44472:19;44482:8;44472:9;:19::i;:::-;44307:192:::0;:::o;52802:111::-;43638:12;:10;:12::i;:::-;43627:23;;:7;:5;:7::i;:::-;:23;;;43619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52897:8:::1;52880:14;:25;;;;;;;;;;;;:::i;:::-;;52802:111:::0;:::o;19289:157::-;19374:4;19413:25;19398:40;;;:11;:40;;;;19391:47;;19289:157;;;:::o;26687:127::-;26752:4;26804:1;26776:30;;:7;:16;26784:7;26776:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26769:37;;26687:127;;;:::o;16197:98::-;16250:7;16277:10;16270:17;;16197:98;:::o;30669:174::-;30771:2;30744:15;:24;30760:7;30744:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30827:7;30823:2;30789:46;;30798:23;30813:7;30798:14;:23::i;:::-;30789:46;;;;;;;;;;;;30669:174;;:::o;55558:213::-;55625:7;55620:144;55642:4;55638:8;;:1;:8;;;55620:144;;;55668:15;55686:5;;;;;;;;;;;55668:23;;55706:24;55716:3;55721:8;55706:24;;:9;:24::i;:::-;55745:5;;:7;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;55620:144;55648:3;;;;;:::i;:::-;;;;55620:144;;;;55558:213;;:::o;26981:348::-;27074:4;27099:16;27107:7;27099;:16::i;:::-;27091:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27175:13;27191:23;27206:7;27191:14;:23::i;:::-;27175:39;;27244:5;27233:16;;:7;:16;;;:51;;;;27277:7;27253:31;;:20;27265:7;27253:11;:20::i;:::-;:31;;;27233:51;:87;;;;27288:32;27305:5;27312:7;27288:16;:32::i;:::-;27233:87;27225:96;;;26981:348;;;;:::o;29973:578::-;30132:4;30105:31;;:23;30120:7;30105:14;:23::i;:::-;:31;;;30097:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30215:1;30201:16;;:2;:16;;;;30193:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30271:39;30292:4;30298:2;30302:7;30271:20;:39::i;:::-;30375:29;30392:1;30396:7;30375:8;:29::i;:::-;30436:1;30417:9;:15;30427:4;30417:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30465:1;30448:9;:13;30458:2;30448:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30496:2;30477:7;:16;30485:7;30477:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30535:7;30531:2;30516:27;;30525:4;30516:27;;;;;;;;;;;;29973:578;;;:::o;44507:173::-;44563:16;44582:6;;;;;;;;;;;44563:25;;44608:8;44599:6;;:17;;;;;;;;;;;;;;;;;;44663:8;44632:40;;44653:8;44632:40;;;;;;;;;;;;44507:173;;:::o;26059:315::-;26216:28;26226:4;26232:2;26236:7;26216:9;:28::i;:::-;26263:48;26286:4;26292:2;26296:7;26305:5;26263:22;:48::i;:::-;26255:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26059:315;;;;:::o;52921:208::-;52981:13;53022:5;53010:17;;:8;;;;;;;;;;;:17;;;53007:115;;;53051:14;53044:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53007:115;53103:7;53096:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52921:208;;:::o;16728:723::-;16784:13;17014:1;17005:5;:10;17001:53;;;17032:10;;;;;;;;;;;;;;;;;;;;;17001:53;17064:12;17079:5;17064:20;;17095:14;17120:78;17135:1;17127:4;:9;17120:78;;17153:8;;;;;:::i;:::-;;;;17184:2;17176:10;;;;;:::i;:::-;;;17120:78;;;17208:19;17240:6;17230:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17208:39;;17258:154;17274:1;17265:5;:10;17258:154;;17302:1;17292:11;;;;;:::i;:::-;;;17369:2;17361:5;:10;;;;:::i;:::-;17348:2;:24;;;;:::i;:::-;17335:39;;17318:6;17325;17318:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17398:2;17389:11;;;;;:::i;:::-;;;17258:154;;;17436:6;17422:21;;;;;16728:723;;;;:::o;29276:360::-;29336:13;29352:23;29367:7;29352:14;:23::i;:::-;29336:39;;29388:48;29409:5;29424:1;29428:7;29388:20;:48::i;:::-;29477:29;29494:1;29498:7;29477:8;:29::i;:::-;29539:1;29519:9;:16;29529:5;29519:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;29558:7;:16;29566:7;29558:16;;;;;;;;;;;;29551:23;;;;;;;;;;;29620:7;29616:1;29592:36;;29601:5;29592:36;;;;;;;;;;;;29276:360;;:::o;27671:110::-;27747:26;27757:2;27761:7;27747:26;;;;;;;;;;;;:9;:26::i;:::-;27671:110;;:::o;32779:126::-;;;;:::o;31408:799::-;31563:4;31584:15;:2;:13;;;:15::i;:::-;31580:620;;;31636:2;31620:36;;;31657:12;:10;:12::i;:::-;31671:4;31677:7;31686:5;31620:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31616:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31879:1;31862:6;:13;:18;31858:272;;;31905:60;;;;;;;;;;:::i;:::-;;;;;;;;31858:272;32080:6;32074:13;32065:6;32061:2;32057:15;32050:38;31616:529;31753:41;;;31743:51;;;:6;:51;;;;31736:58;;;;;31580:620;32184:4;32177:11;;31408:799;;;;;;;:::o;28008:321::-;28138:18;28144:2;28148:7;28138:5;:18::i;:::-;28189:54;28220:1;28224:2;28228:7;28237:5;28189:22;:54::i;:::-;28167:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28008:321;;;:::o;8235:387::-;8295:4;8503:12;8570:7;8558:20;8550:28;;8613:1;8606:4;:8;8599:15;;;8235:387;;;:::o;28665:382::-;28759:1;28745:16;;:2;:16;;;;28737:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28818:16;28826:7;28818;:16::i;:::-;28817:17;28809:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28880:45;28909:1;28913:2;28917:7;28880:20;:45::i;:::-;28955:1;28938:9;:13;28948:2;28938:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28986:2;28967:7;:16;28975:7;28967:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29031:7;29027:2;29006:33;;29023:1;29006:33;;;;;;;;;;;;28665: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;869:367::-;942:8;952:6;1002:3;995:4;987:6;983:17;979:27;969:2;;1020:1;1017;1010:12;969:2;1056:6;1043:20;1033:30;;1086:18;1078:6;1075:30;1072:2;;;1118:1;1115;1108:12;1072:2;1155:4;1147:6;1143:17;1131:29;;1209:3;1201:4;1193:6;1189:17;1179:8;1175:32;1172:41;1169:2;;;1226:1;1223;1216:12;1169:2;959:277;;;;;:::o;1242:133::-;1285:5;1323:6;1310:20;1301:29;;1339:30;1363:5;1339:30;:::i;:::-;1291:84;;;;:::o;1381:137::-;1426:5;1464:6;1451:20;1442:29;;1480:32;1506:5;1480:32;:::i;:::-;1432:86;;;;:::o;1524:141::-;1580:5;1611:6;1605:13;1596:22;;1627:32;1653:5;1627:32;:::i;:::-;1586:79;;;;:::o;1684:271::-;1739:5;1788:3;1781:4;1773:6;1769:17;1765:27;1755:2;;1806:1;1803;1796:12;1755:2;1846:6;1833:20;1871:78;1945:3;1937:6;1930:4;1922:6;1918:17;1871:78;:::i;:::-;1862:87;;1745:210;;;;;:::o;1975:273::-;2031:5;2080:3;2073:4;2065:6;2061:17;2057:27;2047:2;;2098:1;2095;2088:12;2047:2;2138:6;2125:20;2163:79;2238:3;2230:6;2223:4;2215:6;2211:17;2163:79;:::i;:::-;2154:88;;2037:211;;;;;:::o;2254:137::-;2299:5;2337:6;2324:20;2315:29;;2353:32;2379:5;2353:32;:::i;:::-;2305:86;;;;:::o;2397:139::-;2443:5;2481:6;2468:20;2459:29;;2497:33;2524:5;2497:33;:::i;:::-;2449:87;;;;:::o;2542:135::-;2586:5;2624:6;2611:20;2602:29;;2640:31;2665:5;2640:31;:::i;:::-;2592:85;;;;:::o;2683:262::-;2742:6;2791:2;2779:9;2770:7;2766:23;2762:32;2759:2;;;2807:1;2804;2797:12;2759:2;2850:1;2875:53;2920:7;2911:6;2900:9;2896:22;2875:53;:::i;:::-;2865:63;;2821:117;2749:196;;;;:::o;2951:407::-;3019:6;3027;3076:2;3064:9;3055:7;3051:23;3047:32;3044:2;;;3092:1;3089;3082:12;3044:2;3135:1;3160:53;3205:7;3196:6;3185:9;3181:22;3160:53;:::i;:::-;3150:63;;3106:117;3262:2;3288:53;3333:7;3324:6;3313:9;3309:22;3288:53;:::i;:::-;3278:63;;3233:118;3034:324;;;;;:::o;3364:552::-;3441:6;3449;3457;3506:2;3494:9;3485:7;3481:23;3477:32;3474:2;;;3522:1;3519;3512:12;3474:2;3565:1;3590:53;3635:7;3626:6;3615:9;3611:22;3590:53;:::i;:::-;3580:63;;3536:117;3692:2;3718:53;3763:7;3754:6;3743:9;3739:22;3718:53;:::i;:::-;3708:63;;3663:118;3820:2;3846:53;3891:7;3882:6;3871:9;3867:22;3846:53;:::i;:::-;3836:63;;3791:118;3464:452;;;;;:::o;3922:809::-;4017:6;4025;4033;4041;4090:3;4078:9;4069:7;4065:23;4061:33;4058:2;;;4107:1;4104;4097:12;4058:2;4150:1;4175:53;4220:7;4211:6;4200:9;4196:22;4175:53;:::i;:::-;4165:63;;4121:117;4277:2;4303:53;4348:7;4339:6;4328:9;4324:22;4303:53;:::i;:::-;4293:63;;4248:118;4405:2;4431:53;4476:7;4467:6;4456:9;4452:22;4431:53;:::i;:::-;4421:63;;4376:118;4561:2;4550:9;4546:18;4533:32;4592:18;4584:6;4581:30;4578:2;;;4624:1;4621;4614:12;4578:2;4652:62;4706:7;4697:6;4686:9;4682:22;4652:62;:::i;:::-;4642:72;;4504:220;4048:683;;;;;;;:::o;4737:401::-;4802:6;4810;4859:2;4847:9;4838:7;4834:23;4830:32;4827:2;;;4875:1;4872;4865:12;4827:2;4918:1;4943:53;4988:7;4979:6;4968:9;4964:22;4943:53;:::i;:::-;4933:63;;4889:117;5045:2;5071:50;5113:7;5104:6;5093:9;5089:22;5071:50;:::i;:::-;5061:60;;5016:115;4817:321;;;;;:::o;5144:407::-;5212:6;5220;5269:2;5257:9;5248:7;5244:23;5240:32;5237:2;;;5285:1;5282;5275:12;5237:2;5328:1;5353:53;5398:7;5389:6;5378:9;5374:22;5353:53;:::i;:::-;5343:63;;5299:117;5455:2;5481:53;5526:7;5517:6;5506:9;5502:22;5481:53;:::i;:::-;5471:63;;5426:118;5227:324;;;;;:::o;5557:403::-;5623:6;5631;5680:2;5668:9;5659:7;5655:23;5651:32;5648:2;;;5696:1;5693;5686:12;5648:2;5739:1;5764:53;5809:7;5800:6;5789:9;5785:22;5764:53;:::i;:::-;5754:63;;5710:117;5866:2;5892:51;5935:7;5926:6;5915:9;5911:22;5892:51;:::i;:::-;5882:61;;5837:116;5638:322;;;;;:::o;5966:425::-;6052:6;6060;6109:2;6097:9;6088:7;6084:23;6080:32;6077:2;;;6125:1;6122;6115:12;6077:2;6196:1;6185:9;6181:17;6168:31;6226:18;6218:6;6215:30;6212:2;;;6258:1;6255;6248:12;6212:2;6294:80;6366:7;6357:6;6346:9;6342:22;6294:80;:::i;:::-;6276:98;;;;6139:245;6067:324;;;;;:::o;6397:256::-;6453:6;6502:2;6490:9;6481:7;6477:23;6473:32;6470:2;;;6518:1;6515;6508:12;6470:2;6561:1;6586:50;6628:7;6619:6;6608:9;6604:22;6586:50;:::i;:::-;6576:60;;6532:114;6460:193;;;;:::o;6659:260::-;6717:6;6766:2;6754:9;6745:7;6741:23;6737:32;6734:2;;;6782:1;6779;6772:12;6734:2;6825:1;6850:52;6894:7;6885:6;6874:9;6870:22;6850:52;:::i;:::-;6840:62;;6796:116;6724:195;;;;:::o;6925:282::-;6994:6;7043:2;7031:9;7022:7;7018:23;7014:32;7011:2;;;7059:1;7056;7049:12;7011:2;7102:1;7127:63;7182:7;7173:6;7162:9;7158:22;7127:63;:::i;:::-;7117:73;;7073:127;7001:206;;;;:::o;7213:375::-;7282:6;7331:2;7319:9;7310:7;7306:23;7302:32;7299:2;;;7347:1;7344;7337:12;7299:2;7418:1;7407:9;7403:17;7390:31;7448:18;7440:6;7437:30;7434:2;;;7480:1;7477;7470:12;7434:2;7508:63;7563:7;7554:6;7543:9;7539:22;7508:63;:::i;:::-;7498:73;;7361:220;7289:299;;;;:::o;7594:260::-;7652:6;7701:2;7689:9;7680:7;7676:23;7672:32;7669:2;;;7717:1;7714;7707:12;7669:2;7760:1;7785:52;7829:7;7820:6;7809:9;7805:22;7785:52;:::i;:::-;7775:62;;7731:116;7659:195;;;;:::o;7860:262::-;7919:6;7968:2;7956:9;7947:7;7943:23;7939:32;7936:2;;;7984:1;7981;7974:12;7936:2;8027:1;8052:53;8097:7;8088:6;8077:9;8073:22;8052:53;:::i;:::-;8042:63;;7998:117;7926:196;;;;:::o;8128:258::-;8185:6;8234:2;8222:9;8213:7;8209:23;8205:32;8202:2;;;8250:1;8247;8240:12;8202:2;8293:1;8318:51;8361:7;8352:6;8341:9;8337:22;8318:51;:::i;:::-;8308:61;;8264:115;8192:194;;;;:::o;8392:118::-;8479:24;8497:5;8479:24;:::i;:::-;8474:3;8467:37;8457:53;;:::o;8516:109::-;8597:21;8612:5;8597:21;:::i;:::-;8592:3;8585:34;8575:50;;:::o;8631:360::-;8717:3;8745:38;8777:5;8745:38;:::i;:::-;8799:70;8862:6;8857:3;8799:70;:::i;:::-;8792:77;;8878:52;8923:6;8918:3;8911:4;8904:5;8900:16;8878:52;:::i;:::-;8955:29;8977:6;8955:29;:::i;:::-;8950:3;8946:39;8939:46;;8721:270;;;;;:::o;8997:364::-;9085:3;9113:39;9146:5;9113:39;:::i;:::-;9168:71;9232:6;9227:3;9168:71;:::i;:::-;9161:78;;9248:52;9293:6;9288:3;9281:4;9274:5;9270:16;9248:52;:::i;:::-;9325:29;9347:6;9325:29;:::i;:::-;9320:3;9316:39;9309:46;;9089:272;;;;;:::o;9367:377::-;9473:3;9501:39;9534:5;9501:39;:::i;:::-;9556:89;9638:6;9633:3;9556:89;:::i;:::-;9549:96;;9654:52;9699:6;9694:3;9687:4;9680:5;9676:16;9654:52;:::i;:::-;9731:6;9726:3;9722:16;9715:23;;9477:267;;;;;:::o;9750:366::-;9892:3;9913:67;9977:2;9972:3;9913:67;:::i;:::-;9906:74;;9989:93;10078:3;9989:93;:::i;:::-;10107:2;10102:3;10098:12;10091:19;;9896:220;;;:::o;10122:366::-;10264:3;10285:67;10349:2;10344:3;10285:67;:::i;:::-;10278:74;;10361:93;10450:3;10361:93;:::i;:::-;10479:2;10474:3;10470:12;10463:19;;10268:220;;;:::o;10494:366::-;10636:3;10657:67;10721:2;10716:3;10657:67;:::i;:::-;10650:74;;10733:93;10822:3;10733:93;:::i;:::-;10851:2;10846:3;10842:12;10835:19;;10640:220;;;:::o;10866:366::-;11008:3;11029:67;11093:2;11088:3;11029:67;:::i;:::-;11022:74;;11105:93;11194:3;11105:93;:::i;:::-;11223:2;11218:3;11214:12;11207:19;;11012:220;;;:::o;11238:366::-;11380:3;11401:67;11465:2;11460:3;11401:67;:::i;:::-;11394:74;;11477:93;11566:3;11477:93;:::i;:::-;11595:2;11590:3;11586:12;11579:19;;11384:220;;;:::o;11610:366::-;11752:3;11773:67;11837:2;11832:3;11773:67;:::i;:::-;11766:74;;11849:93;11938:3;11849:93;:::i;:::-;11967:2;11962:3;11958:12;11951:19;;11756:220;;;:::o;11982:366::-;12124:3;12145:67;12209:2;12204:3;12145:67;:::i;:::-;12138:74;;12221:93;12310:3;12221:93;:::i;:::-;12339:2;12334:3;12330:12;12323:19;;12128:220;;;:::o;12354:366::-;12496:3;12517:67;12581:2;12576:3;12517:67;:::i;:::-;12510:74;;12593:93;12682:3;12593:93;:::i;:::-;12711:2;12706:3;12702:12;12695:19;;12500:220;;;:::o;12726:366::-;12868:3;12889:67;12953:2;12948:3;12889:67;:::i;:::-;12882:74;;12965:93;13054:3;12965:93;:::i;:::-;13083:2;13078:3;13074:12;13067:19;;12872:220;;;:::o;13098:366::-;13240:3;13261:67;13325:2;13320:3;13261:67;:::i;:::-;13254:74;;13337:93;13426:3;13337:93;:::i;:::-;13455:2;13450:3;13446:12;13439:19;;13244:220;;;:::o;13470:366::-;13612:3;13633:67;13697:2;13692:3;13633:67;:::i;:::-;13626:74;;13709:93;13798:3;13709:93;:::i;:::-;13827:2;13822:3;13818:12;13811:19;;13616:220;;;:::o;13842:366::-;13984:3;14005:67;14069:2;14064:3;14005:67;:::i;:::-;13998:74;;14081:93;14170:3;14081:93;:::i;:::-;14199:2;14194:3;14190:12;14183:19;;13988:220;;;:::o;14214:366::-;14356:3;14377:67;14441:2;14436:3;14377:67;:::i;:::-;14370:74;;14453:93;14542:3;14453:93;:::i;:::-;14571:2;14566:3;14562:12;14555:19;;14360:220;;;:::o;14586:366::-;14728:3;14749:67;14813:2;14808:3;14749:67;:::i;:::-;14742:74;;14825:93;14914:3;14825:93;:::i;:::-;14943:2;14938:3;14934:12;14927:19;;14732:220;;;:::o;14958:400::-;15118:3;15139:84;15221:1;15216:3;15139:84;:::i;:::-;15132:91;;15232:93;15321:3;15232:93;:::i;:::-;15350:1;15345:3;15341:11;15334:18;;15122:236;;;:::o;15364:366::-;15506:3;15527:67;15591:2;15586:3;15527:67;:::i;:::-;15520:74;;15603:93;15692:3;15603:93;:::i;:::-;15721:2;15716:3;15712:12;15705:19;;15510:220;;;:::o;15736:366::-;15878:3;15899:67;15963:2;15958:3;15899:67;:::i;:::-;15892:74;;15975:93;16064:3;15975:93;:::i;:::-;16093:2;16088:3;16084:12;16077:19;;15882:220;;;:::o;16108:366::-;16250:3;16271:67;16335:2;16330:3;16271:67;:::i;:::-;16264:74;;16347:93;16436:3;16347:93;:::i;:::-;16465:2;16460:3;16456:12;16449:19;;16254:220;;;:::o;16480:366::-;16622:3;16643:67;16707:2;16702:3;16643:67;:::i;:::-;16636:74;;16719:93;16808:3;16719:93;:::i;:::-;16837:2;16832:3;16828:12;16821:19;;16626:220;;;:::o;16852:366::-;16994:3;17015:67;17079:2;17074:3;17015:67;:::i;:::-;17008:74;;17091:93;17180:3;17091:93;:::i;:::-;17209:2;17204:3;17200:12;17193:19;;16998:220;;;:::o;17224:366::-;17366:3;17387:67;17451:2;17446:3;17387:67;:::i;:::-;17380:74;;17463:93;17552:3;17463:93;:::i;:::-;17581:2;17576:3;17572:12;17565:19;;17370:220;;;:::o;17596:366::-;17738:3;17759:67;17823:2;17818:3;17759:67;:::i;:::-;17752:74;;17835:93;17924:3;17835:93;:::i;:::-;17953:2;17948:3;17944:12;17937:19;;17742:220;;;:::o;17968:366::-;18110:3;18131:67;18195:2;18190:3;18131:67;:::i;:::-;18124:74;;18207:93;18296:3;18207:93;:::i;:::-;18325:2;18320:3;18316:12;18309:19;;18114:220;;;:::o;18340:115::-;18425:23;18442:5;18425:23;:::i;:::-;18420:3;18413:36;18403:52;;:::o;18461:118::-;18548:24;18566:5;18548:24;:::i;:::-;18543:3;18536:37;18526:53;;:::o;18585:112::-;18668:22;18684:5;18668:22;:::i;:::-;18663:3;18656:35;18646:51;;:::o;18703:701::-;18984:3;19006:95;19097:3;19088:6;19006:95;:::i;:::-;18999:102;;19118:95;19209:3;19200:6;19118:95;:::i;:::-;19111:102;;19230:148;19374:3;19230:148;:::i;:::-;19223:155;;19395:3;19388:10;;18988:416;;;;;:::o;19410:222::-;19503:4;19541:2;19530:9;19526:18;19518:26;;19554:71;19622:1;19611:9;19607:17;19598:6;19554:71;:::i;:::-;19508:124;;;;:::o;19638:640::-;19833:4;19871:3;19860:9;19856:19;19848:27;;19885:71;19953:1;19942:9;19938:17;19929:6;19885:71;:::i;:::-;19966:72;20034:2;20023:9;20019:18;20010:6;19966:72;:::i;:::-;20048;20116:2;20105:9;20101:18;20092:6;20048:72;:::i;:::-;20167:9;20161:4;20157:20;20152:2;20141:9;20137:18;20130:48;20195:76;20266:4;20257:6;20195:76;:::i;:::-;20187:84;;19838:440;;;;;;;:::o;20284:210::-;20371:4;20409:2;20398:9;20394:18;20386:26;;20422:65;20484:1;20473:9;20469:17;20460:6;20422:65;:::i;:::-;20376:118;;;;:::o;20500:313::-;20613:4;20651:2;20640:9;20636:18;20628:26;;20700:9;20694:4;20690:20;20686:1;20675:9;20671:17;20664:47;20728:78;20801:4;20792:6;20728:78;:::i;:::-;20720:86;;20618:195;;;;:::o;20819:419::-;20985:4;21023:2;21012:9;21008:18;21000:26;;21072:9;21066:4;21062:20;21058:1;21047:9;21043:17;21036:47;21100:131;21226:4;21100:131;:::i;:::-;21092:139;;20990:248;;;:::o;21244:419::-;21410:4;21448:2;21437:9;21433:18;21425:26;;21497:9;21491:4;21487:20;21483:1;21472:9;21468:17;21461:47;21525:131;21651:4;21525:131;:::i;:::-;21517:139;;21415:248;;;:::o;21669:419::-;21835:4;21873:2;21862:9;21858:18;21850:26;;21922:9;21916:4;21912:20;21908:1;21897:9;21893:17;21886:47;21950:131;22076:4;21950:131;:::i;:::-;21942:139;;21840:248;;;:::o;22094:419::-;22260:4;22298:2;22287:9;22283:18;22275:26;;22347:9;22341:4;22337:20;22333:1;22322:9;22318:17;22311:47;22375:131;22501:4;22375:131;:::i;:::-;22367:139;;22265:248;;;:::o;22519:419::-;22685:4;22723:2;22712:9;22708:18;22700:26;;22772:9;22766:4;22762:20;22758:1;22747:9;22743:17;22736:47;22800:131;22926:4;22800:131;:::i;:::-;22792:139;;22690:248;;;:::o;22944:419::-;23110:4;23148:2;23137:9;23133:18;23125:26;;23197:9;23191:4;23187:20;23183:1;23172:9;23168:17;23161:47;23225:131;23351:4;23225:131;:::i;:::-;23217:139;;23115:248;;;:::o;23369:419::-;23535:4;23573:2;23562:9;23558:18;23550:26;;23622:9;23616:4;23612:20;23608:1;23597:9;23593:17;23586:47;23650:131;23776:4;23650:131;:::i;:::-;23642:139;;23540:248;;;:::o;23794:419::-;23960:4;23998:2;23987:9;23983:18;23975:26;;24047:9;24041:4;24037:20;24033:1;24022:9;24018:17;24011:47;24075:131;24201:4;24075:131;:::i;:::-;24067:139;;23965:248;;;:::o;24219:419::-;24385:4;24423:2;24412:9;24408:18;24400:26;;24472:9;24466:4;24462:20;24458:1;24447:9;24443:17;24436:47;24500:131;24626:4;24500:131;:::i;:::-;24492:139;;24390:248;;;:::o;24644:419::-;24810:4;24848:2;24837:9;24833:18;24825:26;;24897:9;24891:4;24887:20;24883:1;24872:9;24868:17;24861:47;24925:131;25051:4;24925:131;:::i;:::-;24917:139;;24815:248;;;:::o;25069:419::-;25235:4;25273:2;25262:9;25258:18;25250:26;;25322:9;25316:4;25312:20;25308:1;25297:9;25293:17;25286:47;25350:131;25476:4;25350:131;:::i;:::-;25342:139;;25240:248;;;:::o;25494:419::-;25660:4;25698:2;25687:9;25683:18;25675:26;;25747:9;25741:4;25737:20;25733:1;25722:9;25718:17;25711:47;25775:131;25901:4;25775:131;:::i;:::-;25767:139;;25665:248;;;:::o;25919:419::-;26085:4;26123:2;26112:9;26108:18;26100:26;;26172:9;26166:4;26162:20;26158:1;26147:9;26143:17;26136:47;26200:131;26326:4;26200:131;:::i;:::-;26192:139;;26090:248;;;:::o;26344:419::-;26510:4;26548:2;26537:9;26533:18;26525:26;;26597:9;26591:4;26587:20;26583:1;26572:9;26568:17;26561:47;26625:131;26751:4;26625:131;:::i;:::-;26617:139;;26515:248;;;:::o;26769:419::-;26935:4;26973:2;26962:9;26958:18;26950:26;;27022:9;27016:4;27012:20;27008:1;26997:9;26993:17;26986:47;27050:131;27176:4;27050:131;:::i;:::-;27042:139;;26940:248;;;:::o;27194:419::-;27360:4;27398:2;27387:9;27383:18;27375:26;;27447:9;27441:4;27437:20;27433:1;27422:9;27418:17;27411:47;27475:131;27601:4;27475:131;:::i;:::-;27467:139;;27365:248;;;:::o;27619:419::-;27785:4;27823:2;27812:9;27808:18;27800:26;;27872:9;27866:4;27862:20;27858:1;27847:9;27843:17;27836:47;27900:131;28026:4;27900:131;:::i;:::-;27892:139;;27790:248;;;:::o;28044:419::-;28210:4;28248:2;28237:9;28233:18;28225:26;;28297:9;28291:4;28287:20;28283:1;28272:9;28268:17;28261:47;28325:131;28451:4;28325:131;:::i;:::-;28317:139;;28215:248;;;:::o;28469:419::-;28635:4;28673:2;28662:9;28658:18;28650:26;;28722:9;28716:4;28712:20;28708:1;28697:9;28693:17;28686:47;28750:131;28876:4;28750:131;:::i;:::-;28742:139;;28640:248;;;:::o;28894:419::-;29060:4;29098:2;29087:9;29083:18;29075:26;;29147:9;29141:4;29137:20;29133:1;29122:9;29118:17;29111:47;29175:131;29301:4;29175:131;:::i;:::-;29167:139;;29065:248;;;:::o;29319:419::-;29485:4;29523:2;29512:9;29508:18;29500:26;;29572:9;29566:4;29562:20;29558:1;29547:9;29543:17;29536:47;29600:131;29726:4;29600:131;:::i;:::-;29592:139;;29490:248;;;:::o;29744:419::-;29910:4;29948:2;29937:9;29933:18;29925:26;;29997:9;29991:4;29987:20;29983:1;29972:9;29968:17;29961:47;30025:131;30151:4;30025:131;:::i;:::-;30017:139;;29915:248;;;:::o;30169:218::-;30260:4;30298:2;30287:9;30283:18;30275:26;;30311:69;30377:1;30366:9;30362:17;30353:6;30311:69;:::i;:::-;30265:122;;;;:::o;30393:222::-;30486:4;30524:2;30513:9;30509:18;30501:26;;30537:71;30605:1;30594:9;30590:17;30581:6;30537:71;:::i;:::-;30491:124;;;;:::o;30621:214::-;30710:4;30748:2;30737:9;30733:18;30725:26;;30761:67;30825:1;30814:9;30810:17;30801:6;30761:67;:::i;:::-;30715:120;;;;:::o;30841:129::-;30875:6;30902:20;;:::i;:::-;30892:30;;30931:33;30959:4;30951:6;30931:33;:::i;:::-;30882:88;;;:::o;30976:75::-;31009:6;31042:2;31036:9;31026:19;;31016:35;:::o;31057:307::-;31118:4;31208:18;31200:6;31197:30;31194:2;;;31230:18;;:::i;:::-;31194:2;31268:29;31290:6;31268:29;:::i;:::-;31260:37;;31352:4;31346;31342:15;31334:23;;31123:241;;;:::o;31370:308::-;31432:4;31522:18;31514:6;31511:30;31508:2;;;31544:18;;:::i;:::-;31508:2;31582:29;31604:6;31582:29;:::i;:::-;31574:37;;31666:4;31660;31656:15;31648:23;;31437:241;;;:::o;31684:98::-;31735:6;31769:5;31763:12;31753:22;;31742:40;;;:::o;31788:99::-;31840:6;31874:5;31868:12;31858:22;;31847:40;;;:::o;31893:168::-;31976:11;32010:6;32005:3;31998:19;32050:4;32045:3;32041:14;32026:29;;31988:73;;;;:::o;32067:169::-;32151:11;32185:6;32180:3;32173:19;32225:4;32220:3;32216:14;32201:29;;32163:73;;;;:::o;32242:148::-;32344:11;32381:3;32366:18;;32356:34;;;;:::o;32396:242::-;32435:3;32454:19;32471:1;32454:19;:::i;:::-;32449:24;;32487:19;32504:1;32487:19;:::i;:::-;32482:24;;32580:1;32572:6;32568:14;32565:1;32562:21;32559:2;;;32586:18;;:::i;:::-;32559:2;32630:1;32627;32623:9;32616:16;;32439:199;;;;:::o;32644:305::-;32684:3;32703:20;32721:1;32703:20;:::i;:::-;32698:25;;32737:20;32755:1;32737:20;:::i;:::-;32732:25;;32891:1;32823:66;32819:74;32816:1;32813:81;32810:2;;;32897:18;;:::i;:::-;32810:2;32941:1;32938;32934:9;32927:16;;32688:261;;;;:::o;32955:185::-;32995:1;33012:20;33030:1;33012:20;:::i;:::-;33007:25;;33046:20;33064:1;33046:20;:::i;:::-;33041:25;;33085:1;33075:2;;33090:18;;:::i;:::-;33075:2;33132:1;33129;33125:9;33120:14;;32997:143;;;;:::o;33146:348::-;33186:7;33209:20;33227:1;33209:20;:::i;:::-;33204:25;;33243:20;33261:1;33243:20;:::i;:::-;33238:25;;33431:1;33363:66;33359:74;33356:1;33353:81;33348:1;33341:9;33334:17;33330:105;33327:2;;;33438:18;;:::i;:::-;33327:2;33486:1;33483;33479:9;33468:20;;33194:300;;;;:::o;33500:188::-;33539:4;33559:19;33576:1;33559:19;:::i;:::-;33554:24;;33592:19;33609:1;33592:19;:::i;:::-;33587:24;;33630:1;33627;33624:8;33621:2;;;33635:18;;:::i;:::-;33621:2;33680:1;33677;33673:9;33665:17;;33544:144;;;;:::o;33694:191::-;33734:4;33754:20;33772:1;33754:20;:::i;:::-;33749:25;;33788:20;33806:1;33788:20;:::i;:::-;33783:25;;33827:1;33824;33821:8;33818:2;;;33832:18;;:::i;:::-;33818:2;33877:1;33874;33870:9;33862:17;;33739:146;;;;:::o;33891:96::-;33928:7;33957:24;33975:5;33957:24;:::i;:::-;33946:35;;33936:51;;;:::o;33993:90::-;34027:7;34070:5;34063:13;34056:21;34045:32;;34035:48;;;:::o;34089:149::-;34125:7;34165:66;34158:5;34154:78;34143:89;;34133:105;;;:::o;34244:89::-;34280:7;34320:6;34313:5;34309:18;34298:29;;34288:45;;;:::o;34339:126::-;34376:7;34416:42;34409:5;34405:54;34394:65;;34384:81;;;:::o;34471:77::-;34508:7;34537:5;34526:16;;34516:32;;;:::o;34554:86::-;34589:7;34629:4;34622:5;34618:16;34607:27;;34597:43;;;:::o;34646:154::-;34730:6;34725:3;34720;34707:30;34792:1;34783:6;34778:3;34774:16;34767:27;34697:103;;;:::o;34806:307::-;34874:1;34884:113;34898:6;34895:1;34892:13;34884:113;;;34983:1;34978:3;34974:11;34968:18;34964:1;34959:3;34955:11;34948:39;34920:2;34917:1;34913:10;34908:15;;34884:113;;;35015:6;35012:1;35009:13;35006:2;;;35095:1;35086:6;35081:3;35077:16;35070:27;35006:2;34855:258;;;;:::o;35119:320::-;35163:6;35200:1;35194:4;35190:12;35180:22;;35247:1;35241:4;35237:12;35268:18;35258:2;;35324:4;35316:6;35312:17;35302:27;;35258:2;35386;35378:6;35375:14;35355:18;35352:38;35349:2;;;35405:18;;:::i;:::-;35349:2;35170:269;;;;:::o;35445:281::-;35528:27;35550:4;35528:27;:::i;:::-;35520:6;35516:40;35658:6;35646:10;35643:22;35622:18;35610:10;35607:34;35604:62;35601:2;;;35669:18;;:::i;:::-;35601:2;35709:10;35705:2;35698:22;35488:238;;;:::o;35732:171::-;35770:3;35793:23;35810:5;35793:23;:::i;:::-;35784:32;;35838:6;35831:5;35828:17;35825:2;;;35848:18;;:::i;:::-;35825:2;35895:1;35888:5;35884:13;35877:20;;35774:129;;;:::o;35909:233::-;35948:3;35971:24;35989:5;35971:24;:::i;:::-;35962:33;;36017:66;36010:5;36007:77;36004:2;;;36087:18;;:::i;:::-;36004:2;36134:1;36127:5;36123:13;36116:20;;35952:190;;;:::o;36148:167::-;36185:3;36208:22;36224:5;36208:22;:::i;:::-;36199:31;;36252:4;36245:5;36242:15;36239:2;;;36260:18;;:::i;:::-;36239:2;36307:1;36300:5;36296:13;36289:20;;36189:126;;;:::o;36321:176::-;36353:1;36370:20;36388:1;36370:20;:::i;:::-;36365:25;;36404:20;36422:1;36404:20;:::i;:::-;36399:25;;36443:1;36433:2;;36448:18;;:::i;:::-;36433:2;36489:1;36486;36482:9;36477:14;;36355:142;;;;:::o;36503:180::-;36551:77;36548:1;36541:88;36648:4;36645:1;36638:15;36672:4;36669:1;36662:15;36689:180;36737:77;36734:1;36727:88;36834:4;36831:1;36824:15;36858:4;36855:1;36848:15;36875:180;36923:77;36920:1;36913:88;37020:4;37017:1;37010:15;37044:4;37041:1;37034:15;37061:180;37109:77;37106:1;37099:88;37206:4;37203:1;37196:15;37230:4;37227:1;37220:15;37247:102;37288:6;37339:2;37335:7;37330:2;37323:5;37319:14;37315:28;37305:38;;37295:54;;;:::o;37355:237::-;37495:34;37491:1;37483:6;37479:14;37472:58;37564:20;37559:2;37551:6;37547:15;37540:45;37461:131;:::o;37598:225::-;37738:34;37734:1;37726:6;37722:14;37715:58;37807:8;37802:2;37794:6;37790:15;37783:33;37704:119;:::o;37829:178::-;37969:30;37965:1;37957:6;37953:14;37946:54;37935:72;:::o;38013:173::-;38153:25;38149:1;38141:6;38137:14;38130:49;38119:67;:::o;38192:223::-;38332:34;38328:1;38320:6;38316:14;38309:58;38401:6;38396:2;38388:6;38384:15;38377:31;38298:117;:::o;38421:175::-;38561:27;38557:1;38549:6;38545:14;38538:51;38527:69;:::o;38602:168::-;38742:20;38738:1;38730:6;38726:14;38719:44;38708:62;:::o;38776:231::-;38916:34;38912:1;38904:6;38900:14;38893:58;38985:14;38980:2;38972:6;38968:15;38961:39;38882:125;:::o;39013:243::-;39153:34;39149:1;39141:6;39137:14;39130:58;39222:26;39217:2;39209:6;39205:15;39198:51;39119:137;:::o;39262:220::-;39402:34;39398:1;39390:6;39386:14;39379:58;39471:3;39466:2;39458:6;39454:15;39447:28;39368:114;:::o;39488:229::-;39628:34;39624:1;39616:6;39612:14;39605:58;39697:12;39692:2;39684:6;39680:15;39673:37;39594:123;:::o;39723:228::-;39863:34;39859:1;39851:6;39847:14;39840:58;39932:11;39927:2;39919:6;39915:15;39908:36;39829:122;:::o;39957:182::-;40097:34;40093:1;40085:6;40081:14;40074:58;40063:76;:::o;40145:231::-;40285:34;40281:1;40273:6;40269:14;40262:58;40354:14;40349:2;40341:6;40337:15;40330:39;40251:125;:::o;40382:155::-;40522:7;40518:1;40510:6;40506:14;40499:31;40488:49;:::o;40543:182::-;40683:34;40679:1;40671:6;40667:14;40660:58;40649:76;:::o;40731:228::-;40871:34;40867:1;40859:6;40855:14;40848:58;40940:11;40935:2;40927:6;40923:15;40916:36;40837:122;:::o;40965:234::-;41105:34;41101:1;41093:6;41089:14;41082:58;41174:17;41169:2;41161:6;41157:15;41150:42;41071:128;:::o;41205:220::-;41345:34;41341:1;41333:6;41329:14;41322:58;41414:3;41409:2;41401:6;41397:15;41390:28;41311:114;:::o;41431:236::-;41571:34;41567:1;41559:6;41555:14;41548:58;41640:19;41635:2;41627:6;41623:15;41616:44;41537:130;:::o;41673:165::-;41813:17;41809:1;41801:6;41797:14;41790:41;41779:59;:::o;41844:164::-;41984:16;41980:1;41972:6;41968:14;41961:40;41950:58;:::o;42014:163::-;42154:15;42150:1;42142:6;42138:14;42131:39;42120:57;:::o;42183:122::-;42256:24;42274:5;42256:24;:::i;:::-;42249:5;42246:35;42236:2;;42295:1;42292;42285:12;42236:2;42226:79;:::o;42311:116::-;42381:21;42396:5;42381:21;:::i;:::-;42374:5;42371:32;42361:2;;42417:1;42414;42407:12;42361:2;42351:76;:::o;42433:120::-;42505:23;42522:5;42505:23;:::i;:::-;42498:5;42495:34;42485:2;;42543:1;42540;42533:12;42485:2;42475:78;:::o;42559:120::-;42631:23;42648:5;42631:23;:::i;:::-;42624:5;42621:34;42611:2;;42669:1;42666;42659:12;42611:2;42601:78;:::o;42685:122::-;42758:24;42776:5;42758:24;:::i;:::-;42751:5;42748:35;42738:2;;42797:1;42794;42787:12;42738:2;42728:79;:::o;42813:118::-;42884:22;42900:5;42884:22;:::i;:::-;42877:5;42874:33;42864:2;;42921:1;42918;42911:12;42864:2;42854:77;:::o

Swarm Source

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