ETH Price: $3,158.14 (+2.85%)
Gas: 2 Gwei

Token

Bored Kid (BKid)
 

Overview

Max Total Supply

309 BKid

Holders

126

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
phixionizm.eth
0xdcd219c85863fc8eecd8b743faabfc6de234c578
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:
MGDCbreedBAYC

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity 0.8.4;


abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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/Address.sol

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor() {
        
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

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

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][account] += amount;
        emit TransferSingle(operator, address(0), account, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `account`
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 accountBalance = _balances[id][account];
        require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][account] = accountBalance - amount;
        }

        emit TransferSingle(operator, account, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 accountBalance = _balances[id][account];
            require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][account] = accountBalance - amount;
            }
        }

        emit TransferBatch(operator, account, address(0), ids, amounts);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

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

/**
 * @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);
    }
}
contract MGDCbreedBAYC is ERC1155, Ownable {
    string public constant name = "Bored Kid";
    string public constant symbol = "BKid";
    uint256 public NFTPrice = 250000000000000000;
    using SafeMath for uint256;
    using Strings for uint256;
    uint256 public totalSupply = 0;
    string private baseURI;
    string private blindURI;
    bool public reveal;
    bool public isActive;
    mapping(uint256 => bool) public hasBreed;
    uint256 public giveawayCount;
    IERC721 public MGDC=IERC721(0x0191c41DBceB20a612b25137133ca719E84f7933);
    IERC721 public BAYC=IERC721(0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D);
    mapping(uint256 => bool) public MGDCisBreeding;
    uint256 public MGDCisBreedingCount;
    mapping(uint256 => uint256) public MGDCbreeding;

    /*
     * Function to reveal all NFTs
    */
    function revealNow() 
        external 
        onlyOwner 
    {
        reveal = true;
    }
    
    /*
     * Function to mint NFTs
    */
    function mint(address to, uint32 count) internal {
        if (count > 1) {
            uint256[] memory ids = new uint256[](uint256(count));
            uint256[] memory amounts = new uint256[](uint256(count));

            for (uint32 i = 0; i < count; i++) {
                ids[i] = totalSupply + i;
                amounts[i] = 1;
            }

            _mintBatch(to, ids, amounts, "");
        } else {
            _mint(to, totalSupply, 1, "");
        }

        totalSupply += count;
    }
    
    /*
     * Function setIsActive to activate/desactivate the smart contract
    */
    function setIsActive(
        bool _isActive
    ) 
        external 
        onlyOwner 
    {
        isActive = _isActive;
    }

    /*
     * Function to set Base and Blind URI 
    */
    function setURIs(
        string memory _blindURI, 
        string memory _URI
    ) 
        external 
        onlyOwner 
    {
        blindURI = _blindURI;
        baseURI = _URI;
    }
   
    
    function listBreeding(
        //uint256 idFirst,
        uint256 idSecond
    )
     external 
     payable
    {
        require(NFTPrice == msg.value, "Ether value sent is not correct");
        require(MGDC.ownerOf(idSecond)==msg.sender,"You don't own this BAYC nor this MGDC");
        
        if(MGDC.ownerOf(idSecond)==msg.sender){
        require(MGDCisBreeding[idSecond]==false);
          MGDCisBreeding[idSecond]=true;
          MGDCbreeding[MGDCisBreedingCount]=idSecond;
          MGDCisBreedingCount=MGDCisBreedingCount+1;
        }
    }


    /*
     * Function to mint new NFTs when breeding
    */
    function breed(
        uint256 idSecond
    ) 
        public 
        payable
    {
        require(NFTPrice == msg.value, "Ether value sent is not correct");
        require(isActive, "Contract is not active");
        require(BAYC.balanceOf(msg.sender)>=1,"You are not BAYC");
        require(!hasBreed[idSecond],"1 MGDC can breed only once");
        require(MGDCisBreeding[idSecond],"this MGDC is not listed");
        mint(msg.sender,1);
        mint(MGDC.ownerOf(idSecond),1);
        hasBreed[idSecond]=true;
        

    }
    
   
    /*
     * Function to mint all NFTs to create the collection
    */
    function mintByOwner(
        address _to
    ) 
        public 
        onlyOwner
    {
        require(giveawayCount.add(1)<=1,"Cannot do more giveaway");
        mint(_to,1);
        giveawayCount=giveawayCount.add(1);
    }
    
    /*
     * Function to get token URI of given token ID
    */
    function uri(
        uint256 _tokenId
    ) 
        public 
        view 
        virtual 
        override 
        returns (string memory) 
    {
        require(_tokenId<totalSupply, "ERC1155Metadata: URI query for nonexistent token");
        if (!reveal) {
            return string(abi.encodePacked(blindURI));
        } else {
            return string(abi.encodePacked(baseURI, _tokenId.toString()));
        }
    }
   

   /*
     * Function to withdraw collected amount during minting by the owner
    */
    function withdraw(
    ) 
        public 
        onlyOwner 
    {
        uint balance = address(this).balance;
        payable(address(0xbD7D5f86f2343aDe4108b638F34f01ad1986b8A5)).transfer(balance);
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"BAYC","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MGDC","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"MGDCbreeding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"MGDCisBreeding","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MGDCisBreedingCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFTPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"idSecond","type":"uint256"}],"name":"breed","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"giveawayCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"hasBreed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"idSecond","type":"uint256"}],"name":"listBreeding","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mintByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealNow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setIsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_blindURI","type":"string"},{"internalType":"string","name":"_URI","type":"string"}],"name":"setURIs","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526703782dace9d900006004556000600555600b80546001600160a01b0319908116730191c41dbceb20a612b25137133ca719e84f793317909155600c805490911673bc4ca0eda7647a8ab7c2061c2e118a18a936f13d17905534801561006957600080fd5b5061007333610078565b6100ca565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612902806100d96000396000f3fe6080604052600436106101d75760003560e01c80638da5cb5b11610102578063b1d51ad111610095578063e985e9c511610064578063e985e9c51461057f578063e9be0f3f146105c8578063f242432a146105de578063f2fde38b146105fe57600080fd5b8063b1d51ad1146104ef578063b533731d1461051f578063cde564c91461053f578063e82541741461055f57600080fd5b8063a38bffda116100d1578063a38bffda1461047f578063a475b5dd14610495578063ae68ac59146104af578063af9a1cd2146104dc57600080fd5b80638da5cb5b146103dd5780639582b6e51461040f57806395d89b411461042f578063a22cb4651461045f57600080fd5b80632750fc781161017a5780634e1273f4116101495780634e1273f4146103565780635f0f45b21461038357806361b058bf14610398578063715018a6146103c857600080fd5b80632750fc78146102ec5780632eb2c2d61461030e5780633ccfd60b1461032e5780634cccf49c1461034357600080fd5b80630e89341c116101b65780630e89341c1461028157806318160ddd146102a157806319e312cf146102b757806322f3e2d4146102cd57600080fd5b8062fdd58e146101dc57806301ffc9a71461020f57806306fdde031461023f575b600080fd5b3480156101e857600080fd5b506101fc6101f73660046120df565b61061e565b6040519081526020015b60405180910390f35b34801561021b57600080fd5b5061022f61022a3660046121f1565b6106b5565b6040519015158152602001610206565b34801561024b57600080fd5b5061027460405180604001604052806009815260200168109bdc99590812da5960ba1b81525081565b60405161020691906124c3565b34801561028d57600080fd5b5061027461029c366004612280565b610707565b3480156102ad57600080fd5b506101fc60055481565b3480156102c357600080fd5b506101fc600e5481565b3480156102d957600080fd5b5060085461022f90610100900460ff1681565b3480156102f857600080fd5b5061030c6103073660046121d7565b6107c6565b005b34801561031a57600080fd5b5061030c610329366004611f9a565b61080a565b34801561033a57600080fd5b5061030c6108a1565b61030c610351366004612280565b610912565b34801561036257600080fd5b5061037661037136600461210a565b610b2a565b6040516102069190612482565b34801561038f57600080fd5b5061030c610c8c565b3480156103a457600080fd5b5061022f6103b3366004612280565b600d6020526000908152604090205460ff1681565b3480156103d457600080fd5b5061030c610cc5565b3480156103e957600080fd5b506003546001600160a01b03165b6040516001600160a01b039091168152602001610206565b34801561041b57600080fd5b50600c546103f7906001600160a01b031681565b34801561043b57600080fd5b50610274604051806040016040528060048152602001631092da5960e21b81525081565b34801561046b57600080fd5b5061030c61047a3660046120ab565b610cfb565b34801561048b57600080fd5b506101fc60045481565b3480156104a157600080fd5b5060085461022f9060ff1681565b3480156104bb57600080fd5b506101fc6104ca366004612280565b600f6020526000908152604090205481565b61030c6104ea366004612280565b610dd2565b3480156104fb57600080fd5b5061022f61050a366004612280565b60096020526000908152604090205460ff1681565b34801561052b57600080fd5b5061030c61053a366004611f2a565b611098565b34801561054b57600080fd5b50600b546103f7906001600160a01b031681565b34801561056b57600080fd5b5061030c61057a366004612229565b61113f565b34801561058b57600080fd5b5061022f61059a366004611f62565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156105d457600080fd5b506101fc600a5481565b3480156105ea57600080fd5b5061030c6105f9366004612044565b611195565b34801561060a57600080fd5b5061030c610619366004611f2a565b61121c565b60006001600160a01b03831661068f5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806106e657506001600160e01b031982166303a24d0760e21b145b8061070157506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060055482106107735760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b6064820152608401610686565b60085460ff166107a557600760405160200161078f91906123ae565b6040516020818303038152906040529050919050565b60066107b0836112b4565b60405160200161078f9291906123ba565b919050565b6003546001600160a01b031633146107f05760405162461bcd60e51b8152600401610686906125ad565b600880549115156101000261ff0019909216919091179055565b6001600160a01b0385163314806108265750610826853361059a565b61088d5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610686565b61089a85858585856113d6565b5050505050565b6003546001600160a01b031633146108cb5760405162461bcd60e51b8152600401610686906125ad565b604051479073bd7d5f86f2343ade4108b638f34f01ad1986b8a59082156108fc029083906000818181858888f1935050505015801561090e573d6000803e3d6000fd5b5050565b34600454146109635760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f7272656374006044820152606401610686565b600b546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b1580156109a757600080fd5b505afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df9190611f46565b6001600160a01b031614610a435760405162461bcd60e51b815260206004820152602560248201527f596f7520646f6e2774206f776e20746869732042415943206e6f722074686973604482015264204d47444360d81b6064820152608401610686565b600b546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b158015610a8757600080fd5b505afa158015610a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abf9190611f46565b6001600160a01b03161415610b27576000818152600d602052604090205460ff1615610aea57600080fd5b6000818152600d60209081526040808320805460ff19166001908117909155600e80548552600f909352922083905554610b239161268f565b600e555b50565b60608151835114610b8f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610686565b6000835167ffffffffffffffff811115610bb957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b8451811015610c8457610c49858281518110610c1457634e487b7160e01b600052603260045260246000fd5b6020026020010151858381518110610c3c57634e487b7160e01b600052603260045260246000fd5b602002602001015161061e565b828281518110610c6957634e487b7160e01b600052603260045260246000fd5b6020908102919091010152610c7d8161276a565b9050610be8565b509392505050565b6003546001600160a01b03163314610cb65760405162461bcd60e51b8152600401610686906125ad565b6008805460ff19166001179055565b6003546001600160a01b03163314610cef5760405162461bcd60e51b8152600401610686906125ad565b610cf9600061158e565b565b336001600160a01b0383161415610d665760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610686565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b3460045414610e235760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f7272656374006044820152606401610686565b600854610100900460ff16610e735760405162461bcd60e51b8152602060048201526016602482015275436f6e7472616374206973206e6f742061637469766560501b6044820152606401610686565b600c546040516370a0823160e01b81523360048201526001916001600160a01b0316906370a082319060240160206040518083038186803b158015610eb757600080fd5b505afa158015610ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eef9190612298565b1015610f305760405162461bcd60e51b815260206004820152601060248201526f596f7520617265206e6f74204241594360801b6044820152606401610686565b60008181526009602052604090205460ff1615610f8f5760405162461bcd60e51b815260206004820152601a60248201527f31204d4744432063616e206272656564206f6e6c79206f6e63650000000000006044820152606401610686565b6000818152600d602052604090205460ff16610fed5760405162461bcd60e51b815260206004820152601760248201527f74686973204d474443206973206e6f74206c69737465640000000000000000006044820152606401610686565b610ff83360016115e0565b600b546040516331a9108f60e11b81526004810183905261107d916001600160a01b031690636352211e9060240160206040518083038186803b15801561103e57600080fd5b505afa158015611052573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110769190611f46565b60016115e0565b6000908152600960205260409020805460ff19166001179055565b6003546001600160a01b031633146110c25760405162461bcd60e51b8152600401610686906125ad565b600a546001906110d290826117a9565b11156111205760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420646f206d6f72652067697665617761790000000000000000006044820152606401610686565b61112b8160016115e0565b600a546111399060016117a9565b600a5550565b6003546001600160a01b031633146111695760405162461bcd60e51b8152600401610686906125ad565b815161117c906007906020850190611d9e565b508051611190906006906020840190611d9e565b505050565b6001600160a01b0385163314806111b157506111b1853361059a565b61120f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610686565b61089a85858585856117bc565b6003546001600160a01b031633146112465760405162461bcd60e51b8152600401610686906125ad565b6001600160a01b0381166112ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610686565b610b278161158e565b6060816112d85750506040805180820190915260018152600360fc1b602082015290565b8160005b811561130257806112ec8161276a565b91506112fb9050600a836126a7565b91506112dc565b60008167ffffffffffffffff81111561132b57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611355576020820181803683370190505b5090505b84156113ce5761136a6001836126bb565b9150611377600a866127a9565b61138290603061268f565b60f81b8183815181106113a557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506113c7600a866126a7565b9450611359565b949350505050565b81518351146113f75760405162461bcd60e51b8152600401610686906125e2565b6001600160a01b03841661141d5760405162461bcd60e51b81526004016106869061251e565b3360005b845181101561152057600085828151811061144c57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600085838151811061147857634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156114c85760405162461bcd60e51b815260040161068690612563565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061150590849061268f565b92505081905550505050806115199061276a565b9050611421565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611570929190612495565b60405180910390a46115868187878787876118e2565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60018163ffffffff16111561176a5760008163ffffffff1667ffffffffffffffff81111561161e57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611647578160200160208202803683370190505b50905060008263ffffffff1667ffffffffffffffff81111561167957634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156116a2578160200160208202803683370190505b50905060005b8363ffffffff168163ffffffff161015611747578063ffffffff166005546116d0919061268f565b838263ffffffff16815181106116f657634e487b7160e01b600052603260045260246000fd5b6020026020010181815250506001828263ffffffff168151811061172a57634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061173f81612785565b9150506116a8565b5061176384838360405180602001604052806000815250611a4d565b5050611788565b61178882600554600160405180602001604052806000815250611bb4565b8063ffffffff16600560008282546117a0919061268f565b90915550505050565b60006117b5828461268f565b9392505050565b6001600160a01b0384166117e25760405162461bcd60e51b81526004016106869061251e565b336117fb8187876117f288611c7b565b61089a88611c7b565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561183c5760405162461bcd60e51b815260040161068690612563565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061187990849061268f565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46118d9828888888888611cd4565b50505050505050565b6001600160a01b0384163b156115865760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061192690899089908890889088906004016123df565b602060405180830381600087803b15801561194057600080fd5b505af1925050508015611970575060408051601f3d908101601f1916820190925261196d9181019061220d565b60015b611a1d5761197c6127ff565b806308c379a014156119b65750611991612817565b8061199c57506119b8565b8060405162461bcd60e51b815260040161068691906124c3565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610686565b6001600160e01b0319811663bc197c8160e01b146118d95760405162461bcd60e51b8152600401610686906124d6565b6001600160a01b038416611a735760405162461bcd60e51b81526004016106869061262a565b8151835114611a945760405162461bcd60e51b8152600401610686906125e2565b3360005b8451811015611b4c57838181518110611ac157634e487b7160e01b600052603260045260246000fd5b6020026020010151600080878481518110611aec57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611b34919061268f565b90915550819050611b448161276a565b915050611a98565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611b9d929190612495565b60405180910390a461089a816000878787876118e2565b6001600160a01b038416611bda5760405162461bcd60e51b81526004016106869061262a565b33611beb816000876117f288611c7b565b6000848152602081815260408083206001600160a01b038916845290915281208054859290611c1b90849061268f565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461089a81600087878787611cd4565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611cc357634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156115865760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611d18908990899088908890889060040161243d565b602060405180830381600087803b158015611d3257600080fd5b505af1925050508015611d62575060408051601f3d908101601f19168201909252611d5f9181019061220d565b60015b611d6e5761197c6127ff565b6001600160e01b0319811663f23a6e6160e01b146118d95760405162461bcd60e51b8152600401610686906124d6565b828054611daa90612702565b90600052602060002090601f016020900481019282611dcc5760008555611e12565b82601f10611de557805160ff1916838001178555611e12565b82800160010185558215611e12579182015b82811115611e12578251825591602001919060010190611df7565b50611e1e929150611e22565b5090565b5b80821115611e1e5760008155600101611e23565b600082601f830112611e47578081fd5b81356020611e548261266b565b604051611e61828261273d565b8381528281019150858301600585901b87018401881015611e80578586fd5b855b85811015611e9e57813584529284019290840190600101611e82565b5090979650505050505050565b803580151581146107c157600080fd5b600082601f830112611ecb578081fd5b813567ffffffffffffffff811115611ee557611ee56127e9565b604051611efc601f8301601f19166020018261273d565b818152846020838601011115611f10578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611f3b578081fd5b81356117b5816128a1565b600060208284031215611f57578081fd5b81516117b5816128a1565b60008060408385031215611f74578081fd5b8235611f7f816128a1565b91506020830135611f8f816128a1565b809150509250929050565b600080600080600060a08688031215611fb1578081fd5b8535611fbc816128a1565b94506020860135611fcc816128a1565b9350604086013567ffffffffffffffff80821115611fe8578283fd5b611ff489838a01611e37565b94506060880135915080821115612009578283fd5b61201589838a01611e37565b9350608088013591508082111561202a578283fd5b5061203788828901611ebb565b9150509295509295909350565b600080600080600060a0868803121561205b578081fd5b8535612066816128a1565b94506020860135612076816128a1565b93506040860135925060608601359150608086013567ffffffffffffffff81111561209f578182fd5b61203788828901611ebb565b600080604083850312156120bd578182fd5b82356120c8816128a1565b91506120d660208401611eab565b90509250929050565b600080604083850312156120f1578182fd5b82356120fc816128a1565b946020939093013593505050565b6000806040838503121561211c578182fd5b823567ffffffffffffffff80821115612133578384fd5b818501915085601f830112612146578384fd5b813560206121538261266b565b604051612160828261273d565b8381528281019150858301600585901b870184018b101561217f578889fd5b8896505b848710156121aa578035612196816128a1565b835260019690960195918301918301612183565b50965050860135925050808211156121c0578283fd5b506121cd85828601611e37565b9150509250929050565b6000602082840312156121e8578081fd5b6117b582611eab565b600060208284031215612202578081fd5b81356117b5816128b6565b60006020828403121561221e578081fd5b81516117b5816128b6565b6000806040838503121561223b578182fd5b823567ffffffffffffffff80821115612252578384fd5b61225e86838701611ebb565b93506020850135915080821115612273578283fd5b506121cd85828601611ebb565b600060208284031215612291578081fd5b5035919050565b6000602082840312156122a9578081fd5b5051919050565b6000815180845260208085019450808401835b838110156122df578151875295820195908201906001016122c3565b509495945050505050565b600081518084526123028160208601602086016126d2565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061233057607f831692505b602080841082141561235057634e487b7160e01b86526022600452602486fd5b8180156123645760018114612375576123a2565b60ff198616895284890196506123a2565b60008881526020902060005b8681101561239a5781548b820152908501908301612381565b505084890196505b50505050505092915050565b60006117b58284612316565b60006123c68285612316565b83516123d68183602088016126d2565b01949350505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061240b908301866122b0565b828103606084015261241d81866122b0565b9050828103608084015261243181856122ea565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612477908301846122ea565b979650505050505050565b6020815260006117b560208301846122b0565b6040815260006124a860408301856122b0565b82810360208401526124ba81856122b0565b95945050505050565b6020815260006117b560208301846122ea565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b600067ffffffffffffffff821115612685576126856127e9565b5060051b60200190565b600082198211156126a2576126a26127bd565b500190565b6000826126b6576126b66127d3565b500490565b6000828210156126cd576126cd6127bd565b500390565b60005b838110156126ed5781810151838201526020016126d5565b838111156126fc576000848401525b50505050565b600181811c9082168061271657607f821691505b6020821081141561273757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715612763576127636127e9565b6040525050565b600060001982141561277e5761277e6127bd565b5060010190565b600063ffffffff8083168181141561279f5761279f6127bd565b6001019392505050565b6000826127b8576127b86127d3565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561281457600481823e5160e01c5b90565b600060443d10156128255790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561285557505050505090565b828501915081518181111561286d5750505050505090565b843d87010160208285010111156128875750505050505090565b6128966020828601018761273d565b509095945050505050565b6001600160a01b0381168114610b2757600080fd5b6001600160e01b031981168114610b2757600080fdfea2646970667358221220466c4b071e867d164a5adec752e29c006da37e4005e639aaa96813b5b09d411264736f6c63430008040033

Deployed Bytecode

0x6080604052600436106101d75760003560e01c80638da5cb5b11610102578063b1d51ad111610095578063e985e9c511610064578063e985e9c51461057f578063e9be0f3f146105c8578063f242432a146105de578063f2fde38b146105fe57600080fd5b8063b1d51ad1146104ef578063b533731d1461051f578063cde564c91461053f578063e82541741461055f57600080fd5b8063a38bffda116100d1578063a38bffda1461047f578063a475b5dd14610495578063ae68ac59146104af578063af9a1cd2146104dc57600080fd5b80638da5cb5b146103dd5780639582b6e51461040f57806395d89b411461042f578063a22cb4651461045f57600080fd5b80632750fc781161017a5780634e1273f4116101495780634e1273f4146103565780635f0f45b21461038357806361b058bf14610398578063715018a6146103c857600080fd5b80632750fc78146102ec5780632eb2c2d61461030e5780633ccfd60b1461032e5780634cccf49c1461034357600080fd5b80630e89341c116101b65780630e89341c1461028157806318160ddd146102a157806319e312cf146102b757806322f3e2d4146102cd57600080fd5b8062fdd58e146101dc57806301ffc9a71461020f57806306fdde031461023f575b600080fd5b3480156101e857600080fd5b506101fc6101f73660046120df565b61061e565b6040519081526020015b60405180910390f35b34801561021b57600080fd5b5061022f61022a3660046121f1565b6106b5565b6040519015158152602001610206565b34801561024b57600080fd5b5061027460405180604001604052806009815260200168109bdc99590812da5960ba1b81525081565b60405161020691906124c3565b34801561028d57600080fd5b5061027461029c366004612280565b610707565b3480156102ad57600080fd5b506101fc60055481565b3480156102c357600080fd5b506101fc600e5481565b3480156102d957600080fd5b5060085461022f90610100900460ff1681565b3480156102f857600080fd5b5061030c6103073660046121d7565b6107c6565b005b34801561031a57600080fd5b5061030c610329366004611f9a565b61080a565b34801561033a57600080fd5b5061030c6108a1565b61030c610351366004612280565b610912565b34801561036257600080fd5b5061037661037136600461210a565b610b2a565b6040516102069190612482565b34801561038f57600080fd5b5061030c610c8c565b3480156103a457600080fd5b5061022f6103b3366004612280565b600d6020526000908152604090205460ff1681565b3480156103d457600080fd5b5061030c610cc5565b3480156103e957600080fd5b506003546001600160a01b03165b6040516001600160a01b039091168152602001610206565b34801561041b57600080fd5b50600c546103f7906001600160a01b031681565b34801561043b57600080fd5b50610274604051806040016040528060048152602001631092da5960e21b81525081565b34801561046b57600080fd5b5061030c61047a3660046120ab565b610cfb565b34801561048b57600080fd5b506101fc60045481565b3480156104a157600080fd5b5060085461022f9060ff1681565b3480156104bb57600080fd5b506101fc6104ca366004612280565b600f6020526000908152604090205481565b61030c6104ea366004612280565b610dd2565b3480156104fb57600080fd5b5061022f61050a366004612280565b60096020526000908152604090205460ff1681565b34801561052b57600080fd5b5061030c61053a366004611f2a565b611098565b34801561054b57600080fd5b50600b546103f7906001600160a01b031681565b34801561056b57600080fd5b5061030c61057a366004612229565b61113f565b34801561058b57600080fd5b5061022f61059a366004611f62565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156105d457600080fd5b506101fc600a5481565b3480156105ea57600080fd5b5061030c6105f9366004612044565b611195565b34801561060a57600080fd5b5061030c610619366004611f2a565b61121c565b60006001600160a01b03831661068f5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806106e657506001600160e01b031982166303a24d0760e21b145b8061070157506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060055482106107735760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b6064820152608401610686565b60085460ff166107a557600760405160200161078f91906123ae565b6040516020818303038152906040529050919050565b60066107b0836112b4565b60405160200161078f9291906123ba565b919050565b6003546001600160a01b031633146107f05760405162461bcd60e51b8152600401610686906125ad565b600880549115156101000261ff0019909216919091179055565b6001600160a01b0385163314806108265750610826853361059a565b61088d5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610686565b61089a85858585856113d6565b5050505050565b6003546001600160a01b031633146108cb5760405162461bcd60e51b8152600401610686906125ad565b604051479073bd7d5f86f2343ade4108b638f34f01ad1986b8a59082156108fc029083906000818181858888f1935050505015801561090e573d6000803e3d6000fd5b5050565b34600454146109635760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f7272656374006044820152606401610686565b600b546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b1580156109a757600080fd5b505afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df9190611f46565b6001600160a01b031614610a435760405162461bcd60e51b815260206004820152602560248201527f596f7520646f6e2774206f776e20746869732042415943206e6f722074686973604482015264204d47444360d81b6064820152608401610686565b600b546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b158015610a8757600080fd5b505afa158015610a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abf9190611f46565b6001600160a01b03161415610b27576000818152600d602052604090205460ff1615610aea57600080fd5b6000818152600d60209081526040808320805460ff19166001908117909155600e80548552600f909352922083905554610b239161268f565b600e555b50565b60608151835114610b8f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610686565b6000835167ffffffffffffffff811115610bb957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b8451811015610c8457610c49858281518110610c1457634e487b7160e01b600052603260045260246000fd5b6020026020010151858381518110610c3c57634e487b7160e01b600052603260045260246000fd5b602002602001015161061e565b828281518110610c6957634e487b7160e01b600052603260045260246000fd5b6020908102919091010152610c7d8161276a565b9050610be8565b509392505050565b6003546001600160a01b03163314610cb65760405162461bcd60e51b8152600401610686906125ad565b6008805460ff19166001179055565b6003546001600160a01b03163314610cef5760405162461bcd60e51b8152600401610686906125ad565b610cf9600061158e565b565b336001600160a01b0383161415610d665760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610686565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b3460045414610e235760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f7272656374006044820152606401610686565b600854610100900460ff16610e735760405162461bcd60e51b8152602060048201526016602482015275436f6e7472616374206973206e6f742061637469766560501b6044820152606401610686565b600c546040516370a0823160e01b81523360048201526001916001600160a01b0316906370a082319060240160206040518083038186803b158015610eb757600080fd5b505afa158015610ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eef9190612298565b1015610f305760405162461bcd60e51b815260206004820152601060248201526f596f7520617265206e6f74204241594360801b6044820152606401610686565b60008181526009602052604090205460ff1615610f8f5760405162461bcd60e51b815260206004820152601a60248201527f31204d4744432063616e206272656564206f6e6c79206f6e63650000000000006044820152606401610686565b6000818152600d602052604090205460ff16610fed5760405162461bcd60e51b815260206004820152601760248201527f74686973204d474443206973206e6f74206c69737465640000000000000000006044820152606401610686565b610ff83360016115e0565b600b546040516331a9108f60e11b81526004810183905261107d916001600160a01b031690636352211e9060240160206040518083038186803b15801561103e57600080fd5b505afa158015611052573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110769190611f46565b60016115e0565b6000908152600960205260409020805460ff19166001179055565b6003546001600160a01b031633146110c25760405162461bcd60e51b8152600401610686906125ad565b600a546001906110d290826117a9565b11156111205760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420646f206d6f72652067697665617761790000000000000000006044820152606401610686565b61112b8160016115e0565b600a546111399060016117a9565b600a5550565b6003546001600160a01b031633146111695760405162461bcd60e51b8152600401610686906125ad565b815161117c906007906020850190611d9e565b508051611190906006906020840190611d9e565b505050565b6001600160a01b0385163314806111b157506111b1853361059a565b61120f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610686565b61089a85858585856117bc565b6003546001600160a01b031633146112465760405162461bcd60e51b8152600401610686906125ad565b6001600160a01b0381166112ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610686565b610b278161158e565b6060816112d85750506040805180820190915260018152600360fc1b602082015290565b8160005b811561130257806112ec8161276a565b91506112fb9050600a836126a7565b91506112dc565b60008167ffffffffffffffff81111561132b57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611355576020820181803683370190505b5090505b84156113ce5761136a6001836126bb565b9150611377600a866127a9565b61138290603061268f565b60f81b8183815181106113a557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506113c7600a866126a7565b9450611359565b949350505050565b81518351146113f75760405162461bcd60e51b8152600401610686906125e2565b6001600160a01b03841661141d5760405162461bcd60e51b81526004016106869061251e565b3360005b845181101561152057600085828151811061144c57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600085838151811061147857634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156114c85760405162461bcd60e51b815260040161068690612563565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061150590849061268f565b92505081905550505050806115199061276a565b9050611421565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611570929190612495565b60405180910390a46115868187878787876118e2565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60018163ffffffff16111561176a5760008163ffffffff1667ffffffffffffffff81111561161e57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611647578160200160208202803683370190505b50905060008263ffffffff1667ffffffffffffffff81111561167957634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156116a2578160200160208202803683370190505b50905060005b8363ffffffff168163ffffffff161015611747578063ffffffff166005546116d0919061268f565b838263ffffffff16815181106116f657634e487b7160e01b600052603260045260246000fd5b6020026020010181815250506001828263ffffffff168151811061172a57634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061173f81612785565b9150506116a8565b5061176384838360405180602001604052806000815250611a4d565b5050611788565b61178882600554600160405180602001604052806000815250611bb4565b8063ffffffff16600560008282546117a0919061268f565b90915550505050565b60006117b5828461268f565b9392505050565b6001600160a01b0384166117e25760405162461bcd60e51b81526004016106869061251e565b336117fb8187876117f288611c7b565b61089a88611c7b565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561183c5760405162461bcd60e51b815260040161068690612563565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061187990849061268f565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46118d9828888888888611cd4565b50505050505050565b6001600160a01b0384163b156115865760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061192690899089908890889088906004016123df565b602060405180830381600087803b15801561194057600080fd5b505af1925050508015611970575060408051601f3d908101601f1916820190925261196d9181019061220d565b60015b611a1d5761197c6127ff565b806308c379a014156119b65750611991612817565b8061199c57506119b8565b8060405162461bcd60e51b815260040161068691906124c3565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610686565b6001600160e01b0319811663bc197c8160e01b146118d95760405162461bcd60e51b8152600401610686906124d6565b6001600160a01b038416611a735760405162461bcd60e51b81526004016106869061262a565b8151835114611a945760405162461bcd60e51b8152600401610686906125e2565b3360005b8451811015611b4c57838181518110611ac157634e487b7160e01b600052603260045260246000fd5b6020026020010151600080878481518110611aec57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611b34919061268f565b90915550819050611b448161276a565b915050611a98565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611b9d929190612495565b60405180910390a461089a816000878787876118e2565b6001600160a01b038416611bda5760405162461bcd60e51b81526004016106869061262a565b33611beb816000876117f288611c7b565b6000848152602081815260408083206001600160a01b038916845290915281208054859290611c1b90849061268f565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461089a81600087878787611cd4565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611cc357634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156115865760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611d18908990899088908890889060040161243d565b602060405180830381600087803b158015611d3257600080fd5b505af1925050508015611d62575060408051601f3d908101601f19168201909252611d5f9181019061220d565b60015b611d6e5761197c6127ff565b6001600160e01b0319811663f23a6e6160e01b146118d95760405162461bcd60e51b8152600401610686906124d6565b828054611daa90612702565b90600052602060002090601f016020900481019282611dcc5760008555611e12565b82601f10611de557805160ff1916838001178555611e12565b82800160010185558215611e12579182015b82811115611e12578251825591602001919060010190611df7565b50611e1e929150611e22565b5090565b5b80821115611e1e5760008155600101611e23565b600082601f830112611e47578081fd5b81356020611e548261266b565b604051611e61828261273d565b8381528281019150858301600585901b87018401881015611e80578586fd5b855b85811015611e9e57813584529284019290840190600101611e82565b5090979650505050505050565b803580151581146107c157600080fd5b600082601f830112611ecb578081fd5b813567ffffffffffffffff811115611ee557611ee56127e9565b604051611efc601f8301601f19166020018261273d565b818152846020838601011115611f10578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611f3b578081fd5b81356117b5816128a1565b600060208284031215611f57578081fd5b81516117b5816128a1565b60008060408385031215611f74578081fd5b8235611f7f816128a1565b91506020830135611f8f816128a1565b809150509250929050565b600080600080600060a08688031215611fb1578081fd5b8535611fbc816128a1565b94506020860135611fcc816128a1565b9350604086013567ffffffffffffffff80821115611fe8578283fd5b611ff489838a01611e37565b94506060880135915080821115612009578283fd5b61201589838a01611e37565b9350608088013591508082111561202a578283fd5b5061203788828901611ebb565b9150509295509295909350565b600080600080600060a0868803121561205b578081fd5b8535612066816128a1565b94506020860135612076816128a1565b93506040860135925060608601359150608086013567ffffffffffffffff81111561209f578182fd5b61203788828901611ebb565b600080604083850312156120bd578182fd5b82356120c8816128a1565b91506120d660208401611eab565b90509250929050565b600080604083850312156120f1578182fd5b82356120fc816128a1565b946020939093013593505050565b6000806040838503121561211c578182fd5b823567ffffffffffffffff80821115612133578384fd5b818501915085601f830112612146578384fd5b813560206121538261266b565b604051612160828261273d565b8381528281019150858301600585901b870184018b101561217f578889fd5b8896505b848710156121aa578035612196816128a1565b835260019690960195918301918301612183565b50965050860135925050808211156121c0578283fd5b506121cd85828601611e37565b9150509250929050565b6000602082840312156121e8578081fd5b6117b582611eab565b600060208284031215612202578081fd5b81356117b5816128b6565b60006020828403121561221e578081fd5b81516117b5816128b6565b6000806040838503121561223b578182fd5b823567ffffffffffffffff80821115612252578384fd5b61225e86838701611ebb565b93506020850135915080821115612273578283fd5b506121cd85828601611ebb565b600060208284031215612291578081fd5b5035919050565b6000602082840312156122a9578081fd5b5051919050565b6000815180845260208085019450808401835b838110156122df578151875295820195908201906001016122c3565b509495945050505050565b600081518084526123028160208601602086016126d2565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061233057607f831692505b602080841082141561235057634e487b7160e01b86526022600452602486fd5b8180156123645760018114612375576123a2565b60ff198616895284890196506123a2565b60008881526020902060005b8681101561239a5781548b820152908501908301612381565b505084890196505b50505050505092915050565b60006117b58284612316565b60006123c68285612316565b83516123d68183602088016126d2565b01949350505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061240b908301866122b0565b828103606084015261241d81866122b0565b9050828103608084015261243181856122ea565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612477908301846122ea565b979650505050505050565b6020815260006117b560208301846122b0565b6040815260006124a860408301856122b0565b82810360208401526124ba81856122b0565b95945050505050565b6020815260006117b560208301846122ea565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b600067ffffffffffffffff821115612685576126856127e9565b5060051b60200190565b600082198211156126a2576126a26127bd565b500190565b6000826126b6576126b66127d3565b500490565b6000828210156126cd576126cd6127bd565b500390565b60005b838110156126ed5781810151838201526020016126d5565b838111156126fc576000848401525b50505050565b600181811c9082168061271657607f821691505b6020821081141561273757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715612763576127636127e9565b6040525050565b600060001982141561277e5761277e6127bd565b5060010190565b600063ffffffff8083168181141561279f5761279f6127bd565b6001019392505050565b6000826127b8576127b86127d3565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561281457600481823e5160e01c5b90565b600060443d10156128255790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561285557505050505090565b828501915081518181111561286d5750505050505090565b843d87010160208285010111156128875750505050505090565b6128966020828601018761273d565b509095945050505050565b6001600160a01b0381168114610b2757600080fd5b6001600160e01b031981168114610b2757600080fdfea2646970667358221220466c4b071e867d164a5adec752e29c006da37e4005e639aaa96813b5b09d411264736f6c63430008040033

Deployed Bytecode Sourcemap

47429:4400:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20811:231;;;;;;;;;;-1:-1:-1;20811:231:0;;;;;:::i;:::-;;:::i;:::-;;;21644:25:1;;;21632:2;21617:18;20811:231:0;;;;;;;;19834:310;;;;;;;;;;-1:-1:-1;19834:310:0;;;;;:::i;:::-;;:::i;:::-;;;12798:14:1;;12791:22;12773:41;;12761:2;12746:18;19834:310:0;12728:92:1;47479:41:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;47479:41:0;;;;;;;;;;;;:::i;51070:441::-;;;;;;;;;;-1:-1:-1;51070:441:0;;;;;:::i;:::-;;:::i;47688:30::-;;;;;;;;;;;;;;;;48127:34;;;;;;;;;;;;;;;;47809:20;;;;;;;;;;-1:-1:-1;47809:20:0;;;;;;;;;;;49051:137;;;;;;;;;;-1:-1:-1;49051:137:0;;;;;:::i;:::-;;:::i;:::-;;22906:442;;;;;;;;;;-1:-1:-1;22906:442:0;;;;;:::i;:::-;;:::i;51613:213::-;;;;;;;;;;;;;:::i;49470:569::-;;;;;;:::i;:::-;;:::i;21208:524::-;;;;;;;;;;-1:-1:-1;21208:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;48276:98::-;;;;;;;;;;;;;:::i;48074:46::-;;;;;;;;;;-1:-1:-1;48074:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;1364:94;;;;;;;;;;;;;:::i;713:87::-;;;;;;;;;;-1:-1:-1;786:6:0;;-1:-1:-1;;;;;786:6:0;713:87;;;-1:-1:-1;;;;;10457:32:1;;;10439:51;;10427:2;10412:18;713:87:0;10394:102:1;47996:71:0;;;;;;;;;;-1:-1:-1;47996:71:0;;;;-1:-1:-1;;;;;47996:71:0;;;47527:38;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;47527:38:0;;;;;21805:311;;;;;;;;;;-1:-1:-1;21805:311:0;;;;;:::i;:::-;;:::i;47572:44::-;;;;;;;;;;;;;;;;47784:18;;;;;;;;;;-1:-1:-1;47784:18:0;;;;;;;;48168:47;;;;;;;;;;-1:-1:-1;48168:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;50113:549;;;;;;:::i;:::-;;:::i;47836:40::-;;;;;;;;;;-1:-1:-1;47836:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;50754:236;;;;;;;;;;-1:-1:-1;50754:236:0;;;;;:::i;:::-;;:::i;47918:71::-;;;;;;;;;;-1:-1:-1;47918:71:0;;;;-1:-1:-1;;;;;47918:71:0;;;49256:197;;;;;;;;;;-1:-1:-1;49256:197:0;;;;;:::i;:::-;;:::i;22188:168::-;;;;;;;;;;-1:-1:-1;22188:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;22311:27:0;;;22287:4;22311:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;22188:168;47883:28;;;;;;;;;;;;;;;;22428:401;;;;;;;;;;-1:-1:-1;22428:401:0;;;;;:::i;:::-;;:::i;1613:192::-;;;;;;;;;;-1:-1:-1;1613:192:0;;;;;:::i;:::-;;:::i;20811:231::-;20897:7;-1:-1:-1;;;;;20925:21:0;;20917:77;;;;-1:-1:-1;;;20917:77:0;;14305:2:1;20917:77:0;;;14287:21:1;14344:2;14324:18;;;14317:30;14383:34;14363:18;;;14356:62;-1:-1:-1;;;14434:18:1;;;14427:41;14485:19;;20917:77:0;;;;;;;;;-1:-1:-1;21012:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;21012:22:0;;;;;;;;;;;;20811:231::o;19834:310::-;19936:4;-1:-1:-1;;;;;;19973:41:0;;-1:-1:-1;;;19973:41:0;;:110;;-1:-1:-1;;;;;;;20031:52:0;;-1:-1:-1;;;20031:52:0;19973:110;:163;;;-1:-1:-1;;;;;;;;;;11753:40:0;;;20100:36;19953:183;19834:310;-1:-1:-1;;19834:310:0:o;51070:441::-;51205:13;51254:11;;51245:8;:20;51237:81;;;;-1:-1:-1;;;51237:81:0;;18952:2:1;51237:81:0;;;18934:21:1;18991:2;18971:18;;;18964:30;19030:34;19010:18;;;19003:62;-1:-1:-1;;;19081:18:1;;;19074:46;19137:19;;51237:81:0;18924:238:1;51237:81:0;51334:6;;;;51329:175;;51388:8;51371:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;51357:41;;51070:441;;;:::o;51329:175::-;51462:7;51471:19;:8;:17;:19::i;:::-;51445:46;;;;;;;;;:::i;51329:175::-;51070:441;;;:::o;49051:137::-;786:6;;-1:-1:-1;;;;;786:6:0;176:10;933:23;925:68;;;;-1:-1:-1;;;925:68:0;;;;;;;:::i;:::-;49160:8:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;49160:20:0;;::::1;::::0;;;::::1;::::0;;49051:137::o;22906:442::-;-1:-1:-1;;;;;23139:20:0;;176:10;23139:20;;:60;;-1:-1:-1;23163:36:0;23180:4;176:10;22188:168;:::i;23163:36::-;23117:160;;;;-1:-1:-1;;;23117:160:0;;17410:2:1;23117:160:0;;;17392:21:1;17449:2;17429:18;;;17422:30;17488:34;17468:18;;;17461:62;-1:-1:-1;;;17539:18:1;;;17532:48;17597:19;;23117:160:0;17382:240:1;23117:160:0;23288:52;23311:4;23317:2;23321:3;23326:7;23335:4;23288:22;:52::i;:::-;22906:442;;;;;:::o;51613:213::-;786:6;;-1:-1:-1;;;;;786:6:0;176:10;933:23;925:68;;;;-1:-1:-1;;;925:68:0;;;;;;;:::i;:::-;51740:78:::1;::::0;51708:21:::1;::::0;51756:42:::1;::::0;51740:78;::::1;;;::::0;51708:21;;51693:12:::1;51740:78:::0;51693:12;51740:78;51708:21;51756:42;51740:78;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;1004:1;51613:213::o:0;49470:569::-;49620:9;49608:8;;:21;49600:65;;;;-1:-1:-1;;;49600:65:0;;16238:2:1;49600:65:0;;;16220:21:1;16277:2;16257:18;;;16250:30;16316:33;16296:18;;;16289:61;16367:18;;49600:65:0;16210:181:1;49600:65:0;49684:4;;:22;;-1:-1:-1;;;49684:22:0;;;;;21644:25:1;;;49708:10:0;;-1:-1:-1;;;;;49684:4:0;;:12;;21617:18:1;;49684:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49684:34:0;;49676:83;;;;-1:-1:-1;;;49676:83:0;;16598:2:1;49676:83:0;;;16580:21:1;16637:2;16617:18;;;16610:30;16676:34;16656:18;;;16649:62;-1:-1:-1;;;16727:18:1;;;16720:35;16772:19;;49676:83:0;16570:227:1;49676:83:0;49783:4;;:22;;-1:-1:-1;;;49783:22:0;;;;;21644:25:1;;;49807:10:0;;-1:-1:-1;;;;;49783:4:0;;:12;;21617:18:1;;49783:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49783:34:0;;49780:252;;;49837:24;;;;:14;:24;;;;;;;;:31;49829:40;;;;;;49882:24;;;;:14;:24;;;;;;;;:29;;-1:-1:-1;;49882:29:0;49907:4;49882:29;;;;;;49937:19;;;49924:33;;:12;:33;;;;;:42;;;49999:19;:21;;;:::i;:::-;49979:19;:41;49780:252;49470:569;:::o;21208:524::-;21364:16;21425:3;:10;21406:8;:15;:29;21398:83;;;;-1:-1:-1;;;21398:83:0;;20479:2:1;21398:83:0;;;20461:21:1;20518:2;20498:18;;;20491:30;20557:34;20537:18;;;20530:62;-1:-1:-1;;;20608:18:1;;;20601:39;20657:19;;21398:83:0;20451:231:1;21398:83:0;21494:30;21541:8;:15;21527:30;;;;;;-1:-1:-1;;;21527:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21527:30:0;;21494:63;;21575:9;21570:122;21594:8;:15;21590:1;:19;21570:122;;;21650:30;21660:8;21669:1;21660:11;;;;;;-1:-1:-1;;;21660:11:0;;;;;;;;;;;;;;;21673:3;21677:1;21673:6;;;;;;-1:-1:-1;;;21673:6:0;;;;;;;;;;;;;;;21650:9;:30::i;:::-;21631:13;21645:1;21631:16;;;;;;-1:-1:-1;;;21631:16:0;;;;;;;;;;;;;;;;;;:49;21611:3;;;:::i;:::-;;;21570:122;;;-1:-1:-1;21711:13:0;21208:524;-1:-1:-1;;;21208:524:0:o;48276:98::-;786:6;;-1:-1:-1;;;;;786:6:0;176:10;933:23;925:68;;;;-1:-1:-1;;;925:68:0;;;;;;;:::i;:::-;48353:6:::1;:13:::0;;-1:-1:-1;;48353:13:0::1;48362:4;48353:13;::::0;;48276:98::o;1364:94::-;786:6;;-1:-1:-1;;;;;786:6:0;176:10;933:23;925:68;;;;-1:-1:-1;;;925:68:0;;;;;;;:::i;:::-;1429:21:::1;1447:1;1429:9;:21::i;:::-;1364:94::o:0;21805:311::-;176:10;-1:-1:-1;;;;;21908:24:0;;;;21900:78;;;;-1:-1:-1;;;21900:78:0;;20069:2:1;21900:78:0;;;20051:21:1;20108:2;20088:18;;;20081:30;20147:34;20127:18;;;20120:62;-1:-1:-1;;;20198:18:1;;;20191:39;20247:19;;21900:78:0;20041:231:1;21900:78:0;176:10;21991:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;21991:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;21991:53:0;;;;;;;;;;22060:48;;12773:41:1;;;21991:42:0;;176:10;22060:48;;12746:18:1;22060:48:0;;;;;;;21805:311;;:::o;50113:549::-;50233:9;50221:8;;:21;50213:65;;;;-1:-1:-1;;;50213:65:0;;16238:2:1;50213:65:0;;;16220:21:1;16277:2;16257:18;;;16250:30;16316:33;16296:18;;;16289:61;16367:18;;50213:65:0;16210:181:1;50213:65:0;50297:8;;;;;;;50289:43;;;;-1:-1:-1;;;50289:43:0;;18240:2:1;50289:43:0;;;18222:21:1;18279:2;18259:18;;;18252:30;-1:-1:-1;;;18298:18:1;;;18291:52;18360:18;;50289:43:0;18212:172:1;50289:43:0;50351:4;;:26;;-1:-1:-1;;;50351:26:0;;50366:10;50351:26;;;10439:51:1;50379:1:0;;-1:-1:-1;;;;;50351:4:0;;:14;;10412:18:1;;50351:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:29;;50343:57;;;;-1:-1:-1;;;50343:57:0;;19369:2:1;50343:57:0;;;19351:21:1;19408:2;19388:18;;;19381:30;-1:-1:-1;;;19427:18:1;;;19420:46;19483:18;;50343:57:0;19341:166:1;50343:57:0;50420:18;;;;:8;:18;;;;;;;;50419:19;50411:57;;;;-1:-1:-1;;;50411:57:0;;19714:2:1;50411:57:0;;;19696:21:1;19753:2;19733:18;;;19726:30;19792:28;19772:18;;;19765:56;19838:18;;50411:57:0;19686:176:1;50411:57:0;50487:24;;;;:14;:24;;;;;;;;50479:59;;;;-1:-1:-1;;;50479:59:0;;15886:2:1;50479:59:0;;;15868:21:1;15925:2;15905:18;;;15898:30;15964:25;15944:18;;;15937:53;16007:18;;50479:59:0;15858:173:1;50479:59:0;50549:18;50554:10;50565:1;50549:4;:18::i;:::-;50583:4;;:22;;-1:-1:-1;;;50583:22:0;;;;;21644:25:1;;;50578:30:0;;-1:-1:-1;;;;;50583:4:0;;:12;;21617:18:1;;50583:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50606:1;50578:4;:30::i;:::-;50619:18;;;;:8;:18;;;;;:23;;-1:-1:-1;;50619:23:0;50638:4;50619:23;;;50113:549::o;50754:236::-;786:6;;-1:-1:-1;;;;;786:6:0;176:10;933:23;925:68;;;;-1:-1:-1;;;925:68:0;;;;;;;:::i;:::-;50865:13:::1;::::0;50887:1:::1;::::0;50865:20:::1;::::0;50887:1;50865:17:::1;:20::i;:::-;:23;;50857:58;;;::::0;-1:-1:-1;;;50857:58:0;;15124:2:1;50857:58:0::1;::::0;::::1;15106:21:1::0;15163:2;15143:18;;;15136:30;15202:25;15182:18;;;15175:53;15245:18;;50857:58:0::1;15096:173:1::0;50857:58:0::1;50926:11;50931:3;50935:1;50926:4;:11::i;:::-;50962:13;::::0;:20:::1;::::0;50980:1:::1;50962:17;:20::i;:::-;50948:13;:34:::0;-1:-1:-1;50754:236:0:o;49256:197::-;786:6;;-1:-1:-1;;;;;786:6:0;176:10;933:23;925:68;;;;-1:-1:-1;;;925:68:0;;;;;;;:::i;:::-;49400:20;;::::1;::::0;:8:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;49431:14:0;;::::1;::::0;:7:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;:::-;;49256:197:::0;;:::o;22428:401::-;-1:-1:-1;;;;;22636:20:0;;176:10;22636:20;;:60;;-1:-1:-1;22660:36:0;22677:4;176:10;22188:168;:::i;22660:36::-;22614:151;;;;-1:-1:-1;;;22614:151:0;;15476:2:1;22614:151:0;;;15458:21:1;15515:2;15495:18;;;15488:30;15554:34;15534:18;;;15527:62;-1:-1:-1;;;15605:18:1;;;15598:39;15654:19;;22614:151:0;15448:231:1;22614:151:0;22776:45;22794:4;22800:2;22804;22808:6;22816:4;22776:17;:45::i;1613:192::-;786:6;;-1:-1:-1;;;;;786:6:0;176:10;933:23;925:68;;;;-1:-1:-1;;;925:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1702:22:0;::::1;1694:73;;;::::0;-1:-1:-1;;;1694:73:0;;14717:2:1;1694:73:0::1;::::0;::::1;14699:21:1::0;14756:2;14736:18;;;14729:30;14795:34;14775:18;;;14768:62;-1:-1:-1;;;14846:18:1;;;14839:36;14892:19;;1694:73:0::1;14689:228:1::0;1694:73:0::1;1778:19;1788:8;1778:9;:19::i;45672:723::-:0;45728:13;45949:10;45945:53;;-1:-1:-1;;45976:10:0;;;;;;;;;;;;-1:-1:-1;;;45976:10:0;;;;;45672:723::o;45945:53::-;46023:5;46008:12;46064:78;46071:9;;46064:78;;46097:8;;;;:::i;:::-;;-1:-1:-1;46120:10:0;;-1:-1:-1;46128:2:0;46120:10;;:::i;:::-;;;46064:78;;;46152:19;46184:6;46174:17;;;;;;-1:-1:-1;;;46174:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46174:17:0;;46152:39;;46202:154;46209:10;;46202:154;;46236:11;46246:1;46236:11;;:::i;:::-;;-1:-1:-1;46305:10:0;46313:2;46305:5;:10;:::i;:::-;46292:24;;:2;:24;:::i;:::-;46279:39;;46262:6;46269;46262:14;;;;;;-1:-1:-1;;;46262:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;46262:56:0;;;;;;;;-1:-1:-1;46333:11:0;46342:2;46333:11;;:::i;:::-;;;46202:154;;;46380:6;45672:723;-1:-1:-1;;;;45672:723:0:o;24990:1074::-;25217:7;:14;25203:3;:10;:28;25195:81;;;;-1:-1:-1;;;25195:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25295:16:0;;25287:66;;;;-1:-1:-1;;;25287:66:0;;;;;;;:::i;:::-;176:10;25366:16;25483:421;25507:3;:10;25503:1;:14;25483:421;;;25539:10;25552:3;25556:1;25552:6;;;;;;-1:-1:-1;;;25552:6:0;;;;;;;;;;;;;;;25539:19;;25573:14;25590:7;25598:1;25590:10;;;;;;-1:-1:-1;;;25590:10:0;;;;;;;;;;;;;;;;;;;;25617:19;25639:13;;;;;;;;;;-1:-1:-1;;;;;25639:19:0;;;;;;;;;;;;25590:10;;-1:-1:-1;25681:21:0;;;;25673:76;;;;-1:-1:-1;;;25673:76:0;;;;;;;:::i;:::-;25793:9;:13;;;;;;;;;;;-1:-1:-1;;;;;25793:19:0;;;;;;;;;;25815:20;;;25793:42;;25865:17;;;;;;;:27;;25815:20;;25793:9;25865:27;;25815:20;;25865:27;:::i;:::-;;;;;;;;25483:421;;;25519:3;;;;:::i;:::-;;;25483:421;;;;25951:2;-1:-1:-1;;;;;25921:47:0;25945:4;-1:-1:-1;;;;;25921:47:0;25935:8;-1:-1:-1;;;;;25921:47:0;;25955:3;25960:7;25921:47;;;;;;;:::i;:::-;;;;;;;;25981:75;26017:8;26027:4;26033:2;26037:3;26042:7;26051:4;25981:35;:75::i;:::-;24990:1074;;;;;;:::o;1813:173::-;1888:6;;;-1:-1:-1;;;;;1905:17:0;;;-1:-1:-1;;;;;;1905:17:0;;;;;;;1938:40;;1888:6;;;1905:17;1888:6;;1938:40;;1869:16;;1938:40;1813:173;;:::o;48432:519::-;48504:1;48496:5;:9;;;48492:419;;;48522:20;48567:5;48559:14;;48545:29;;;;;;-1:-1:-1;;;48545:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48545:29:0;;48522:52;;48589:24;48638:5;48630:14;;48616:29;;;;;;-1:-1:-1;;;48616:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48616:29:0;;48589:56;;48667:8;48662:127;48685:5;48681:9;;:1;:9;;;48662:127;;;48739:1;48725:15;;:11;;:15;;;;:::i;:::-;48716:3;48720:1;48716:6;;;;;;;;-1:-1:-1;;;48716:6:0;;;;;;;;;;;;;;:24;;;;;48772:1;48759:7;48767:1;48759:10;;;;;;;;-1:-1:-1;;;48759:10:0;;;;;;;;;;;;;;;;;;:14;48692:3;;;;:::i;:::-;;;;48662:127;;;;48805:32;48816:2;48820:3;48825:7;48805:32;;;;;;;;;;;;:10;:32::i;:::-;48492:419;;;;;48870:29;48876:2;48880:11;;48893:1;48870:29;;;;;;;;;;;;:5;:29::i;:::-;48938:5;48923:20;;:11;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;48432:519:0:o;41281:98::-;41339:7;41366:5;41370:1;41366;:5;:::i;:::-;41359:12;41281:98;-1:-1:-1;;;41281:98:0:o;23812:820::-;-1:-1:-1;;;;;24000:16:0;;23992:66;;;;-1:-1:-1;;;23992:66:0;;;;;;;:::i;:::-;176:10;24115:96;176:10;24146:4;24152:2;24156:21;24174:2;24156:17;:21::i;:::-;24179:25;24197:6;24179:17;:25::i;24115:96::-;24224:19;24246:13;;;;;;;;;;;-1:-1:-1;;;;;24246:19:0;;;;;;;;;;24284:21;;;;24276:76;;;;-1:-1:-1;;;24276:76:0;;;;;;;:::i;:::-;24388:9;:13;;;;;;;;;;;-1:-1:-1;;;;;24388:19:0;;;;;;;;;;24410:20;;;24388:42;;24452:17;;;;;;;:27;;24410:20;;24388:9;24452:27;;24410:20;;24452:27;:::i;:::-;;;;-1:-1:-1;;24497:46:0;;;21854:25:1;;;21910:2;21895:18;;21888:34;;;-1:-1:-1;;;;;24497:46:0;;;;;;;;;;;;;;21827:18:1;24497:46:0;;;;;;;24556:68;24587:8;24597:4;24603:2;24607;24611:6;24619:4;24556:30;:68::i;:::-;23812:820;;;;;;;:::o;33079:813::-;-1:-1:-1;;;;;33319:13:0;;3051:20;3099:8;33315:570;;33355:79;;-1:-1:-1;;;33355:79:0;;-1:-1:-1;;;;;33355:43:0;;;;;:79;;33399:8;;33409:4;;33415:3;;33420:7;;33429:4;;33355:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33355:79:0;;;;;;;;-1:-1:-1;;33355:79:0;;;;;;;;;;;;:::i;:::-;;;33351:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33747:6;33740:14;;-1:-1:-1;;;33740:14:0;;;;;;;;:::i;33351:523::-;;;33796:62;;-1:-1:-1;;;33796:62:0;;13475:2:1;33796:62:0;;;13457:21:1;13514:2;13494:18;;;13487:30;13553:34;13533:18;;;13526:62;-1:-1:-1;;;13604:18:1;;;13597:50;13664:19;;33796:62:0;13447:242:1;33351:523:0;-1:-1:-1;;;;;;33516:60:0;;-1:-1:-1;;;33516:60:0;33512:159;;33601:50;;-1:-1:-1;;;33601:50:0;;;;;;;:::i;28352:735::-;-1:-1:-1;;;;;28530:16:0;;28522:62;;;;-1:-1:-1;;;28522:62:0;;;;;;;:::i;:::-;28617:7;:14;28603:3;:10;:28;28595:81;;;;-1:-1:-1;;;28595:81:0;;;;;;;:::i;:::-;176:10;28689:16;28812:103;28836:3;:10;28832:1;:14;28812:103;;;28893:7;28901:1;28893:10;;;;;;-1:-1:-1;;;28893:10:0;;;;;;;;;;;;;;;28868:9;:17;28878:3;28882:1;28878:6;;;;;;-1:-1:-1;;;28878:6:0;;;;;;;;;;;;;;;28868:17;;;;;;;;;;;:21;28886:2;-1:-1:-1;;;;;28868:21:0;-1:-1:-1;;;;;28868:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;28848:3:0;;-1:-1:-1;28848:3:0;;;:::i;:::-;;;;28812:103;;;;28968:2;-1:-1:-1;;;;;28932:53:0;28964:1;-1:-1:-1;;;;;28932:53:0;28946:8;-1:-1:-1;;;;;28932:53:0;;28972:3;28977:7;28932:53;;;;;;;:::i;:::-;;;;;;;;28998:81;29034:8;29052:1;29056:2;29060:3;29065:7;29074:4;28998:35;:81::i;27397:599::-;-1:-1:-1;;;;;27555:21:0;;27547:67;;;;-1:-1:-1;;;27547:67:0;;;;;;;:::i;:::-;176:10;27671:107;176:10;27627:16;27714:7;27723:21;27741:2;27723:17;:21::i;27671:107::-;27791:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27791:22:0;;;;;;;;;:32;;27817:6;;27791:9;:32;;27817:6;;27791:32;:::i;:::-;;;;-1:-1:-1;;27839:57:0;;;21854:25:1;;;21910:2;21895:18;;21888:34;;;-1:-1:-1;;;;;27839:57:0;;;;27872:1;;27839:57;;;;;;21827:18:1;27839:57:0;;;;;;;27909:79;27940:8;27958:1;27962:7;27971:2;27975:6;27983:4;27909:30;:79::i;33900:198::-;34020:16;;;34034:1;34020:16;;;;;;;;;33966;;33995:22;;34020:16;;;;;;;;;;;;-1:-1:-1;34020:16:0;33995:41;;34058:7;34047:5;34053:1;34047:8;;;;;;-1:-1:-1;;;34047:8:0;;;;;;;;;;;;;;;;;;:18;34085:5;33900:198;-1:-1:-1;;33900:198:0:o;32327:744::-;-1:-1:-1;;;;;32542:13:0;;3051:20;3099:8;32538:526;;32578:72;;-1:-1:-1;;;32578:72:0;;-1:-1:-1;;;;;32578:38:0;;;;;:72;;32617:8;;32627:4;;32633:2;;32637:6;;32645:4;;32578:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32578:72:0;;;;;;;;-1:-1:-1;;32578:72:0;;;;;;;;;;;;:::i;:::-;;;32574:479;;;;:::i;:::-;-1:-1:-1;;;;;;32700:55:0;;-1:-1:-1;;;32700:55:0;32696:154;;32780:50;;-1:-1:-1;;;32780:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:755:1;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;183:6;170:20;209:4;232:43;272:2;232:43;:::i;:::-;304:2;298:9;316:31;344:2;336:6;316:31;:::i;:::-;382:18;;;416:15;;;;-1:-1:-1;451:15:1;;;501:1;497:10;;;485:23;;481:32;;478:41;-1:-1:-1;475:2:1;;;536:5;529;522:20;475:2;562:5;576:163;590:2;587:1;584:9;576:163;;;647:17;;635:30;;685:12;;;;717;;;;608:1;601:9;576:163;;;-1:-1:-1;757:6:1;;78:691;-1:-1:-1;;;;;;;78:691:1:o;774:160::-;839:20;;895:13;;888:21;878:32;;868:2;;924:1;921;914:12;939:575;981:5;1034:3;1027:4;1019:6;1015:17;1011:27;1001:2;;1056:5;1049;1042:20;1001:2;1096:6;1083:20;1122:18;1118:2;1115:26;1112:2;;;1144:18;;:::i;:::-;1193:2;1187:9;1205:67;1260:2;1241:13;;-1:-1:-1;;1237:27:1;1266:4;1233:38;1187:9;1205:67;:::i;:::-;1296:2;1288:6;1281:18;1342:3;1335:4;1330:2;1322:6;1318:15;1314:26;1311:35;1308:2;;;1363:5;1356;1349:20;1308:2;1431;1424:4;1416:6;1412:17;1405:4;1397:6;1393:17;1380:54;1454:15;;;1471:4;1450:26;1443:41;;;;1458:6;991:523;-1:-1:-1;;991:523:1:o;1519:257::-;1578:6;1631:2;1619:9;1610:7;1606:23;1602:32;1599:2;;;1652:6;1644;1637:22;1599:2;1696:9;1683:23;1715:31;1740:5;1715:31;:::i;1781:261::-;1851:6;1904:2;1892:9;1883:7;1879:23;1875:32;1872:2;;;1925:6;1917;1910:22;1872:2;1962:9;1956:16;1981:31;2006:5;1981:31;:::i;2047:398::-;2115:6;2123;2176:2;2164:9;2155:7;2151:23;2147:32;2144:2;;;2197:6;2189;2182:22;2144:2;2241:9;2228:23;2260:31;2285:5;2260:31;:::i;:::-;2310:5;-1:-1:-1;2367:2:1;2352:18;;2339:32;2380:33;2339:32;2380:33;:::i;:::-;2432:7;2422:17;;;2134:311;;;;;:::o;2450:1111::-;2604:6;2612;2620;2628;2636;2689:3;2677:9;2668:7;2664:23;2660:33;2657:2;;;2711:6;2703;2696:22;2657:2;2755:9;2742:23;2774:31;2799:5;2774:31;:::i;:::-;2824:5;-1:-1:-1;2881:2:1;2866:18;;2853:32;2894:33;2853:32;2894:33;:::i;:::-;2946:7;-1:-1:-1;3004:2:1;2989:18;;2976:32;3027:18;3057:14;;;3054:2;;;3089:6;3081;3074:22;3054:2;3117:61;3170:7;3161:6;3150:9;3146:22;3117:61;:::i;:::-;3107:71;;3231:2;3220:9;3216:18;3203:32;3187:48;;3260:2;3250:8;3247:16;3244:2;;;3281:6;3273;3266:22;3244:2;3309:63;3364:7;3353:8;3342:9;3338:24;3309:63;:::i;:::-;3299:73;;3425:3;3414:9;3410:19;3397:33;3381:49;;3455:2;3445:8;3442:16;3439:2;;;3476:6;3468;3461:22;3439:2;;3504:51;3547:7;3536:8;3525:9;3521:24;3504:51;:::i;:::-;3494:61;;;2647:914;;;;;;;;:::o;3566:754::-;3670:6;3678;3686;3694;3702;3755:3;3743:9;3734:7;3730:23;3726:33;3723:2;;;3777:6;3769;3762:22;3723:2;3821:9;3808:23;3840:31;3865:5;3840:31;:::i;:::-;3890:5;-1:-1:-1;3947:2:1;3932:18;;3919:32;3960:33;3919:32;3960:33;:::i;:::-;4012:7;-1:-1:-1;4066:2:1;4051:18;;4038:32;;-1:-1:-1;4117:2:1;4102:18;;4089:32;;-1:-1:-1;4172:3:1;4157:19;;4144:33;4200:18;4189:30;;4186:2;;;4237:6;4229;4222:22;4186:2;4265:49;4306:7;4297:6;4286:9;4282:22;4265:49;:::i;4325:325::-;4390:6;4398;4451:2;4439:9;4430:7;4426:23;4422:32;4419:2;;;4472:6;4464;4457:22;4419:2;4516:9;4503:23;4535:31;4560:5;4535:31;:::i;:::-;4585:5;-1:-1:-1;4609:35:1;4640:2;4625:18;;4609:35;:::i;:::-;4599:45;;4409:241;;;;;:::o;4655:325::-;4723:6;4731;4784:2;4772:9;4763:7;4759:23;4755:32;4752:2;;;4805:6;4797;4790:22;4752:2;4849:9;4836:23;4868:31;4893:5;4868:31;:::i;:::-;4918:5;4970:2;4955:18;;;;4942:32;;-1:-1:-1;;;4742:238:1:o;4985:1343::-;5103:6;5111;5164:2;5152:9;5143:7;5139:23;5135:32;5132:2;;;5185:6;5177;5170:22;5132:2;5230:9;5217:23;5259:18;5300:2;5292:6;5289:14;5286:2;;;5321:6;5313;5306:22;5286:2;5364:6;5353:9;5349:22;5339:32;;5409:7;5402:4;5398:2;5394:13;5390:27;5380:2;;5436:6;5428;5421:22;5380:2;5477;5464:16;5499:4;5522:43;5562:2;5522:43;:::i;:::-;5594:2;5588:9;5606:31;5634:2;5626:6;5606:31;:::i;:::-;5672:18;;;5706:15;;;;-1:-1:-1;5741:11:1;;;5783:1;5779:10;;;5771:19;;5767:28;;5764:41;-1:-1:-1;5761:2:1;;;5823:6;5815;5808:22;5761:2;5850:6;5841:15;;5865:238;5879:2;5876:1;5873:9;5865:238;;;5950:3;5937:17;5967:31;5992:5;5967:31;:::i;:::-;6011:18;;5897:1;5890:9;;;;;6049:12;;;;6081;;5865:238;;;-1:-1:-1;6122:6:1;-1:-1:-1;;6166:18:1;;6153:32;;-1:-1:-1;;6197:16:1;;;6194:2;;;6231:6;6223;6216:22;6194:2;;6259:63;6314:7;6303:8;6292:9;6288:24;6259:63;:::i;:::-;6249:73;;;5122:1206;;;;;:::o;6333:190::-;6389:6;6442:2;6430:9;6421:7;6417:23;6413:32;6410:2;;;6463:6;6455;6448:22;6410:2;6491:26;6507:9;6491:26;:::i;6528:255::-;6586:6;6639:2;6627:9;6618:7;6614:23;6610:32;6607:2;;;6660:6;6652;6645:22;6607:2;6704:9;6691:23;6723:30;6747:5;6723:30;:::i;6788:259::-;6857:6;6910:2;6898:9;6889:7;6885:23;6881:32;6878:2;;;6931:6;6923;6916:22;6878:2;6968:9;6962:16;6987:30;7011:5;6987:30;:::i;7052:571::-;7140:6;7148;7201:2;7189:9;7180:7;7176:23;7172:32;7169:2;;;7222:6;7214;7207:22;7169:2;7267:9;7254:23;7296:18;7337:2;7329:6;7326:14;7323:2;;;7358:6;7350;7343:22;7323:2;7386:49;7427:7;7418:6;7407:9;7403:22;7386:49;:::i;:::-;7376:59;;7488:2;7477:9;7473:18;7460:32;7444:48;;7517:2;7507:8;7504:16;7501:2;;;7538:6;7530;7523:22;7501:2;;7566:51;7609:7;7598:8;7587:9;7583:24;7566:51;:::i;7628:190::-;7687:6;7740:2;7728:9;7719:7;7715:23;7711:32;7708:2;;;7761:6;7753;7746:22;7708:2;-1:-1:-1;7789:23:1;;7698:120;-1:-1:-1;7698:120:1:o;7823:194::-;7893:6;7946:2;7934:9;7925:7;7921:23;7917:32;7914:2;;;7967:6;7959;7952:22;7914:2;-1:-1:-1;7995:16:1;;7904:113;-1:-1:-1;7904:113:1:o;8022:437::-;8075:3;8113:5;8107:12;8140:6;8135:3;8128:19;8166:4;8195:2;8190:3;8186:12;8179:19;;8232:2;8225:5;8221:14;8253:3;8265:169;8279:6;8276:1;8273:13;8265:169;;;8340:13;;8328:26;;8374:12;;;;8409:15;;;;8301:1;8294:9;8265:169;;;-1:-1:-1;8450:3:1;;8083:376;-1:-1:-1;;;;;8083:376:1:o;8464:257::-;8505:3;8543:5;8537:12;8570:6;8565:3;8558:19;8586:63;8642:6;8635:4;8630:3;8626:14;8619:4;8612:5;8608:16;8586:63;:::i;:::-;8703:2;8682:15;-1:-1:-1;;8678:29:1;8669:39;;;;8710:4;8665:50;;8513:208;-1:-1:-1;;8513:208:1:o;8726:979::-;8811:12;;8776:3;;8868:1;8888:18;;;;8941;;;;8968:2;;9022:4;9014:6;9010:17;9000:27;;8968:2;9048;9096;9088:6;9085:14;9065:18;9062:38;9059:2;;;-1:-1:-1;;;9123:33:1;;9179:4;9176:1;9169:15;9209:4;9130:3;9197:17;9059:2;9240:18;9267:104;;;;9385:1;9380:319;;;;9233:466;;9267:104;-1:-1:-1;;9300:24:1;;9288:37;;9345:16;;;;-1:-1:-1;9267:104:1;;9380:319;22168:4;22187:17;;;22237:4;22221:21;;9474:1;9488:165;9502:6;9499:1;9496:13;9488:165;;;9580:14;;9567:11;;;9560:35;9623:16;;;;9517:10;;9488:165;;;9492:3;;9682:6;9677:3;9673:16;9666:23;;9233:466;;;;;;;8784:921;;;;:::o;9710:197::-;9838:3;9863:38;9897:3;9889:6;9863:38;:::i;9912:376::-;10088:3;10116:38;10150:3;10142:6;10116:38;:::i;:::-;10183:6;10177:13;10199:52;10244:6;10240:2;10233:4;10225:6;10221:17;10199:52;:::i;:::-;10267:15;;10096:192;-1:-1:-1;;;;10096:192:1:o;10501:826::-;-1:-1:-1;;;;;10898:15:1;;;10880:34;;10950:15;;10945:2;10930:18;;10923:43;10860:3;10997:2;10982:18;;10975:31;;;10823:4;;11029:57;;11066:19;;11058:6;11029:57;:::i;:::-;11134:9;11126:6;11122:22;11117:2;11106:9;11102:18;11095:50;11168:44;11205:6;11197;11168:44;:::i;:::-;11154:58;;11261:9;11253:6;11249:22;11243:3;11232:9;11228:19;11221:51;11289:32;11314:6;11306;11289:32;:::i;:::-;11281:40;10832:495;-1:-1:-1;;;;;;;;10832:495:1:o;11332:560::-;-1:-1:-1;;;;;11629:15:1;;;11611:34;;11681:15;;11676:2;11661:18;;11654:43;11728:2;11713:18;;11706:34;;;11771:2;11756:18;;11749:34;;;11591:3;11814;11799:19;;11792:32;;;11554:4;;11841:45;;11866:19;;11858:6;11841:45;:::i;:::-;11833:53;11563:329;-1:-1:-1;;;;;;;11563:329:1:o;11897:261::-;12076:2;12065:9;12058:21;12039:4;12096:56;12148:2;12137:9;12133:18;12125:6;12096:56;:::i;12163:465::-;12420:2;12409:9;12402:21;12383:4;12446:56;12498:2;12487:9;12483:18;12475:6;12446:56;:::i;:::-;12550:9;12542:6;12538:22;12533:2;12522:9;12518:18;12511:50;12578:44;12615:6;12607;12578:44;:::i;:::-;12570:52;12392:236;-1:-1:-1;;;;;12392:236:1:o;13049:219::-;13198:2;13187:9;13180:21;13161:4;13218:44;13258:2;13247:9;13243:18;13235:6;13218:44;:::i;13694:404::-;13896:2;13878:21;;;13935:2;13915:18;;;13908:30;13974:34;13969:2;13954:18;;13947:62;-1:-1:-1;;;14040:2:1;14025:18;;14018:38;14088:3;14073:19;;13868:230::o;16802:401::-;17004:2;16986:21;;;17043:2;17023:18;;;17016:30;17082:34;17077:2;17062:18;;17055:62;-1:-1:-1;;;17148:2:1;17133:18;;17126:35;17193:3;17178:19;;16976:227::o;17627:406::-;17829:2;17811:21;;;17868:2;17848:18;;;17841:30;17907:34;17902:2;17887:18;;17880:62;-1:-1:-1;;;17973:2:1;17958:18;;17951:40;18023:3;18008:19;;17801:232::o;18389:356::-;18591:2;18573:21;;;18610:18;;;18603:30;18669:34;18664:2;18649:18;;18642:62;18736:2;18721:18;;18563:182::o;20687:404::-;20889:2;20871:21;;;20928:2;20908:18;;;20901:30;20967:34;20962:2;20947:18;;20940:62;-1:-1:-1;;;21033:2:1;21018:18;;21011:38;21081:3;21066:19;;20861:230::o;21096:397::-;21298:2;21280:21;;;21337:2;21317:18;;;21310:30;21376:34;21371:2;21356:18;;21349:62;-1:-1:-1;;;21442:2:1;21427:18;;21420:31;21483:3;21468:19;;21270:223::o;21933:183::-;21993:4;22026:18;22018:6;22015:30;22012:2;;;22048:18;;:::i;:::-;-1:-1:-1;22093:1:1;22089:14;22105:4;22085:25;;22002:114::o;22253:128::-;22293:3;22324:1;22320:6;22317:1;22314:13;22311:2;;;22330:18;;:::i;:::-;-1:-1:-1;22366:9:1;;22301:80::o;22386:120::-;22426:1;22452;22442:2;;22457:18;;:::i;:::-;-1:-1:-1;22491:9:1;;22432:74::o;22511:125::-;22551:4;22579:1;22576;22573:8;22570:2;;;22584:18;;:::i;:::-;-1:-1:-1;22621:9:1;;22560:76::o;22641:258::-;22713:1;22723:113;22737:6;22734:1;22731:13;22723:113;;;22813:11;;;22807:18;22794:11;;;22787:39;22759:2;22752:10;22723:113;;;22854:6;22851:1;22848:13;22845:2;;;22889:1;22880:6;22875:3;22871:16;22864:27;22845:2;;22694:205;;;:::o;22904:380::-;22983:1;22979:12;;;;23026;;;23047:2;;23101:4;23093:6;23089:17;23079:27;;23047:2;23154;23146:6;23143:14;23123:18;23120:38;23117:2;;;23200:10;23195:3;23191:20;23188:1;23181:31;23235:4;23232:1;23225:15;23263:4;23260:1;23253:15;23117:2;;22959:325;;;:::o;23289:249::-;23399:2;23380:13;;-1:-1:-1;;23376:27:1;23364:40;;23434:18;23419:34;;23455:22;;;23416:62;23413:2;;;23481:18;;:::i;:::-;23517:2;23510:22;-1:-1:-1;;23336:202:1:o;23543:135::-;23582:3;-1:-1:-1;;23603:17:1;;23600:2;;;23623:18;;:::i;:::-;-1:-1:-1;23670:1:1;23659:13;;23590:88::o;23683:201::-;23721:3;23749:10;23794:2;23787:5;23783:14;23821:2;23812:7;23809:15;23806:2;;;23827:18;;:::i;:::-;23876:1;23863:15;;23729:155;-1:-1:-1;;;23729:155:1:o;23889:112::-;23921:1;23947;23937:2;;23952:18;;:::i;:::-;-1:-1:-1;23986:9:1;;23927:74::o;24006:127::-;24067:10;24062:3;24058:20;24055:1;24048:31;24098:4;24095:1;24088:15;24122:4;24119:1;24112:15;24138:127;24199:10;24194:3;24190:20;24187:1;24180:31;24230:4;24227:1;24220:15;24254:4;24251:1;24244:15;24270:127;24331:10;24326:3;24322:20;24319:1;24312:31;24362:4;24359:1;24352:15;24386:4;24383:1;24376:15;24402:185;24437:3;24479:1;24461:16;24458:23;24455:2;;;24529:1;24524:3;24519;24504:27;24560:10;24555:3;24551:20;24455:2;24445:142;:::o;24592:671::-;24631:3;24673:4;24655:16;24652:26;24649:2;;;24639:624;:::o;24649:2::-;24715;24709:9;-1:-1:-1;;24780:16:1;24776:25;;24773:1;24709:9;24752:50;24831:4;24825:11;24855:16;24890:18;24961:2;24954:4;24946:6;24942:17;24939:25;24934:2;24926:6;24923:14;24920:45;24917:2;;;24968:5;;;;;24639:624;:::o;24917:2::-;25005:6;24999:4;24995:17;24984:28;;25041:3;25035:10;25068:2;25060:6;25057:14;25054:2;;;25074:5;;;;;;24639:624;:::o;25054:2::-;25158;25139:16;25133:4;25129:27;25125:36;25118:4;25109:6;25104:3;25100:16;25096:27;25093:69;25090:2;;;25165:5;;;;;;24639:624;:::o;25090:2::-;25181:57;25232:4;25223:6;25215;25211:19;25207:30;25201:4;25181:57;:::i;:::-;-1:-1:-1;25254:3:1;;24639:624;-1:-1:-1;;;;;24639:624:1:o;25268:131::-;-1:-1:-1;;;;;25343:31:1;;25333:42;;25323:2;;25389:1;25386;25379:12;25404:131;-1:-1:-1;;;;;;25478:32:1;;25468:43;;25458:2;;25525:1;25522;25515:12

Swarm Source

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